diff -r 000000000000 -r 4f2f89ce4247 WebCore/rendering/RenderThemeChromiumLinux.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebCore/rendering/RenderThemeChromiumLinux.cpp Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2007 Apple Inc. + * Copyright (C) 2007 Alp Toker + * Copyright (C) 2008 Collabora Ltd. + * Copyright (C) 2008, 2009 Google Inc. + * Copyright (C) 2009 Kenneth Rohde Christiansen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#include "config.h" +#include "RenderThemeChromiumLinux.h" + +#include "CSSValueKeywords.h" +#include "Color.h" +#include "PlatformThemeChromiumGtk.h" +#include "RenderObject.h" +#include "ScrollbarTheme.h" +#include "UserAgentStyleSheets.h" + +namespace WebCore { + +unsigned RenderThemeChromiumLinux::m_activeSelectionBackgroundColor = + 0xff1e90ff; +unsigned RenderThemeChromiumLinux::m_activeSelectionForegroundColor = + Color::black; +unsigned RenderThemeChromiumLinux::m_inactiveSelectionBackgroundColor = + 0xffc8c8c8; +unsigned RenderThemeChromiumLinux::m_inactiveSelectionForegroundColor = + 0xff323232; + +double RenderThemeChromiumLinux::m_caretBlinkInterval; + +PassRefPtr RenderThemeChromiumLinux::create() +{ + return adoptRef(new RenderThemeChromiumLinux()); +} + +PassRefPtr RenderTheme::themeForPage(Page* page) +{ + static RenderTheme* rt = RenderThemeChromiumLinux::create().releaseRef(); + return rt; +} + +RenderThemeChromiumLinux::RenderThemeChromiumLinux() +{ + m_caretBlinkInterval = RenderTheme::caretBlinkInterval(); +} + +RenderThemeChromiumLinux::~RenderThemeChromiumLinux() +{ +} + +Color RenderThemeChromiumLinux::systemColor(int cssValueId) const +{ + static const Color linuxButtonGrayColor(0xffdddddd); + + if (cssValueId == CSSValueButtonface) + return linuxButtonGrayColor; + return RenderTheme::systemColor(cssValueId); +} + +String RenderThemeChromiumLinux::extraDefaultStyleSheet() +{ + return RenderThemeChromiumSkia::extraDefaultStyleSheet() + + String(themeChromiumLinuxUserAgentStyleSheet, sizeof(themeChromiumLinuxUserAgentStyleSheet)); +} + +bool RenderThemeChromiumLinux::controlSupportsTints(const RenderObject* o) const +{ + return isEnabled(o); +} + +Color RenderThemeChromiumLinux::activeListBoxSelectionBackgroundColor() const +{ + return Color(0x28, 0x28, 0x28); +} + +Color RenderThemeChromiumLinux::activeListBoxSelectionForegroundColor() const +{ + return Color::black; +} + +Color RenderThemeChromiumLinux::inactiveListBoxSelectionBackgroundColor() const +{ + return Color(0xc8, 0xc8, 0xc8); +} + +Color RenderThemeChromiumLinux::inactiveListBoxSelectionForegroundColor() const +{ + return Color(0x32, 0x32, 0x32); +} + +Color RenderThemeChromiumLinux::platformActiveSelectionBackgroundColor() const +{ + return m_activeSelectionBackgroundColor; +} + +Color RenderThemeChromiumLinux::platformInactiveSelectionBackgroundColor() const +{ + return m_inactiveSelectionBackgroundColor; +} + +Color RenderThemeChromiumLinux::platformActiveSelectionForegroundColor() const +{ + return m_activeSelectionForegroundColor; +} + +Color RenderThemeChromiumLinux::platformInactiveSelectionForegroundColor() const +{ + return m_inactiveSelectionForegroundColor; +} + +void RenderThemeChromiumLinux::adjustSliderThumbSize(RenderObject* o) const +{ + // These sizes match the sizes in Chromium Win. + const int sliderThumbAlongAxis = 11; + const int sliderThumbAcrossAxis = 21; + if (o->style()->appearance() == SliderThumbHorizontalPart) { + o->style()->setWidth(Length(sliderThumbAlongAxis, Fixed)); + o->style()->setHeight(Length(sliderThumbAcrossAxis, Fixed)); + } else if (o->style()->appearance() == SliderThumbVerticalPart) { + o->style()->setWidth(Length(sliderThumbAcrossAxis, Fixed)); + o->style()->setHeight(Length(sliderThumbAlongAxis, Fixed)); + } else + RenderThemeChromiumSkia::adjustSliderThumbSize(o); +} + +bool RenderThemeChromiumLinux::supportsControlTints() const +{ + return true; +} + +void RenderThemeChromiumLinux::setCaretBlinkInterval(double interval) +{ + m_caretBlinkInterval = interval; +} + +double RenderThemeChromiumLinux::caretBlinkIntervalInternal() const +{ + return m_caretBlinkInterval; +} + +void RenderThemeChromiumLinux::setSelectionColors( + unsigned activeBackgroundColor, + unsigned activeForegroundColor, + unsigned inactiveBackgroundColor, + unsigned inactiveForegroundColor) +{ + m_activeSelectionBackgroundColor = activeBackgroundColor; + m_activeSelectionForegroundColor = activeForegroundColor; + m_inactiveSelectionBackgroundColor = inactiveBackgroundColor; + m_inactiveSelectionForegroundColor = inactiveForegroundColor; +} + +void RenderThemeChromiumLinux::adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const +{ + int width = ScrollbarTheme::nativeTheme()->scrollbarThickness(); + style->setWidth(Length(width, Fixed)); + style->setMinWidth(Length(width, Fixed)); +} + +bool RenderThemeChromiumLinux::paintInnerSpinButton(RenderObject* object, const PaintInfo& info, const IntRect& rect) +{ + ControlStates northStates = controlStatesForRenderer(object); + ControlStates southStates = northStates; + if (northStates & SpinUpState) + southStates &= ~(HoverState | PressedState); + else + northStates &= ~(HoverState | PressedState); + + IntRect half = rect; + half.setHeight(rect.height() / 2); + PlatformThemeChromiumGtk::paintArrowButton(info.context, half, PlatformThemeChromiumGtk::North, northStates); + + half.setY(rect.y() + rect.height() / 2); + PlatformThemeChromiumGtk::paintArrowButton(info.context, half, PlatformThemeChromiumGtk::South, southStates); + return false; +} + +} // namespace WebCore