summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderThemeMac.mm
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
commit9364f22aed35e1a1e9d07c121510f80be3ab0502 (patch)
treed49911209b132da58d838efa852daf28d516df21 /WebCore/rendering/RenderThemeMac.mm
parent87eb0cb35bad8784770ebc807e6c982432e47107 (diff)
downloadexternal_webkit-9364f22aed35e1a1e9d07c121510f80be3ab0502.zip
external_webkit-9364f22aed35e1a1e9d07c121510f80be3ab0502.tar.gz
external_webkit-9364f22aed35e1a1e9d07c121510f80be3ab0502.tar.bz2
Initial Contribution
Diffstat (limited to 'WebCore/rendering/RenderThemeMac.mm')
-rw-r--r--WebCore/rendering/RenderThemeMac.mm202
1 files changed, 17 insertions, 185 deletions
diff --git a/WebCore/rendering/RenderThemeMac.mm b/WebCore/rendering/RenderThemeMac.mm
index 34487d7..887ef0a 100644
--- a/WebCore/rendering/RenderThemeMac.mm
+++ b/WebCore/rendering/RenderThemeMac.mm
@@ -105,7 +105,8 @@ RenderTheme* theme()
}
RenderThemeMac::RenderThemeMac()
- : m_isSliderThumbHorizontalPressed(false)
+ : m_resizeCornerImage(0)
+ , m_isSliderThumbHorizontalPressed(false)
, m_isSliderThumbVerticalPressed(false)
, m_notificationObserver(AdoptNS, [[WebCoreRenderThemeNotificationObserver alloc] initWithTheme:this])
{
@@ -118,6 +119,7 @@ RenderThemeMac::RenderThemeMac()
RenderThemeMac::~RenderThemeMac()
{
[[NSNotificationCenter defaultCenter] removeObserver:m_notificationObserver.get()];
+ delete m_resizeCornerImage;
}
Color RenderThemeMac::platformActiveSelectionBackgroundColor() const
@@ -199,190 +201,6 @@ void RenderThemeMac::systemFont(int cssValueId, FontDescription& fontDescription
fontDescription = *cachedDesc;
}
-static RGBA32 convertNSColorToColor(NSColor *color)
-{
- NSColor *colorInColorSpace = [color colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
- if (colorInColorSpace) {
- static const double scaleFactor = nextafter(256.0, 0.0);
- return makeRGB(static_cast<int>(scaleFactor * [colorInColorSpace redComponent]),
- static_cast<int>(scaleFactor * [colorInColorSpace greenComponent]),
- static_cast<int>(scaleFactor * [colorInColorSpace blueComponent]));
- }
-
- // This conversion above can fail if the NSColor in question is an NSPatternColor
- // (as many system colors are). These colors are actually a repeating pattern
- // not just a solid color. To work around this we simply draw a 1x1 image of
- // the color and use that pixel's color. It might be better to use an average of
- // the colors in the pattern instead.
- NSBitmapImageRep *offscreenRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
- pixelsWide:1
- pixelsHigh:1
- bitsPerSample:8
- samplesPerPixel:4
- hasAlpha:YES
- isPlanar:NO
- colorSpaceName:NSCalibratedRGBColorSpace
- bytesPerRow:4
- bitsPerPixel:32];
-
- [NSGraphicsContext saveGraphicsState];
- [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep]];
- NSEraseRect(NSMakeRect(0, 0, 1, 1));
- [color drawSwatchInRect:NSMakeRect(0, 0, 1, 1)];
- [NSGraphicsContext restoreGraphicsState];
-
- NSUInteger pixel[4];
- [offscreenRep getPixel:pixel atX:0 y:0];
-
- [offscreenRep release];
-
- return makeRGB(pixel[0], pixel[1], pixel[2]);
-}
-
-static RGBA32 menuBackgroundColor()
-{
- NSBitmapImageRep *offscreenRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
- pixelsWide:1
- pixelsHigh:1
- bitsPerSample:8
- samplesPerPixel:4
- hasAlpha:YES
- isPlanar:NO
- colorSpaceName:NSCalibratedRGBColorSpace
- bytesPerRow:4
- bitsPerPixel:32];
-
- CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep] graphicsPort]);
- CGRect rect = CGRectMake(0, 0, 1, 1);
- HIThemeMenuDrawInfo drawInfo;
- drawInfo.version = 0;
- drawInfo.menuType = kThemeMenuTypePopUp;
- HIThemeDrawMenuBackground(&rect, &drawInfo, context, kHIThemeOrientationInverted);
-
- NSUInteger pixel[4];
- [offscreenRep getPixel:pixel atX:0 y:0];
-
- [offscreenRep release];
-
- return makeRGB(pixel[0], pixel[1], pixel[2]);
-}
-
-void RenderThemeMac::platformColorsDidChange()
-{
- m_systemColorCache.clear();
- RenderTheme::platformColorsDidChange();
-}
-
-Color RenderThemeMac::systemColor(int cssValueId) const
-{
- if (m_systemColorCache.contains(cssValueId))
- return m_systemColorCache.get(cssValueId);
-
- Color color;
- switch (cssValueId) {
- case CSS_VAL_ACTIVEBORDER:
- color = convertNSColorToColor([NSColor keyboardFocusIndicatorColor]);
- break;
- case CSS_VAL_ACTIVECAPTION:
- color = convertNSColorToColor([NSColor windowFrameTextColor]);
- break;
- case CSS_VAL_APPWORKSPACE:
- color = convertNSColorToColor([NSColor headerColor]);
- break;
- case CSS_VAL_BACKGROUND:
- // Use theme independent default
- break;
- case CSS_VAL_BUTTONFACE:
- // We use this value instead of NSColor's controlColor to avoid website incompatibilities.
- // We may want to change this to use the NSColor in future.
- color = 0xFFC0C0C0;
- break;
- case CSS_VAL_BUTTONHIGHLIGHT:
- color = convertNSColorToColor([NSColor controlHighlightColor]);
- break;
- case CSS_VAL_BUTTONSHADOW:
- color = convertNSColorToColor([NSColor controlShadowColor]);
- break;
- case CSS_VAL_BUTTONTEXT:
- color = convertNSColorToColor([NSColor controlTextColor]);
- break;
- case CSS_VAL_CAPTIONTEXT:
- color = convertNSColorToColor([NSColor textColor]);
- break;
- case CSS_VAL_GRAYTEXT:
- color = convertNSColorToColor([NSColor disabledControlTextColor]);
- break;
- case CSS_VAL_HIGHLIGHT:
- color = convertNSColorToColor([NSColor selectedTextBackgroundColor]);
- break;
- case CSS_VAL_HIGHLIGHTTEXT:
- color = convertNSColorToColor([NSColor selectedTextColor]);
- break;
- case CSS_VAL_INACTIVEBORDER:
- color = convertNSColorToColor([NSColor controlBackgroundColor]);
- break;
- case CSS_VAL_INACTIVECAPTION:
- color = convertNSColorToColor([NSColor controlBackgroundColor]);
- break;
- case CSS_VAL_INACTIVECAPTIONTEXT:
- color = convertNSColorToColor([NSColor textColor]);
- break;
- case CSS_VAL_INFOBACKGROUND:
- // There is no corresponding NSColor for this so we use a hard coded value.
- color = 0xFFFBFCC5;
- break;
- case CSS_VAL_INFOTEXT:
- color = convertNSColorToColor([NSColor textColor]);
- break;
- case CSS_VAL_MENU:
- color = menuBackgroundColor();
- break;
- case CSS_VAL_MENUTEXT:
- color = convertNSColorToColor([NSColor selectedMenuItemTextColor]);
- break;
- case CSS_VAL_SCROLLBAR:
- color = convertNSColorToColor([NSColor scrollBarColor]);
- break;
- case CSS_VAL_TEXT:
- color = convertNSColorToColor([NSColor textColor]);
- break;
- case CSS_VAL_THREEDDARKSHADOW:
- color = convertNSColorToColor([NSColor controlDarkShadowColor]);
- break;
- case CSS_VAL_THREEDSHADOW:
- color = convertNSColorToColor([NSColor shadowColor]);
- break;
- case CSS_VAL_THREEDFACE:
- // We use this value instead of NSColor's controlColor to avoid website incompatibilities.
- // We may want to change this to use the NSColor in future.
- color = 0xFFC0C0C0;
- break;
- case CSS_VAL_THREEDHIGHLIGHT:
- color = convertNSColorToColor([NSColor highlightColor]);
- break;
- case CSS_VAL_THREEDLIGHTSHADOW:
- color = convertNSColorToColor([NSColor controlLightHighlightColor]);
- break;
- case CSS_VAL_WINDOW:
- color = convertNSColorToColor([NSColor windowBackgroundColor]);
- break;
- case CSS_VAL_WINDOWFRAME:
- color = convertNSColorToColor([NSColor windowFrameColor]);
- break;
- case CSS_VAL_WINDOWTEXT:
- color = convertNSColorToColor([NSColor windowFrameTextColor]);
- break;
- }
-
- if (!color.isValid())
- color = RenderTheme::systemColor(cssValueId);
-
- if (color.isValid())
- m_systemColorCache.set(cssValueId, color.rgb());
-
- return color;
-}
-
bool RenderThemeMac::isControlStyled(const RenderStyle* style, const BorderData& border,
const BackgroundLayer& background, const Color& backgroundColor) const
{
@@ -391,6 +209,13 @@ bool RenderThemeMac::isControlStyled(const RenderStyle* style, const BorderData&
return RenderTheme::isControlStyled(style, border, background, backgroundColor);
}
+void RenderThemeMac::paintResizeControl(GraphicsContext* c, const IntRect& r)
+{
+ Image* resizeCornerImage = this->resizeCornerImage();
+ IntPoint imagePoint(r.right() - resizeCornerImage->width(), r.bottom() - resizeCornerImage->height());
+ c->drawImage(resizeCornerImage, imagePoint);
+}
+
void RenderThemeMac::adjustRepaintRect(const RenderObject* o, IntRect& r)
{
switch (o->style()->appearance()) {
@@ -1704,4 +1529,11 @@ NSSliderCell* RenderThemeMac::sliderThumbVertical() const
return m_sliderThumbVertical.get();
}
+Image* RenderThemeMac::resizeCornerImage() const
+{
+ if (!m_resizeCornerImage)
+ m_resizeCornerImage = Image::loadPlatformResource("textAreaResizeCorner");
+ return m_resizeCornerImage;
+}
+
} // namespace WebCore