From d7fd74bf26582bbf3ba7a80420ea5ebe170be473 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Mon, 21 May 2012 15:49:31 -0700 Subject: Disable transform fudging for merged surfaces Draw transforms are used at painting time for merged surfaces, so they shouldn't be manipulated in the draw path. The fudging isn't necessary for these surfaces in the first place, as merged surfaces are always aligned to pixel coordinates. bug:6156523 Change-Id: I3d954869188008f1a9e35915df893d75b49be6a2 --- Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp | 5 ++++- Source/WebCore/platform/graphics/android/rendering/Surface.h | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'Source/WebCore') diff --git a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp index 6e88081..182e811 100644 --- a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp @@ -411,9 +411,12 @@ void LayerAndroid::updateGLPositionsAndScale(const TransformationMatrix& parentM -anchorPointZ()); setDrawTransform(localMatrix); - if (m_drawTransform.isIdentityOrTranslation()) { + if (m_drawTransform.isIdentityOrTranslation() + && surface() && surface()->allowTransformFudging()) { // adjust the translation coordinates of the draw transform matrix so // that layers (defined in content coordinates) will align to display/view pixels + + // the surface may not allow fudging if it uses the draw transform at paint time float desiredContentX = round(m_drawTransform.m41() * scale) / scale; float desiredContentY = round(m_drawTransform.m42() * scale) / scale; ALOGV("fudging translation from %f, %f to %f, %f", diff --git a/Source/WebCore/platform/graphics/android/rendering/Surface.h b/Source/WebCore/platform/graphics/android/rendering/Surface.h index 0286259..535d2c1 100644 --- a/Source/WebCore/platform/graphics/android/rendering/Surface.h +++ b/Source/WebCore/platform/graphics/android/rendering/Surface.h @@ -64,6 +64,10 @@ public: bool hasText() { return m_hasText; } bool isBase(); + // don't allow transform fudging for merged layers - they need the transform + // static at paint time, and are always aligned to 0,0 doc coordinates. + bool allowTransformFudging() const { return singleLayer(); } + // TilePainter methods virtual bool paint(SkCanvas* canvas); virtual float opacity(); -- cgit v1.1