]> git.saurik.com Git - iphone-api.git/blob - WebCore/Color.h
Add support for new WinterBoard Settings features.
[iphone-api.git] / WebCore / Color.h
1 /*
2 * Copyright (C) 2003-6 Apple Computer, 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 COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #ifndef Color_h
27 #define Color_h
28
29 #include <wtf/Platform.h>
30
31 #if PLATFORM(CG)
32 typedef struct CGColor* CGColorRef;
33 #endif
34
35 #if PLATFORM(QT)
36 #include <qglobal.h>
37 QT_BEGIN_NAMESPACE
38 class QColor;
39 QT_END_NAMESPACE
40 #endif
41
42 #if PLATFORM(GTK)
43 typedef struct _GdkColor GdkColor;
44 #endif
45
46 #if PLATFORM(WX)
47 class wxColour;
48 #endif
49
50 namespace WebCore {
51
52 class String;
53 class Color;
54
55 typedef unsigned RGBA32; // RGBA quadruplet
56
57 RGBA32 makeRGB(int r, int g, int b);
58 RGBA32 makeRGBA(int r, int g, int b, int a);
59
60 RGBA32 colorWithOverrideAlpha(RGBA32 color, float overrideAlpha);
61 RGBA32 makeRGBA32FromFloats(float r, float g, float b, float a);
62 RGBA32 makeRGBAFromHSLA(double h, double s, double l, double a);
63
64 int differenceSquared(const Color&, const Color&);
65
66 class Color {
67 public:
68 Color() : m_color(0), m_valid(false) { }
69 Color(RGBA32 col) : m_color(col), m_valid(true) { }
70 Color(int r, int g, int b) : m_color(makeRGB(r, g, b)), m_valid(true) { }
71 Color(int r, int g, int b, int a) : m_color(makeRGBA(r, g, b, a)), m_valid(true) { }
72 // Color is currently limited to 32bit RGBA, perhaps some day we'll support better colors
73 Color(float r, float g, float b, float a) : m_color(makeRGBA32FromFloats(r, g, b, a)), m_valid(true) { }
74 explicit Color(const String&);
75 explicit Color(const char*);
76
77 String name() const;
78 void setNamedColor(const String&);
79
80 bool isValid() const { return m_valid; }
81
82 bool hasAlpha() const { return alpha() < 255; }
83
84 int red() const { return (m_color >> 16) & 0xFF; }
85 int green() const { return (m_color >> 8) & 0xFF; }
86 int blue() const { return m_color & 0xFF; }
87 int alpha() const { return (m_color >> 24) & 0xFF; }
88
89 RGBA32 rgb() const { return m_color; } // Preserve the alpha.
90 void setRGB(int r, int g, int b) { m_color = makeRGB(r, g, b); m_valid = true; }
91 void setRGB(RGBA32 rgb) { m_color = rgb; m_valid = true; }
92 void getRGBA(float& r, float& g, float& b, float& a) const;
93 void getRGBA(double& r, double& g, double& b, double& a) const;
94
95 Color light() const;
96 Color dark() const;
97
98 bool isDark() const;
99
100 Color blend(const Color&) const;
101 Color blendWithWhite() const;
102
103 #if PLATFORM(QT)
104 Color(const QColor&);
105 operator QColor() const;
106 #endif
107
108 #if PLATFORM(GTK)
109 Color(const GdkColor&);
110 // We can't sensibly go back to GdkColor without losing the alpha value
111 #endif
112
113 #if PLATFORM(WX)
114 Color(const wxColour&);
115 operator wxColour() const;
116 #endif
117
118 #if PLATFORM(CG)
119 Color(CGColorRef);
120 #endif
121
122 static bool parseHexColor(const String& name, RGBA32& rgb);
123
124 static const RGBA32 black = 0xFF000000;
125 static const RGBA32 white = 0xFFFFFFFF;
126 static const RGBA32 darkGray = 0xFF808080;
127 static const RGBA32 gray = 0xFFA0A0A0;
128 static const RGBA32 lightGray = 0xFFC0C0C0;
129 static const RGBA32 transparent = 0x00000000;
130 static const RGBA32 tap = 0x4D1A1A1A;
131 static const RGBA32 compositionFill = 0x3CAFC0E3;
132 static const RGBA32 compositionFrame = 0x3C4D80B4;
133
134 private:
135 RGBA32 m_color;
136 bool m_valid;
137 };
138
139 inline bool operator==(const Color& a, const Color& b)
140 {
141 return a.rgb() == b.rgb() && a.isValid() == b.isValid();
142 }
143
144 inline bool operator!=(const Color& a, const Color& b)
145 {
146 return !(a == b);
147 }
148
149 Color focusRingColor();
150
151 #if PLATFORM(CG)
152 CGColorRef cgColor(const Color&);
153 #endif
154
155 } // namespace WebCore
156
157 #endif // Color_h