summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2011-06-04 00:48:50 -0700
committerJohn Reck <jreck@google.com>2011-06-04 19:52:34 -0700
commitdfadaafc15c16563aba837f05c778eaa2a433a8b (patch)
tree9802c1cedfe29a2f744d2231af513bd340844e8b
parentc58299cfe8df6665721cf3a40601d1abca35229e (diff)
downloadexternal_webkit-dfadaafc15c16563aba837f05c778eaa2a433a8b.zip
external_webkit-dfadaafc15c16563aba837f05c778eaa2a433a8b.tar.gz
external_webkit-dfadaafc15c16563aba837f05c778eaa2a433a8b.tar.bz2
Fix issues with setting viewstate before initializing
Allow drawing without a CachedRoot (just skip drawing extras in that case) Initialize PictureSet correctly when using the SkPicture ctor If delay-setting a layer on glWebViewState, set isAfterFirstLayout to true to force the baseLayer update. Change-Id: I9b24fd2e8450acf0138433edce8700c9ec227e52
-rw-r--r--Source/WebKit/android/jni/PictureSet.cpp10
-rw-r--r--Source/WebKit/android/nav/WebView.cpp7
2 files changed, 11 insertions, 6 deletions
diff --git a/Source/WebKit/android/jni/PictureSet.cpp b/Source/WebKit/android/jni/PictureSet.cpp
index 181256c..98d7438 100644
--- a/Source/WebKit/android/jni/PictureSet.cpp
+++ b/Source/WebKit/android/jni/PictureSet.cpp
@@ -83,13 +83,19 @@ PictureSet::PictureSet()
PictureSet::PictureSet(SkPicture* picture)
{
- if (!picture)
+ mBaseArea = mAdditionalArea = 0;
+ if (!picture) {
+ mWidth = mHeight = 0;
return;
+ }
+ mWidth = picture->width();
+ mHeight = picture->height();
+ mBaseArea = mWidth * mHeight;
Pictures pictureAndBounds;
pictureAndBounds.mPicture = picture;
SkSafeRef(pictureAndBounds.mPicture);
pictureAndBounds.mEmpty = false;
- pictureAndBounds.mArea.setRect(0, 0, picture->width(), picture->height());
+ pictureAndBounds.mArea.setRect(0, 0, mWidth, mHeight);
pictureAndBounds.mSplit = false;
pictureAndBounds.mBase = true;
pictureAndBounds.mElapsed = 0;
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp
index 405b28e..8d3082b 100644
--- a/Source/WebKit/android/nav/WebView.cpp
+++ b/Source/WebKit/android/nav/WebView.cpp
@@ -383,6 +383,7 @@ void resetCursorRing()
bool drawCursorPreamble(CachedRoot* root)
{
+ if (!root) return false;
const CachedFrame* frame;
const CachedNode* node = root->currentCursor(&frame);
if (!node) {
@@ -444,7 +445,7 @@ bool drawGL(WebCore::IntRect& viewRect, WebCore::IntRect* invalRect, WebCore::In
SkIRect rect;
rect.set(0, 0, m_baseLayer->content()->width(), m_baseLayer->content()->height());
region.setRect(rect);
- m_glWebViewState->setBaseLayer(m_baseLayer, region, false, false);
+ m_glWebViewState->setBaseLayer(m_baseLayer, region, false, true);
}
}
@@ -453,7 +454,6 @@ bool drawGL(WebCore::IntRect& viewRect, WebCore::IntRect* invalRect, WebCore::In
DBG_NAV_LOG("!root");
if (extras == DrawExtrasCursorRing)
resetCursorRing();
- return false;
}
DrawExtra* extra = 0;
switch (extras) {
@@ -491,7 +491,7 @@ bool drawGL(WebCore::IntRect& viewRect, WebCore::IntRect* invalRect, WebCore::In
extra->draw(canvas, &mainPicture, &rect);
picture.endRecording();
}
- } else if (extras == DrawExtrasCursorRing && m_ring.m_isButton) {
+ } else if (root && extras == DrawExtrasCursorRing && m_ring.m_isButton) {
const CachedFrame* cachedFrame;
const CachedNode* cachedCursor = root->currentCursor(&cachedFrame);
if (cachedCursor) {
@@ -538,7 +538,6 @@ PictureSet* draw(SkCanvas* canvas, SkColor bgColor, int extras, bool split)
DBG_NAV_LOG("!root");
if (extras == DrawExtrasCursorRing)
resetCursorRing();
- return ret;
}
LayerAndroid mainPicture(m_navPictureUI);
DrawExtra* extra = 0;