Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1654)

Unified Diff: third_party/WebKit/WebCore/rendering/RenderThemeChromiumWin.cpp

Issue 21201: Transparency (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
« no previous file with comments | « third_party/WebKit/WebCore/platform/graphics/skia/ImageSkia.cpp ('k') | webkit/build/WebCore/WebCore.vcproj » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698