From 9364f22aed35e1a1e9d07c121510f80be3ab0502 Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Tue, 21 Oct 2008 07:00:00 -0700 Subject: Initial Contribution --- WebCore/rendering/RenderThemeMac.mm | 202 +++--------------------------------- 1 file changed, 17 insertions(+), 185 deletions(-) (limited to 'WebCore/rendering/RenderThemeMac.mm') 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(scaleFactor * [colorInColorSpace redComponent]), - static_cast(scaleFactor * [colorInColorSpace greenComponent]), - static_cast(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([[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 -- cgit v1.1