OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc. All rights reserve
d. | |
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 #import "config.h" | |
27 #import "core/platform/graphics/mac/ColorMac.h" | |
28 | |
29 #import <wtf/RetainPtr.h> | |
30 #import <wtf/StdLibExtras.h> | |
31 | |
32 namespace WebCore { | |
33 | |
34 // NSColor calls don't throw, so no need to block Cocoa exceptions in this file | |
35 | |
36 static bool useOldAquaFocusRingColor; | |
37 | |
38 RGBA32 oldAquaFocusRingColor() | |
39 { | |
40 return 0xFF7DADD9; | |
41 } | |
42 | |
43 void setUsesTestModeFocusRingColor(bool newValue) | |
44 { | |
45 useOldAquaFocusRingColor = newValue; | |
46 } | |
47 | |
48 bool usesTestModeFocusRingColor() | |
49 { | |
50 return useOldAquaFocusRingColor; | |
51 } | |
52 | |
53 static RGBA32 makeRGBAFromNSColor(NSColor *c) | |
54 { | |
55 CGFloat redComponent; | |
56 CGFloat greenComponent; | |
57 CGFloat blueComponent; | |
58 CGFloat alpha; | |
59 [c getRed:&redComponent green:&greenComponent blue:&blueComponent alpha:&alp
ha]; | |
60 | |
61 return makeRGBA(255 * redComponent, 255 * greenComponent, 255 * blueComponen
t, 255 * alpha); | |
62 } | |
63 | |
64 Color colorFromNSColor(NSColor *c) | |
65 { | |
66 return Color(makeRGBAFromNSColor(c)); | |
67 } | |
68 | |
69 NSColor *nsColor(const Color& color) | |
70 { | |
71 RGBA32 c = color.rgb(); | |
72 switch (c) { | |
73 case 0: { | |
74 // Need this to avoid returning nil because cachedRGBAValues will de
fault to 0. | |
75 DEFINE_STATIC_LOCAL(RetainPtr<NSColor>, clearColor, ([NSColor colorW
ithDeviceRed:0 green:0 blue:0 alpha:0])); | |
76 return clearColor.get(); | |
77 } | |
78 case Color::black: { | |
79 DEFINE_STATIC_LOCAL(RetainPtr<NSColor>, blackColor, ([NSColor colorW
ithDeviceRed:0 green:0 blue:0 alpha:1])); | |
80 return blackColor.get(); | |
81 } | |
82 case Color::white: { | |
83 DEFINE_STATIC_LOCAL(RetainPtr<NSColor>, whiteColor, ([NSColor colorW
ithDeviceRed:1 green:1 blue:1 alpha:1])); | |
84 return whiteColor.get(); | |
85 } | |
86 default: { | |
87 const int cacheSize = 32; | |
88 static unsigned cachedRGBAValues[cacheSize]; | |
89 static RetainPtr<NSColor>* cachedColors = new RetainPtr<NSColor>[cac
heSize]; | |
90 | |
91 for (int i = 0; i != cacheSize; ++i) { | |
92 if (cachedRGBAValues[i] == c) | |
93 return cachedColors[i].get(); | |
94 } | |
95 | |
96 NSColor *result = [NSColor colorWithDeviceRed:static_cast<CGFloat>(c
olor.red()) / 255 | |
97 green:static_cast<CGFloat>(c
olor.green()) / 255 | |
98 blue:static_cast<CGFloat>(c
olor.blue()) / 255 | |
99 alpha:static_cast<CGFloat>(c
olor.alpha()) / 255]; | |
100 | |
101 static int cursor; | |
102 cachedRGBAValues[cursor] = c; | |
103 cachedColors[cursor] = result; | |
104 if (++cursor == cacheSize) | |
105 cursor = 0; | |
106 return result; | |
107 } | |
108 } | |
109 } | |
110 | |
111 | |
112 } // namespace WebCore | |
OLD | NEW |