e43c3c7777c6abd1279eadfac4a325f6b4265e0a
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / public / platform / WebFloatSize.h
1 /*
2  * Copyright (C) 2013 Google 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 are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef WebFloatSize_h
32 #define WebFloatSize_h
33
34 #include "WebCommon.h"
35
36 #include <algorithm>
37
38 #if INSIDE_BLINK
39 #include "platform/geometry/FloatSize.h"
40 #else
41 #include <cmath>
42 #include <ui/gfx/geometry/size_f.h>
43 #include <ui/gfx/vector2d_f.h>
44 #endif
45
46 namespace blink {
47
48 struct WebFloatSize {
49     float width;
50     float height;
51
52     bool isEmpty() const { return width <= 0 || height <= 0; }
53
54     WebFloatSize()
55         : width(0)
56         , height(0)
57     {
58     }
59
60     WebFloatSize(float width, float height)
61         : width(width)
62         , height(height)
63     {
64     }
65
66 #if INSIDE_BLINK
67     WebFloatSize(const FloatSize& s)
68         : width(s.width())
69         , height(s.height())
70     {
71     }
72
73     WebFloatSize& operator=(const FloatSize& s)
74     {
75         width = s.width();
76         height = s.height();
77         return *this;
78     }
79
80     operator FloatSize() const
81     {
82         return FloatSize(width, height);
83     }
84 #else
85     WebFloatSize(const gfx::SizeF& s)
86         : width(s.width())
87         , height(s.height())
88     {
89     }
90
91     WebFloatSize(const gfx::Vector2dF& v)
92         : width(v.x())
93         , height(v.y())
94     {
95     }
96
97     WebFloatSize& operator=(const gfx::SizeF& s)
98     {
99         width = s.width();
100         height = s.height();
101         return *this;
102     }
103
104     WebFloatSize& operator=(const gfx::Vector2dF& v)
105     {
106         width = v.x();
107         height = v.y();
108         return *this;
109     }
110
111     operator gfx::SizeF() const
112     {
113         return gfx::SizeF(std::max(0.f, width), std::max(0.f, height));
114     }
115
116     operator gfx::Vector2dF() const
117     {
118         return gfx::Vector2dF(width, height);
119     }
120 #endif
121 };
122
123 inline bool operator==(const WebFloatSize& a, const WebFloatSize& b)
124 {
125     return a.width == b.width && a.height == b.height;
126 }
127
128 inline bool operator!=(const WebFloatSize& a, const WebFloatSize& b)
129 {
130     return !(a == b);
131 }
132
133 } // namespace blink
134
135 #endif