diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/RenderThemeChromiumWin.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/rendering/RenderThemeChromiumWin.cpp | 660 |
1 files changed, 0 insertions, 660 deletions
diff --git a/chromium/third_party/WebKit/Source/core/rendering/RenderThemeChromiumWin.cpp b/chromium/third_party/WebKit/Source/core/rendering/RenderThemeChromiumWin.cpp deleted file mode 100644 index b1224074607..00000000000 --- a/chromium/third_party/WebKit/Source/core/rendering/RenderThemeChromiumWin.cpp +++ /dev/null @@ -1,660 +0,0 @@ -/* - * This file is part of the WebKit project. - * - * Copyright (C) 2006 Apple Computer, Inc. - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#include "config.h" -#include "core/rendering/RenderThemeChromiumWin.h" - -#include <windows.h> -#include <uxtheme.h> -#include <vssym32.h> - -#include "CSSValueKeywords.h" -#include "HTMLNames.h" -#include "core/html/HTMLMediaElement.h" -#include "core/html/shadow/MediaControlElements.h" -#include "core/rendering/PaintInfo.h" -#include "core/rendering/RenderBox.h" -#include "core/rendering/RenderProgress.h" -#include "core/rendering/RenderSlider.h" -#include "platform/LayoutTestSupport.h" -#include "platform/fonts/FontSelector.h" -#include "platform/graphics/GraphicsContext.h" -#include "platform/graphics/win/TransparencyWin.h" -#include "platform/scroll/ScrollbarTheme.h" -#include "platform/win/SystemInfo.h" -#include "public/platform/Platform.h" -#include "public/platform/WebColor.h" -#include "public/platform/WebRect.h" -#include "public/platform/win/WebThemeEngine.h" -#include "wtf/CurrentTime.h" -#include "wtf/StdLibExtras.h" - -// FIXME: This dependency should eventually be removed. -#include <skia/ext/skia_utils_win.h> - -namespace WebCore { - -// The standard width for the menu list drop-down button when run under -// layout test mode. Use the value that's currently captured in most baselines. -static const int kStandardMenuListButtonWidth = 17; - -namespace { -// We must not create multiple ThemePainter instances. -class ThemePainter { -public: - ThemePainter(GraphicsContext* context, const IntRect& r) - { -#ifndef NDEBUG - ASSERT(!s_hasInstance); - s_hasInstance = true; -#endif - TransparencyWin::TransformMode transformMode = getTransformMode(context->getCTM()); - m_helper.init(context, getLayerMode(context, transformMode), transformMode, r); - - if (!m_helper.context()) { - // TransparencyWin doesn't have well-defined copy-ctor nor op=() - // so we re-initialize it instead of assigning a fresh istance. - // On the reinitialization, we fallback to use NoLayer mode. - // Note that the original initialization failure can be caused by - // a failure of an internal buffer allocation and NoLayer mode - // does not have such buffer allocations. - m_helper.~TransparencyWin(); - new (&m_helper) TransparencyWin(); - m_helper.init(context, TransparencyWin::NoLayer, transformMode, r); - } - } - - ~ThemePainter() - { - m_helper.composite(); -#ifndef NDEBUG - s_hasInstance = false; -#endif - } - - GraphicsContext* context() { return m_helper.context(); } - const IntRect& drawRect() { return m_helper.drawRect(); } - -private: - - static TransparencyWin::LayerMode getLayerMode(GraphicsContext* context, TransparencyWin::TransformMode transformMode) - { - if (!context->isCertainlyOpaque()) // Might have transparent background. - return TransparencyWin::WhiteLayer; - if (context->canvas()->isDrawingToLayer()) // Needs antialiasing help. - return TransparencyWin::OpaqueCompositeLayer; - // Nothing interesting. - return transformMode == TransparencyWin::KeepTransform ? TransparencyWin::NoLayer : TransparencyWin::OpaqueCompositeLayer; - } - - static TransparencyWin::TransformMode getTransformMode(const AffineTransform& matrix) - { - if (matrix.b() || matrix.c()) // Skew. - return TransparencyWin::Untransform; - if (matrix.a() != 1.0 || matrix.d() != 1.0) // Scale. - return TransparencyWin::ScaleTransform; - // Nothing interesting. - return TransparencyWin::KeepTransform; - } - - TransparencyWin m_helper; -#ifndef NDEBUG - static bool s_hasInstance; -#endif -}; - -#ifndef NDEBUG -bool ThemePainter::s_hasInstance = false; -#endif - -} // namespace - -// Internal static helper functions. We don't put them in an anonymous -// namespace so they have easier access to the WebCore namespace. - -static bool supportsFocus(ControlPart appearance) -{ - switch (appearance) { - case SquareButtonPart: - case PushButtonPart: - case ButtonPart: - case SearchFieldPart: - case TextFieldPart: - case TextAreaPart: - return true; - } - return false; -} - -static double querySystemBlinkInterval(double defaultInterval) -{ - UINT blinkTime = GetCaretBlinkTime(); - if (!blinkTime) - return defaultInterval; - if (blinkTime == INFINITE) - return 0; - return blinkTime / 1000.0; -} - -PassRefPtr<RenderTheme> RenderThemeChromiumWin::create() -{ - return adoptRef(new RenderThemeChromiumWin); -} - -RenderTheme& RenderTheme::theme() -{ - DEFINE_STATIC_REF(RenderTheme, renderTheme, (RenderThemeChromiumWin::create())); - return *renderTheme; -} - -bool RenderThemeChromiumWin::supportsFocusRing(const RenderStyle* style) const -{ - // Let webkit draw one of its halo rings around any focused element, - // except push buttons. For buttons we use the windows PBS_DEFAULTED - // styling to give it a blue border. - return style->appearance() == ButtonPart - || style->appearance() == PushButtonPart - || style->appearance() == SquareButtonPart; -} - -Color RenderThemeChromiumWin::platformActiveSelectionBackgroundColor() const -{ - if (isRunningLayoutTest()) - return Color(0x00, 0x00, 0xff); // Royal blue. - COLORREF color = GetSysColor(COLOR_HIGHLIGHT); - return Color(GetRValue(color), GetGValue(color), GetBValue(color), 0xff); -} - -Color RenderThemeChromiumWin::platformInactiveSelectionBackgroundColor() const -{ - if (isRunningLayoutTest()) - return Color(0x99, 0x99, 0x99); // Medium gray. - COLORREF color = GetSysColor(COLOR_GRAYTEXT); - return Color(GetRValue(color), GetGValue(color), GetBValue(color), 0xff); -} - -Color RenderThemeChromiumWin::platformActiveSelectionForegroundColor() const -{ - if (isRunningLayoutTest()) - return Color(0xff, 0xff, 0xcc); // Pale yellow. - COLORREF color = GetSysColor(COLOR_HIGHLIGHTTEXT); - return Color(GetRValue(color), GetGValue(color), GetBValue(color), 0xff); -} - -Color RenderThemeChromiumWin::platformInactiveSelectionForegroundColor() const -{ - return Color::white; -} - -Color RenderThemeChromiumWin::platformActiveTextSearchHighlightColor() const -{ - return Color(0xff, 0x96, 0x32); // Orange. -} - -Color RenderThemeChromiumWin::platformInactiveTextSearchHighlightColor() const -{ - return Color(0xff, 0xff, 0x96); // Yellow. -} - -// Map a CSSValue* system color to an index understood by GetSysColor(). -static int cssValueIdToSysColorIndex(int cssValueId) -{ - switch (cssValueId) { - case CSSValueActiveborder: return COLOR_ACTIVEBORDER; - case CSSValueActivecaption: return COLOR_ACTIVECAPTION; - case CSSValueAppworkspace: return COLOR_APPWORKSPACE; - case CSSValueBackground: return COLOR_BACKGROUND; - case CSSValueButtonface: return COLOR_BTNFACE; - case CSSValueButtonhighlight: return COLOR_BTNHIGHLIGHT; - case CSSValueButtonshadow: return COLOR_BTNSHADOW; - case CSSValueButtontext: return COLOR_BTNTEXT; - case CSSValueCaptiontext: return COLOR_CAPTIONTEXT; - case CSSValueGraytext: return COLOR_GRAYTEXT; - case CSSValueHighlight: return COLOR_HIGHLIGHT; - case CSSValueHighlighttext: return COLOR_HIGHLIGHTTEXT; - case CSSValueInactiveborder: return COLOR_INACTIVEBORDER; - case CSSValueInactivecaption: return COLOR_INACTIVECAPTION; - case CSSValueInactivecaptiontext: return COLOR_INACTIVECAPTIONTEXT; - case CSSValueInfobackground: return COLOR_INFOBK; - case CSSValueInfotext: return COLOR_INFOTEXT; - case CSSValueMenu: return COLOR_MENU; - case CSSValueMenutext: return COLOR_MENUTEXT; - case CSSValueScrollbar: return COLOR_SCROLLBAR; - case CSSValueThreeddarkshadow: return COLOR_3DDKSHADOW; - case CSSValueThreedface: return COLOR_3DFACE; - case CSSValueThreedhighlight: return COLOR_3DHIGHLIGHT; - case CSSValueThreedlightshadow: return COLOR_3DLIGHT; - case CSSValueThreedshadow: return COLOR_3DSHADOW; - case CSSValueWindow: return COLOR_WINDOW; - case CSSValueWindowframe: return COLOR_WINDOWFRAME; - case CSSValueWindowtext: return COLOR_WINDOWTEXT; - default: return -1; // Unsupported CSSValue - } -} - -Color RenderThemeChromiumWin::systemColor(CSSValueID cssValueId) const -{ - int sysColorIndex = cssValueIdToSysColorIndex(cssValueId); - if (isRunningLayoutTest() || (sysColorIndex == -1)) - return RenderTheme::systemColor(cssValueId); - - COLORREF color = GetSysColor(sysColorIndex); - return Color(GetRValue(color), GetGValue(color), GetBValue(color)); -} - -IntSize RenderThemeChromiumWin::sliderTickSize() const -{ - return IntSize(1, 3); -} - -int RenderThemeChromiumWin::sliderTickOffsetFromTrackCenter() const -{ - return 11; -} - -void RenderThemeChromiumWin::adjustSliderThumbSize(RenderStyle* style, Element* element) const -{ - // These sizes match what WinXP draws for various menus. - const int sliderThumbAlongAxis = 11; - const int sliderThumbAcrossAxis = 21; - if (style->appearance() == SliderThumbHorizontalPart) { - style->setWidth(Length(sliderThumbAlongAxis, Fixed)); - style->setHeight(Length(sliderThumbAcrossAxis, Fixed)); - } else if (style->appearance() == SliderThumbVerticalPart) { - style->setWidth(Length(sliderThumbAcrossAxis, Fixed)); - style->setHeight(Length(sliderThumbAlongAxis, Fixed)); - } else - RenderThemeChromiumSkia::adjustSliderThumbSize(style, element); -} - -bool RenderThemeChromiumWin::paintCheckbox(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - return paintButton(o, i, r); -} -bool RenderThemeChromiumWin::paintRadio(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - return paintButton(o, i, r); -} - -bool RenderThemeChromiumWin::paintButton(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - const ThemeData& themeData = getThemeData(o); - - ThemePainter painter(i.context, r); - blink::WebCanvas* canvas = painter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintButton(canvas, themeData.m_part, themeData.m_state, themeData.m_classicState, blink::WebRect(painter.drawRect())); - return false; -} - -bool RenderThemeChromiumWin::paintTextField(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - return paintTextFieldInternal(o, i, r, true); -} - -bool RenderThemeChromiumWin::paintSliderTrack(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - const ThemeData& themeData = getThemeData(o); - - ThemePainter painter(i.context, r); - blink::WebCanvas* canvas = painter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintTrackbar(canvas, themeData.m_part, themeData.m_state, themeData.m_classicState, blink::WebRect(painter.drawRect())); - - paintSliderTicks(o, i, r); - - return false; -} - -bool RenderThemeChromiumWin::paintSliderThumb(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - const ThemeData& themeData = getThemeData(o); - - ThemePainter painter(i.context, r); - blink::WebCanvas* canvas = painter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintTrackbar(canvas, themeData.m_part, themeData.m_state, themeData.m_classicState, blink::WebRect(painter.drawRect())); - - return false; -} - -static int menuListButtonWidth() -{ - static int width = isRunningLayoutTest() ? kStandardMenuListButtonWidth : - IntSize(blink::Platform::current()->themeEngine()->getSize(SBP_ARROWBTN)).width(); - return width; -} - -// Used to paint unstyled menulists (i.e. with the default border) -bool RenderThemeChromiumWin::paintMenuList(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - if (!o->isBox()) - return false; - - const RenderBox* box = toRenderBox(o); - int borderRight = box->borderRight(); - int borderLeft = box->borderLeft(); - int borderTop = box->borderTop(); - int borderBottom = box->borderBottom(); - - // If all the borders are 0, then tell skia not to paint the border on the - // textfield. FIXME: http://b/1210017 Figure out how to get Windows to not - // draw individual borders and then pass that to skia so we can avoid - // drawing any borders that are set to 0. For non-zero borders, we draw the - // border, but webkit just draws over it. - bool drawEdges = !(!borderRight && !borderLeft && !borderTop && !borderBottom); - - paintTextFieldInternal(o, i, r, drawEdges); - return paintMenuListButton(o, i, r); -} - -bool RenderThemeChromiumWin::paintMenuListButton(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - if (!o->isBox()) - return false; - - const RenderBox* box = toRenderBox(o); - // Take padding and border into account. If the MenuList is smaller than - // the size of a button, make sure to shrink it appropriately and not put - // its x position to the left of the menulist. - const int buttonWidth = menuListButtonWidth(); - int spacingLeft = box->borderLeft() + box->paddingLeft(); - int spacingRight = box->borderRight() + box->paddingRight(); - int spacingTop = box->borderTop() + box->paddingTop(); - int spacingBottom = box->borderBottom() + box->paddingBottom(); - - int buttonX; - if (r.maxX() - r.x() < buttonWidth) - buttonX = r.x(); - else - buttonX = o->style()->direction() == LTR ? r.maxX() - spacingRight - buttonWidth : r.x() + spacingLeft; - - // Compute the rectangle of the button in the destination image. - IntRect rect(buttonX, - r.y() + spacingTop, - std::min(buttonWidth, r.maxX() - r.x()), - r.height() - (spacingTop + spacingBottom)); - - // Get the correct theme data for a textfield and paint the menu. - ThemePainter painter(i.context, rect); - blink::WebCanvas* canvas = painter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintMenuList(canvas, CP_DROPDOWNBUTTON, determineState(o), determineClassicState(o), blink::WebRect(painter.drawRect())); - return false; -} - -double RenderThemeChromiumWin::caretBlinkIntervalInternal() const -{ - // This involves a system call, so we cache the result. - static double blinkInterval = querySystemBlinkInterval(RenderTheme::caretBlinkInterval()); - return blinkInterval; -} - -unsigned RenderThemeChromiumWin::determineState(RenderObject* o, ControlSubPart subPart) -{ - unsigned result = TS_NORMAL; - ControlPart appearance = o->style()->appearance(); - if (!isEnabled(o)) - result = TS_DISABLED; - else if (isReadOnlyControl(o)) - result = (appearance == TextFieldPart || appearance == TextAreaPart || appearance == SearchFieldPart) ? ETS_READONLY : TS_DISABLED; - // Active overrides hover and focused. - else if (isPressed(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartPressed(o)) - result = TS_PRESSED; - else if (supportsFocus(appearance) && isFocused(o)) - result = ETS_FOCUSED; - else if (isHovered(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartHovered(o)) - result = TS_HOT; - - // CBS_UNCHECKED*: 1-4 - // CBS_CHECKED*: 5-8 - // CBS_MIXED*: 9-12 - if (isIndeterminate(o)) - result += 8; - else if (isChecked(o)) - result += 4; - return result; -} - -unsigned RenderThemeChromiumWin::determineSliderThumbState(RenderObject* o) -{ - unsigned result = TUS_NORMAL; - if (!isEnabled(o)) - result = TUS_DISABLED; - else if (supportsFocus(o->style()->appearance()) && isFocused(o)) - result = TUS_FOCUSED; - else if (isPressed(o)) - result = TUS_PRESSED; - else if (isHovered(o)) - result = TUS_HOT; - return result; -} - -unsigned RenderThemeChromiumWin::determineClassicState(RenderObject* o, ControlSubPart subPart) -{ - unsigned result = 0; - - ControlPart part = o->style()->appearance(); - - // Sliders are always in the normal state. - if (part == SliderHorizontalPart || part == SliderVerticalPart) - return result; - - // So are readonly text fields. - if (isReadOnlyControl(o) && (part == TextFieldPart || part == TextAreaPart || part == SearchFieldPart)) - return result; - - if (part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart) { - if (!isEnabled(o)) - result = DFCS_INACTIVE; - else if (isPressed(o)) // Active supersedes hover - result = DFCS_PUSHED; - else if (isHovered(o)) - result = DFCS_HOT; - } else { - if (!isEnabled(o) || isReadOnlyControl(o)) - result = DFCS_INACTIVE; - // Active supersedes hover - else if (isPressed(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartPressed(o)) - result = DFCS_PUSHED; - else if (supportsFocus(part) && isFocused(o)) // So does focused - result = 0; - else if (isHovered(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartHovered(o)) - result = DFCS_HOT; - // Classic theme can't represent indeterminate states. Use unchecked appearance. - if (isChecked(o) && !isIndeterminate(o)) - result |= DFCS_CHECKED; - } - return result; -} - -ThemeData RenderThemeChromiumWin::getThemeData(RenderObject* o, ControlSubPart subPart) -{ - ThemeData result; - switch (o->style()->appearance()) { - case CheckboxPart: - result.m_part = BP_CHECKBOX; - result.m_state = determineState(o); - result.m_classicState = DFCS_BUTTONCHECK; - break; - case RadioPart: - result.m_part = BP_RADIOBUTTON; - result.m_state = determineState(o); - result.m_classicState = DFCS_BUTTONRADIO; - break; - case SquareButtonPart: - case PushButtonPart: - case ButtonPart: - result.m_part = BP_PUSHBUTTON; - result.m_state = determineState(o); - result.m_classicState = DFCS_BUTTONPUSH; - break; - case SliderHorizontalPart: - result.m_part = TKP_TRACK; - result.m_state = TRS_NORMAL; - break; - case SliderVerticalPart: - result.m_part = TKP_TRACKVERT; - result.m_state = TRVS_NORMAL; - break; - case SliderThumbHorizontalPart: - result.m_part = TKP_THUMBBOTTOM; - result.m_state = determineSliderThumbState(o); - break; - case SliderThumbVerticalPart: - result.m_part = TKP_THUMBVERT; - result.m_state = determineSliderThumbState(o); - break; - case ListboxPart: - case MenulistPart: - case MenulistButtonPart: - case SearchFieldPart: - case TextFieldPart: - case TextAreaPart: - result.m_part = EP_EDITTEXT; - result.m_state = determineState(o); - break; - case InnerSpinButtonPart: - result.m_part = subPart == SpinButtonUp ? SPNP_UP : SPNP_DOWN; - result.m_state = determineState(o, subPart); - result.m_classicState = subPart == SpinButtonUp ? DFCS_SCROLLUP : DFCS_SCROLLDOWN; - break; - } - - result.m_classicState |= determineClassicState(o, subPart); - - return result; -} - -bool RenderThemeChromiumWin::paintTextFieldInternal(RenderObject* o, - const PaintInfo& i, - const IntRect& r, - bool drawEdges) -{ - // Fallback to white if the specified color object is invalid. - Color backgroundColor(Color::white); - if (o->style()->visitedDependentColor(CSSPropertyBackgroundColor).isValid()) - backgroundColor = o->style()->visitedDependentColor(CSSPropertyBackgroundColor); - - // If we have background-image, don't fill the content area to expose the - // parent's background. Also, we shouldn't fill the content area if the - // alpha of the color is 0. The API of Windows GDI ignores the alpha. - // - // Note that we should paint the content area white if we have neither the - // background color nor background image explicitly specified to keep the - // appearance of select element consistent with other browsers. - bool fillContentArea = !o->style()->hasBackgroundImage() && backgroundColor.alpha(); - - if (o->style()->hasBorderRadius()) { - // If the style has rounded borders, setup the context to clip the - // background (themed or filled) appropriately. - // FIXME: make sure we do the right thing if css background-clip is set. - i.context->save(); - i.context->clipRoundedRect(o->style()->getRoundedBorderFor(r)); - } - { - const ThemeData& themeData = getThemeData(o); - ThemePainter painter(i.context, r); - blink::WebCanvas* canvas = painter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintTextField(canvas, themeData.m_part, themeData.m_state, themeData.m_classicState, blink::WebRect(painter.drawRect()), backgroundColor.rgb(), fillContentArea, drawEdges); - // End of block commits the painter before restoring context. - } - if (o->style()->hasBorderRadius()) - i.context->restore(); - return false; -} - -void RenderThemeChromiumWin::adjustInnerSpinButtonStyle(RenderStyle* style, Element*) const -{ - int width = ScrollbarTheme::theme()->scrollbarThickness(); - style->setWidth(Length(width, Fixed)); - style->setMinWidth(Length(width, Fixed)); -} - -bool RenderThemeChromiumWin::paintInnerSpinButton(RenderObject* object, const PaintInfo& info, const IntRect& rect) -{ - IntRect half = rect; - - // Need explicit blocks to avoid to create multiple ThemePainter instances. - { - half.setHeight(rect.height() / 2); - const ThemeData& upThemeData = getThemeData(object, SpinButtonUp); - ThemePainter upPainter(info.context, half); - blink::WebCanvas* canvas = upPainter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintSpinButton(canvas, upThemeData.m_part, upThemeData.m_state, upThemeData.m_classicState, blink::WebRect(upPainter.drawRect())); - } - - { - half.setY(rect.y() + rect.height() / 2); - const ThemeData& downThemeData = getThemeData(object, SpinButtonDown); - ThemePainter downPainter(info.context, half); - blink::WebCanvas* canvas = downPainter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintSpinButton(canvas, downThemeData.m_part, downThemeData.m_state, downThemeData.m_classicState, blink::WebRect(downPainter.drawRect())); - } - return false; -} - -// MSDN says that update intervals for the bar is 30ms. -// http://msdn.microsoft.com/en-us/library/bb760842(v=VS.85).aspx -static const double progressAnimationFrameRate = 0.033; - -double RenderThemeChromiumWin::animationRepeatIntervalForProgressBar(RenderProgress*) const -{ - return progressAnimationFrameRate; -} - -double RenderThemeChromiumWin::animationDurationForProgressBar(RenderProgress* renderProgress) const -{ - // On Chromium Windows port, animationProgress() and associated values aren't used. - // So here we can return arbitrary positive value. - return progressAnimationFrameRate; -} - -bool RenderThemeChromiumWin::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& r) -{ - if (!o->isProgress()) - return true; - - RenderProgress* renderProgress = toRenderProgress(o); - // For indeterminate bar, valueRect is ignored and it is computed by the theme engine - // because the animation is a platform detail and WebKit doesn't need to know how. - IntRect valueRect = renderProgress->isDeterminate() ? determinateProgressValueRectFor(renderProgress, r) : IntRect(0, 0, 0, 0); - double animatedSeconds = renderProgress->animationStartTime() ? WTF::currentTime() - renderProgress->animationStartTime() : 0; - ThemePainter painter(i.context, r); - DirectionFlippingScope scope(o, i, r); - blink::WebCanvas* canvas = painter.context()->canvas(); - blink::Platform::current()->themeEngine()->paintProgressBar(canvas, blink::WebRect(r), blink::WebRect(valueRect), renderProgress->isDeterminate(), animatedSeconds); - return false; -} - -bool RenderThemeChromiumWin::shouldOpenPickerWithF4Key() const -{ - return true; -} - -bool RenderThemeChromiumWin::shouldUseFallbackTheme(RenderStyle* style) const -{ - ControlPart part = style->appearance(); - if (part == CheckboxPart || part == RadioPart) - return style->effectiveZoom() != 1; - return false; -} - -} // namespace WebCore |