diff options
author | John Reck <jreck@google.com> | 2011-06-04 00:48:50 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2011-06-04 19:52:34 -0700 |
commit | dfadaafc15c16563aba837f05c778eaa2a433a8b (patch) | |
tree | 9802c1cedfe29a2f744d2231af513bd340844e8b | |
parent | c58299cfe8df6665721cf3a40601d1abca35229e (diff) | |
download | external_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.cpp | 10 | ||||
-rw-r--r-- | Source/WebKit/android/nav/WebView.cpp | 7 |
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; |