diff options
author | Victoria Lease <violets@google.com> | 2011-12-27 15:38:05 -0800 |
---|---|---|
committer | Victoria Lease <violets@google.com> | 2012-01-09 15:11:12 -0800 |
commit | 7c564d38504faf606e8965c2bd77653745dc45b9 (patch) | |
tree | 0275201ec71b25bc3f15a31139efca54e34748b1 /Source/WebKit/android/nav/WebView.cpp | |
parent | 5568a9850c798bc4d30002485666c70c055e3457 (diff) | |
download | external_webkit-7c564d38504faf606e8965c2bd77653745dc45b9.zip external_webkit-7c564d38504faf606e8965c2bd77653745dc45b9.tar.gz external_webkit-7c564d38504faf606e8965c2bd77653745dc45b9.tar.bz2 |
Draw GLExtras for each layer.
Bug: 5747765
Moved the GLExtras::drawGL() call out of GLWebViewState into
LayerAndroid and BaseLayerAndroid. This allows us to apply per-layer
transforms, ensuring that find-on-page highlights are positioned
correctly on their layers.
Change-Id: I65b950875eb736601f8afec1770e5cc0201c0450
Diffstat (limited to 'Source/WebKit/android/nav/WebView.cpp')
-rw-r--r-- | Source/WebKit/android/nav/WebView.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp index 70b7e6e..71cad9a 100644 --- a/Source/WebKit/android/nav/WebView.cpp +++ b/Source/WebKit/android/nav/WebView.cpp @@ -308,8 +308,12 @@ void scrollToCurrentMatch() SkRect matchBounds = m_findOnPage.currentMatchBounds(); LayerAndroid* rootLayer = getFrameCache(DontAllowNewer)->rootLayer(); + if (!rootLayer) + return; + Layer* layerContainingMatch = rootLayer->findById(m_findOnPage.currentMatchLayerId()); - ASSERT(layerContainingMatch); + if (!layerContainingMatch) + return; // If the match is in a fixed position layer, there's nothing to do. if (layerContainingMatch->shouldInheritFromRootTransform()) @@ -1514,6 +1518,10 @@ void setVisibleRect(SkRect& visibleRect) { m_visibleRect = visibleRect; } +FindOnPage& findOnPage() { + return m_findOnPage; +} + bool m_isDrawingPaused; private: // local state for WebView // private to getFrameCache(); other functions operate in a different thread @@ -2319,7 +2327,20 @@ static int nativeFindAll(JNIEnv *env, jobject obj, jstring findLower, SkBitmap bitmap; bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); canvas.setBitmapDevice(bitmap); - root->draw(canvas); + FindOnPage& findOnPage = view->findOnPage(); + BaseLayerAndroid* baseLayer = view->getBaseLayer(); + if (baseLayer) { + canvas.setLayerId(-1); + unsigned matchesBegin = canvas.found(); + baseLayer->drawCanvas(&canvas); + findOnPage.setLayerMatchRange(-1, + std::pair<unsigned, unsigned>(matchesBegin, canvas.found())); + } +#if USE(ACCELERATED_COMPOSITING) + LayerAndroid* compositeLayer = view->compositeRoot(); + if (compositeLayer) + canvas.drawLayers(compositeLayer, findOnPage); +#endif WTF::Vector<MatchInfo>* matches = canvas.detachMatches(); // With setMatches, the WebView takes ownership of matches view->setMatches(matches, sameAsLastSearch); |