| Index: third_party/WebKit/WebCore/rendering/RenderThemeChromiumWin.cpp
|
| ===================================================================
|
| --- third_party/WebKit/WebCore/rendering/RenderThemeChromiumWin.cpp (revision 10194)
|
| +++ third_party/WebKit/WebCore/rendering/RenderThemeChromiumWin.cpp (working copy)
|
| @@ -38,7 +38,7 @@
|
| #include "RenderBox.h"
|
| #include "ScrollbarTheme.h"
|
| #include "SkiaUtils.h"
|
| -#include "ThemeHelperChromiumWin.h"
|
| +#include "TransparencyWin.h"
|
| #include "UserAgentStyleSheets.h"
|
| #include "WindowsVersion.h"
|
|
|
| @@ -53,6 +53,43 @@
|
|
|
| namespace WebCore {
|
|
|
| +namespace {
|
| +
|
| +bool canvasHasMultipleLayers(const SkCanvas* canvas)
|
| +{
|
| + SkCanvas::LayerIter iter(const_cast<SkCanvas*>(canvas), false);
|
| + iter.next(); // There is always at least one layer.
|
| + return !iter.done(); // There is > 1 layer if the the iterator can stil advance.
|
| +}
|
| +
|
| +class ThemePainter : public TransparencyWin {
|
| +public:
|
| + ThemePainter(GraphicsContext* context, const IntRect& r) {
|
| + // Compute the transform mode.
|
| + TransformMode transformMode;
|
| + const TransformationMatrix& matrix = context->getCTM();
|
| + if (matrix.b() != 0 || matrix.c() != 0) // Skew.
|
| + transformMode = Untransform;
|
| + else if (matrix.a() != 1.0 || matrix.d() != 1.0) // Scale.
|
| + transformMode = ScaleTransform;
|
| + else // Nothing interesting.
|
| + transformMode = KeepTransform;
|
| +
|
| + // Compute the layer mode.
|
| + LayerMode layerMode;
|
| + if (context->platformContext()->isDrawingToImageBuffer()) // Might have transparent background.
|
| + layerMode = WhiteLayer;
|
| + else if (canvasHasMultipleLayers(context->platformContext()->canvas())) // Needs antialiasing help.
|
| + layerMode = OpaqueCompositeLayer;
|
| + else // Nothing interesting.
|
| + layerMode = transformMode == KeepTransform ? NoLayer : OpaqueCompositeLayer;
|
| +
|
| + init(context, layerMode, transformMode, r);
|
| + }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| static void getNonClientMetrics(NONCLIENTMETRICS* metrics) {
|
| static UINT size = WebCore::isVistaOrNewer() ?
|
| sizeof(NONCLIENTMETRICS) : NONCLIENTMETRICS_SIZE_PRE_VISTA;
|
| @@ -373,12 +410,12 @@
|
| {
|
| const ThemeData& themeData = getThemeData(o);
|
|
|
| - WebCore::ThemeHelperWin helper(i.context, r);
|
| - ChromiumBridge::paintButton(helper.context(),
|
| + WebCore::ThemePainter painter(i.context, r);
|
| + ChromiumBridge::paintButton(painter.context(),
|
| themeData.m_part,
|
| themeData.m_state,
|
| themeData.m_classicState,
|
| - helper.rect());
|
| + painter.drawRect());
|
| return false;
|
| }
|
|
|
| @@ -441,12 +478,12 @@
|
| r.height() - (spacingTop + spacingBottom));
|
|
|
| // Get the correct theme data for a textfield and paint the menu.
|
| - WebCore::ThemeHelperWin helper(i.context, rect);
|
| - ChromiumBridge::paintMenuList(helper.context(),
|
| + WebCore::ThemePainter painter(i.context, rect);
|
| + ChromiumBridge::paintMenuList(painter.context(),
|
| CP_DROPDOWNBUTTON,
|
| determineState(o),
|
| determineClassicState(o),
|
| - helper.rect());
|
| + painter.drawRect());
|
| return false;
|
| }
|
|
|
| @@ -563,9 +600,9 @@
|
| }
|
|
|
| bool RenderThemeChromiumWin::paintTextFieldInternal(RenderObject* o,
|
| - const RenderObject::PaintInfo& i,
|
| - const IntRect& r,
|
| - bool drawEdges)
|
| + const RenderObject::PaintInfo& i,
|
| + const IntRect& r,
|
| + bool drawEdges)
|
| {
|
| // Nasty hack to make us not paint the border on text fields with a
|
| // border-radius. Webkit paints elements with border-radius for us.
|
| @@ -577,12 +614,12 @@
|
|
|
| const ThemeData& themeData = getThemeData(o);
|
|
|
| - WebCore::ThemeHelperWin helper(i.context, r);
|
| - ChromiumBridge::paintTextField(helper.context(),
|
| + WebCore::ThemePainter painter(i.context, r);
|
| + ChromiumBridge::paintTextField(painter.context(),
|
| themeData.m_part,
|
| themeData.m_state,
|
| themeData.m_classicState,
|
| - helper.rect(),
|
| + painter.drawRect(),
|
| o->style()->backgroundColor(),
|
| true,
|
| drawEdges);
|
|
|