summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/nav/WebView.cpp
diff options
context:
space:
mode:
authorVictoria Lease <violets@google.com>2011-12-27 15:38:05 -0800
committerVictoria Lease <violets@google.com>2012-01-09 15:11:12 -0800
commit7c564d38504faf606e8965c2bd77653745dc45b9 (patch)
tree0275201ec71b25bc3f15a31139efca54e34748b1 /Source/WebKit/android/nav/WebView.cpp
parent5568a9850c798bc4d30002485666c70c055e3457 (diff)
downloadexternal_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.cpp25
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);