Web Automation: elements larger than the viewport have incorrect in-view center point
[WebKit-https.git] / Source / WebCore / platform / LengthPoint.h
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef LengthPoint_h
27 #define LengthPoint_h
28
29 #include "Length.h"
30
31 namespace WebCore {
32
33 struct LengthPoint {
34 public:
35     LengthPoint()
36     {
37     }
38     
39     LengthPoint(Length x, Length y)
40         : m_x(WTFMove(x))
41         , m_y(WTFMove(y))
42     {
43     }
44
45     bool operator==(const LengthPoint& o) const
46     {
47         return m_x == o.m_x && m_y == o.m_y;
48     }
49
50     bool operator!=(const LengthPoint& o) const
51     {
52         return !(*this == o);
53     }
54
55     void setX(Length x) { m_x = WTFMove(x); }
56     const Length& x() const { return m_x; }
57
58     void setY(Length y) { m_y = WTFMove(y); }
59     const Length& y() const { return m_y; }
60
61 private:
62     // FIXME: it would be nice to pack the two Lengths together better somehow (to avoid padding between them).
63     Length m_x;
64     Length m_y;
65 };
66
67 inline LengthPoint blend(const LengthPoint& from, const LengthPoint& to, double progress)
68 {
69     return LengthPoint(blend(from.x(), to.x(), progress), blend(from.y(), to.y(), progress));
70 }
71
72 WTF::TextStream& operator<<(WTF::TextStream&, const LengthPoint&);
73
74 } // namespace WebCore
75
76 #endif // LengthPoint_h