summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2012-07-19 16:38:37 -0700
committerChris Craik <ccraik@google.com>2012-07-19 17:00:59 -0700
commitf762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8 (patch)
tree604c0502e3adfe8ce1c38f9f062e05e825c17e54 /Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
parent3f669b52cf5578458bd55479634a565c581ca213 (diff)
downloadexternal_webkit-f762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8.zip
external_webkit-f762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8.tar.gz
external_webkit-f762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8.tar.bz2
SurfaceBackings are always zoomable once zoomable
Previously toggling hasText for the content of the SurfaceBacking was enough to cause it to change scale entirely each time the value was changed. Now the allowZoom flag is sticky to avoid unnecessary full-SurfaceBacking repaints. Additionally, changes from allowZoom true->false will not trigger delay. Change-Id: Ie6a13850f86d21f5a12a184c08b940aa2156ef07
Diffstat (limited to 'Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp')
-rw-r--r--Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp b/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
index d7f6535..5b11df6 100644
--- a/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
+++ b/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
@@ -40,13 +40,15 @@
namespace WebCore {
SurfaceBacking::SurfaceBacking(bool isBaseSurface)
+ : m_frontTileGrid(new TileGrid(isBaseSurface))
+ , m_backTileGrid(new TileGrid(isBaseSurface))
+ , m_lowResTileGrid(new TileGrid(isBaseSurface))
+ , m_scale(-1)
+ , m_futureScale(-1)
+ , m_zooming(false)
+ , m_hasAllowedZoom(false)
+
{
- m_frontTileGrid = new TileGrid(isBaseSurface);
- m_backTileGrid = new TileGrid(isBaseSurface);
- m_lowResTileGrid = new TileGrid(isBaseSurface);
- m_scale = -1;
- m_futureScale = -1;
- m_zooming = false;
#ifdef DEBUG_COUNT
ClassTracker::instance()->increment("SurfaceBacking");
#endif
@@ -67,9 +69,16 @@ void SurfaceBacking::prepareGL(GLWebViewState* state, bool allowZoom,
TilePainter* painter, bool aggressiveRendering,
bool updateWithBlit)
{
+ // If the surface backing has ever zoomed beyond 1.0 scale, it's always
+ // allowed to (so repaints aren't necessary when allowZoom toggles). If not,
+ // and allowZoom is false, don't allow scale greater than 1.0
+ m_hasAllowedZoom |= allowZoom;
float scale = state->scale();
- if (scale > 1 && !allowZoom)
+ bool scaleOverridden = false;
+ if (scale > 1 && !m_hasAllowedZoom) {
scale = 1;
+ scaleOverridden = true;
+ }
if (m_scale == -1) {
m_scale = scale;
@@ -78,7 +87,10 @@ void SurfaceBacking::prepareGL(GLWebViewState* state, bool allowZoom,
if (m_futureScale != scale) {
m_futureScale = scale;
- m_zoomUpdateTime = WTF::currentTime() + SurfaceBacking::s_zoomUpdateDelay;
+ if (scaleOverridden)
+ m_zoomUpdateTime = 0; // start rendering immediately
+ else
+ m_zoomUpdateTime = WTF::currentTime() + SurfaceBacking::s_zoomUpdateDelay;
m_zooming = true;
// release back TileGrid's TileTextures, so they can be reused immediately