summaryrefslogtreecommitdiffstats
path: root/WebKit/android/nav
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/android/nav')
-rw-r--r--WebKit/android/nav/WebView.cpp76
1 files changed, 72 insertions, 4 deletions
diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp
index 841434f..4093fa5 100644
--- a/WebKit/android/nav/WebView.cpp
+++ b/WebKit/android/nav/WebView.cpp
@@ -53,6 +53,7 @@
#ifdef ANDROID_INSTRUMENT
#include "TimeCounter.h"
#endif
+#include "TilesManager.h"
#include "WebCoreJni.h"
#include "WebRequestContext.h"
#include "WebViewCore.h"
@@ -384,6 +385,56 @@ void drawCursorPostamble()
}
}
+bool drawGL(WebCore::IntRect& viewRect, float scale, int extras)
+{
+#if USE(ACCELERATED_COMPOSITING)
+ if (!m_baseLayer)
+ return false;
+
+ m_glWebViewState.resetExtra(false);
+ CachedRoot* root = getFrameCache(AllowNewer);
+ if (!root) {
+ DBG_NAV_LOG("!root");
+ if (extras == DrawExtrasCursorRing)
+ resetCursorRing();
+ return false;
+ }
+ DrawExtra* extra = 0;
+ switch (extras) {
+ case DrawExtrasFind:
+ extra = &m_findOnPage;
+ break;
+ case DrawExtrasSelection:
+ extra = &m_selectText;
+ break;
+ case DrawExtrasCursorRing:
+ if (drawCursorPreamble(root) && m_ring.setup()) {
+ if (!m_ring.m_isButton)
+ extra = &m_ring;
+ drawCursorPostamble();
+ }
+ break;
+ default:
+ ;
+ }
+
+ unsigned int pic = m_glWebViewState.currentPictureCounter();
+ if (extra) {
+ LayerAndroid* mainPicture = new LayerAndroid(m_navPictureUI);
+ m_glWebViewState.setExtra(extra, mainPicture);
+ } else {
+ m_glWebViewState.resetExtra(true);
+ }
+
+ SkRect visibleRect;
+ calcOurContentVisibleRect(&visibleRect);
+ bool ret = m_baseLayer->drawGL(viewRect, visibleRect, scale);
+ if (ret || m_glWebViewState.currentPictureCounter() != pic)
+ return true;
+#endif
+ return false;
+}
+
PictureSet* draw(SkCanvas* canvas, SkColor bgColor, int extras, bool split)
{
PictureSet* ret = 0;
@@ -1207,8 +1258,12 @@ static void copyScrollPositionRecursive(const LayerAndroid* from,
}
}
-void setBaseLayer(BaseLayerAndroid* layer)
+void setBaseLayer(BaseLayerAndroid* layer, WebCore::IntRect& rect)
{
+#if USE(ACCELERATED_COMPOSITING)
+ m_glWebViewState.setBaseLayer(layer, rect);
+#endif
+
if (layer) {
copyScrollPositionRecursive(compositeRoot(),
static_cast<LayerAndroid*>(layer->getChild(0)));
@@ -1261,6 +1316,9 @@ private: // local state for WebView
FindOnPage m_findOnPage;
CursorRing m_ring;
BaseLayerAndroid* m_baseLayer;
+#if USE(ACCELERATED_COMPOSITING)
+ GLWebViewState m_glWebViewState;
+#endif
}; // end of WebView class
/*
@@ -1497,6 +1555,13 @@ static jint nativeDraw(JNIEnv *env, jobject obj, jobject canv, jint color,
return reinterpret_cast<jint>(GET_NATIVE_VIEW(env, obj)->draw(canvas, color, extras, split));
}
+static bool nativeDrawGL(JNIEnv *env, jobject obj, jobject jrect,
+ jfloat scale, jint extras)
+{
+ WebCore::IntRect viewRect = jrect_to_webrect(env, jrect);
+ return GET_NATIVE_VIEW(env, obj)->drawGL(viewRect, scale, extras);
+}
+
static bool nativeEvaluateLayersAnimations(JNIEnv *env, jobject obj)
{
#if USE(ACCELERATED_COMPOSITING)
@@ -1507,10 +1572,11 @@ static bool nativeEvaluateLayersAnimations(JNIEnv *env, jobject obj)
return false;
}
-static void nativeSetBaseLayer(JNIEnv *env, jobject obj, jint layer)
+static void nativeSetBaseLayer(JNIEnv *env, jobject obj, jint layer, jobject jrect)
{
BaseLayerAndroid* layerImpl = reinterpret_cast<BaseLayerAndroid*>(layer);
- GET_NATIVE_VIEW(env, obj)->setBaseLayer(layerImpl);
+ WebCore::IntRect rect = jrect_to_webrect(env, jrect);
+ GET_NATIVE_VIEW(env, obj)->setBaseLayer(layerImpl, rect);
}
static void nativeReplaceBaseContent(JNIEnv *env, jobject obj, jint content)
@@ -2165,6 +2231,8 @@ static JNINativeMethod gJavaWebViewMethods[] = {
(void*) nativeDestroy },
{ "nativeDraw", "(Landroid/graphics/Canvas;IIZ)I",
(void*) nativeDraw },
+ { "nativeDrawGL", "(Landroid/graphics/Rect;FI)Z",
+ (void*) nativeDrawGL },
{ "nativeDumpDisplayTree", "(Ljava/lang/String;)V",
(void*) nativeDumpDisplayTree },
{ "nativeEvaluateLayersAnimations", "()Z",
@@ -2257,7 +2325,7 @@ static JNINativeMethod gJavaWebViewMethods[] = {
(void*) nativeSetFindIsUp },
{ "nativeSetHeightCanMeasure", "(Z)V",
(void*) nativeSetHeightCanMeasure },
- { "nativeSetBaseLayer", "(I)V",
+ { "nativeSetBaseLayer", "(ILandroid/graphics/Rect;)V",
(void*) nativeSetBaseLayer },
{ "nativeReplaceBaseContent", "(I)V",
(void*) nativeReplaceBaseContent },