diff options
Diffstat (limited to 'Source/WebKit/android/nav/WebView.cpp')
-rw-r--r-- | Source/WebKit/android/nav/WebView.cpp | 92 |
1 files changed, 62 insertions, 30 deletions
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp index 64ab9d9..78881a9 100644 --- a/Source/WebKit/android/nav/WebView.cpp +++ b/Source/WebKit/android/nav/WebView.cpp @@ -191,7 +191,6 @@ WebView(JNIEnv* env, jobject javaWebView, int viewImpl, WTF::String drawableDir, env->SetIntField(javaWebView, gWebViewField, (jint)this); m_viewImpl = (WebViewCore*) viewImpl; m_frameCacheUI = 0; - m_navPictureUI = 0; m_generation = 0; m_heightCanMeasure = false; m_lastDx = 0; @@ -200,7 +199,6 @@ WebView(JNIEnv* env, jobject javaWebView, int viewImpl, WTF::String drawableDir, m_baseLayer = 0; m_glDrawFunctor = 0; m_isDrawingPaused = false; - m_buttonSkin = drawableDir.isEmpty() ? 0 : new RenderSkinButton(drawableDir); #if USE(ACCELERATED_COMPOSITING) m_glWebViewState = 0; m_pageSwapCallbackRegistered = false; @@ -222,10 +220,8 @@ WebView(JNIEnv* env, jobject javaWebView, int viewImpl, WTF::String drawableDir, stopGL(); #endif delete m_frameCacheUI; - delete m_navPictureUI; SkSafeUnref(m_baseLayer); delete m_glDrawFunctor; - delete m_buttonSkin; } void stopGL() @@ -307,7 +303,7 @@ void scrollToCurrentMatch() } SkRect matchBounds = m_findOnPage.currentMatchBounds(); - LayerAndroid* rootLayer = getFrameCache(DontAllowNewer)->rootLayer(); + LayerAndroid* rootLayer = compositeRoot(); if (!rootLayer) return; @@ -549,7 +545,6 @@ PictureSet* draw(SkCanvas* canvas, SkColor bgColor, int extras, bool split) if (extras == DrawExtrasCursorRing) resetCursorRing(); } - LayerAndroid mainPicture(m_navPictureUI); DrawExtra* extra = 0; switch (extras) { case DrawExtrasFind: @@ -585,11 +580,11 @@ PictureSet* draw(SkCanvas* canvas, SkColor bgColor, int extras, bool split) canvas->resetMatrix(); m_baseLayer->draw(canvas); } -#endif if (extra) { IntRect dummy; // inval area, unused for now - extra->draw(canvas, &mainPicture, &dummy); + extra->draw(canvas, compositeLayer, &dummy); } +#endif return ret; } @@ -707,12 +702,9 @@ CachedRoot* getFrameCache(FrameCachePermission allowNewer) } m_viewImpl->gFrameCacheMutex.lock(); delete m_frameCacheUI; - SkSafeUnref(m_navPictureUI); m_viewImpl->m_updatedFrameCache = false; m_frameCacheUI = m_viewImpl->m_frameCacheKit; - m_navPictureUI = m_viewImpl->m_navPictureKit; m_viewImpl->m_frameCacheKit = 0; - m_viewImpl->m_navPictureKit = 0; m_viewImpl->gFrameCacheMutex.unlock(); if (m_frameCacheUI) m_frameCacheUI->setRootLayer(compositeRoot()); @@ -1528,7 +1520,6 @@ private: // local state for WebView CachedRoot* m_frameCacheUI; // navigation data ready for use WebViewCore* m_viewImpl; int m_generation; // associate unique ID with sent kit focus to match with ui - SkPicture* m_navPictureUI; SkMSec m_ringAnimationEnd; // Corresponds to the same-named boolean on the java side. bool m_heightCanMeasure; @@ -1543,7 +1534,6 @@ private: // local state for WebView GLWebViewState* m_glWebViewState; bool m_pageSwapCallbackRegistered; #endif - RenderSkinButton* m_buttonSkin; SkRect m_visibleRect; bool m_isHighEndGfx; }; // end of WebView class @@ -1990,6 +1980,25 @@ static jint nativeFocusCandidateFramePointer(JNIEnv *env, jobject obj) return reinterpret_cast<int>(frame ? frame->framePointer() : 0); } +static bool nativeFocusCandidateIsEditableText(JNIEnv* env, jobject obj, + jint nativeClass) +{ + WebView* view = reinterpret_cast<WebView*>(nativeClass); + CachedRoot* root = view->getFrameCache(WebView::DontAllowNewer); + bool isEditable = false; + if (root) { + const CachedFrame* frame = NULL; + const CachedNode* cursor = root->currentCursor(&frame); + const CachedNode* focus = cursor; + if (!cursor || !cursor->wantsKeyEvents()) + focus = root->currentFocus(&frame); + if (focus) { + isEditable = (focus->isTextInput() || focus->isContentEditable()); + } + } + return isEditable; +} + static bool nativeFocusCandidateIsPassword(JNIEnv *env, jobject obj) { const CachedInput* input = getInputCandidate(env, obj); @@ -2302,8 +2311,9 @@ static int nativeFindAll(JNIEnv *env, jobject obj, jstring findLower, } WebView* view = GET_NATIVE_VIEW(env, obj); ALOG_ASSERT(view, "view not set in nativeFindAll"); - CachedRoot* root = view->getFrameCache(WebView::AllowNewer); - if (!root) { + BaseLayerAndroid* baseLayer = view->getBaseLayer(); + android::PictureSet* pictureSet = baseLayer ? baseLayer->content() : 0; + if (!pictureSet) { env->ReleaseStringChars(findLower, findLowerChars); env->ReleaseStringChars(findUpper, findUpperChars); checkException(env); @@ -2318,8 +2328,8 @@ static int nativeFindAll(JNIEnv *env, jobject obj, jstring findLower, checkException(env); return 0; } - int width = root->documentWidth(); - int height = root->documentHeight(); + int width = pictureSet->width(); + int height = pictureSet->height(); // Create a FindCanvas, which allows us to fake draw into it so we can // figure out where our search string is rendered (and how many times). FindCanvas canvas(width, height, (const UChar*) findLowerChars, @@ -2328,14 +2338,11 @@ static int nativeFindAll(JNIEnv *env, jobject obj, jstring findLower, bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); canvas.setBitmapDevice(bitmap); 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())); - } + 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) @@ -2590,10 +2597,8 @@ static bool nativeSetProperty(JNIEnv *env, jobject obj, jstring jkey, jstring jv WTF::String key = jstringToWtfString(env, jkey); WTF::String value = jstringToWtfString(env, jvalue); if (key == "inverted") { - if (value == "true") - TilesManager::instance()->setInvertedScreen(true); - else - TilesManager::instance()->setInvertedScreen(false); + bool shouldInvert = (value == "true"); + TilesManager::instance()->setInvertedScreen(shouldInvert); return true; } else if (key == "inverted_contrast") { @@ -2610,11 +2615,25 @@ static bool nativeSetProperty(JNIEnv *env, jobject obj, jstring jkey, jstring jv TilesManager::instance()->setUseMinimalMemory(value == "true"); return true; } + else if (key == "use_double_buffering") { + TilesManager::instance()->setUseDoubleBuffering(value == "true"); + return true; + } + else if (key == "tree_updates") { + TilesManager::instance()->clearTreeUpdates(); + return true; + } return false; } -static jstring nativeGetProperty(JNIEnv *env, jobject obj, jstring key) +static jstring nativeGetProperty(JNIEnv *env, jobject obj, jstring jkey) { + WTF::String key = jstringToWtfString(env, jkey); + if (key == "tree_updates") { + int updates = TilesManager::instance()->getTreeUpdates(); + WTF::String wtfUpdates = WTF::String::number(updates); + return wtfStringToJstring(env, wtfUpdates); + } return 0; } @@ -2730,6 +2749,15 @@ static void nativeSetPauseDrawing(JNIEnv *env, jobject obj, jint nativeView, ((WebView*)nativeView)->m_isDrawingPaused = pause; } +static bool nativeDisableNavcache(JNIEnv *env, jobject obj) +{ +#if ENABLE(ANDROID_NAVCACHE) + return false; +#else + return true; +#endif +} + /* * JNI registration */ @@ -2946,6 +2974,10 @@ static JNINativeMethod gJavaWebViewMethods[] = { (void*) nativeOnTrimMemory }, { "nativeSetPauseDrawing", "(IZ)V", (void*) nativeSetPauseDrawing }, + { "nativeDisableNavcache", "()Z", + (void*) nativeDisableNavcache }, + { "nativeFocusCandidateIsEditableText", "(I)Z", + (void*) nativeFocusCandidateIsEditableText }, }; int registerWebView(JNIEnv* env) |