]>
git.saurik.com Git - iphone-api.git/blob - WebCore/FloatSize.h
2 * Copyright (C) 2003, 2006 Apple Computer, Inc. All rights reserved.
3 * Copyright (C) 2005 Nokia. All rights reserved.
4 * 2008 Eric Seidel <eric@webkit.org>
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #include <wtf/Platform.h>
33 #include <CoreGraphics/CoreGraphics.h>
36 typedef struct CGSize CGSize
;
51 FloatSize() : m_width(0), m_height(0) { }
52 FloatSize(float width
, float height
) : m_width(width
), m_height(height
) { }
53 FloatSize(const IntSize
&);
55 static FloatSize
narrowPrecision(double width
, double height
);
57 float width() const { return m_width
; }
58 float height() const { return m_height
; }
60 void setWidth(float width
) { m_width
= width
; }
61 void setHeight(float height
) { m_height
= height
; }
63 bool isEmpty() const { return m_width
<= 0 || m_height
<= 0; }
65 FloatSize
expandedTo(const FloatSize
& other
) const
67 return FloatSize(m_width
> other
.m_width
? m_width
: other
.m_width
,
68 m_height
> other
.m_height
? m_height
: other
.m_height
);
71 FloatSize
shrunkTo(const FloatSize
& other
) const
73 return FloatSize(m_width
< other
.m_width
? m_width
: other
.m_width
,
74 m_height
< other
.m_height
? m_height
: other
.m_height
);
78 explicit FloatSize(const CGSize
&); // don't do this implicitly since it's lossy
79 operator CGSize() const;
84 float m_width
, m_height
;
87 inline FloatSize
& operator+=(FloatSize
& a
, const FloatSize
& b
)
89 a
.setWidth(a
.width() + b
.width());
90 a
.setHeight(a
.height() + b
.height());
94 inline FloatSize
& operator-=(FloatSize
& a
, const FloatSize
& b
)
96 a
.setWidth(a
.width() - b
.width());
97 a
.setHeight(a
.height() - b
.height());
101 inline FloatSize
operator+(const FloatSize
& a
, const FloatSize
& b
)
103 return FloatSize(a
.width() + b
.width(), a
.height() + b
.height());
106 inline FloatSize
operator-(const FloatSize
& a
, const FloatSize
& b
)
108 return FloatSize(a
.width() - b
.width(), a
.height() - b
.height());
111 inline FloatSize
operator-(const FloatSize
& size
)
113 return FloatSize(-size
.width(), -size
.height());
116 inline bool operator==(const FloatSize
& a
, const FloatSize
& b
)
118 return a
.width() == b
.width() && a
.height() == b
.height();
121 inline bool operator!=(const FloatSize
& a
, const FloatSize
& b
)
123 return a
.width() != b
.width() || a
.height() != b
.height();
126 } // namespace WebCore
128 #endif // FloatSize_h