diff options
author | Nicolas Roard <nicolas@android.com> | 2010-05-11 10:24:06 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-05-11 10:24:06 -0700 |
commit | c1cdea2349a33a0ef36e5a10fe8298aa9ee05294 (patch) | |
tree | 8f1939b475aa8dc71a83aa9e7a0da6b02adf611b | |
parent | bf13d116b8b9dbefaf2a09542aaad63f85cc16d4 (diff) | |
parent | 75238a0c6749b428ac76d812d1ab08bedaec5ee3 (diff) | |
download | external_webkit-c1cdea2349a33a0ef36e5a10fe8298aa9ee05294.zip external_webkit-c1cdea2349a33a0ef36e5a10fe8298aa9ee05294.tar.gz external_webkit-c1cdea2349a33a0ef36e5a10fe8298aa9ee05294.tar.bz2 |
am 75238a0c: am 2943c136: Fix the \'wobbling fixed elements\' bug. Cherry-picked from master. This CL has a corresponding java counterpart (https://android-git.corp.google.com/g/#change,51150).
Merge commit '75238a0c6749b428ac76d812d1ab08bedaec5ee3' into kraken
* commit '75238a0c6749b428ac76d812d1ab08bedaec5ee3':
Fix the 'wobbling fixed elements' bug.
-rw-r--r-- | WebKit/android/nav/WebView.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp index bdcafbf..6c58852 100644 --- a/WebKit/android/nav/WebView.cpp +++ b/WebKit/android/nav/WebView.cpp @@ -103,7 +103,7 @@ enum DrawExtras { // keep this in sync with WebView.java struct JavaGlue { jweak m_obj; - jmethodID m_calcOurContentVisibleRect; + jmethodID m_calcOurContentVisibleRectF; jmethodID m_clearTextEntry; jmethodID m_overrideLoading; jmethodID m_scrollBy; @@ -123,6 +123,10 @@ struct JavaGlue { jfieldID m_rectTop; jmethodID m_rectWidth; jmethodID m_rectHeight; + jfieldID m_rectFLeft; + jfieldID m_rectFTop; + jmethodID m_rectFWidth; + jmethodID m_rectFHeight; AutoJObject object(JNIEnv* env) { return getRealObject(env, m_obj); } @@ -135,7 +139,7 @@ WebView(JNIEnv* env, jobject javaWebView, int viewImpl) : // m_javaGlue = new JavaGlue; m_javaGlue.m_obj = env->NewWeakGlobalRef(javaWebView); m_javaGlue.m_scrollBy = GetJMethod(env, clazz, "setContentScrollBy", "(IIZ)Z"); - m_javaGlue.m_calcOurContentVisibleRect = GetJMethod(env, clazz, "calcOurContentVisibleRect", "(Landroid/graphics/Rect;)V"); + m_javaGlue.m_calcOurContentVisibleRectF = GetJMethod(env, clazz, "calcOurContentVisibleRectF", "(Landroid/graphics/RectF;)V"); m_javaGlue.m_clearTextEntry = GetJMethod(env, clazz, "clearTextEntry", "(Z)V"); m_javaGlue.m_overrideLoading = GetJMethod(env, clazz, "overrideLoading", "(Ljava/lang/String;)V"); m_javaGlue.m_sendMoveFocus = GetJMethod(env, clazz, "sendMoveFocus", "(II)V"); @@ -157,6 +161,12 @@ WebView(JNIEnv* env, jobject javaWebView, int viewImpl) : m_javaGlue.m_rectTop = env->GetFieldID(rectClass, "top", "I"); m_javaGlue.m_rectWidth = GetJMethod(env, rectClass, "width", "()I"); m_javaGlue.m_rectHeight = GetJMethod(env, rectClass, "height", "()I"); + jclass rectClassF = env->FindClass("android/graphics/RectF"); + LOG_ASSERT(rectClassF, "Could not find RectF class"); + m_javaGlue.m_rectFLeft = env->GetFieldID(rectClassF, "left", "F"); + m_javaGlue.m_rectFTop = env->GetFieldID(rectClassF, "top", "F"); + m_javaGlue.m_rectFWidth = GetJMethod(env, rectClassF, "width", "()F"); + m_javaGlue.m_rectFHeight = GetJMethod(env, rectClassF, "height", "()F"); env->SetIntField(javaWebView, gWebViewField, (jint)this); m_viewImpl = (WebViewCore*) viewImpl; m_frameCacheUI = 0; @@ -325,15 +335,15 @@ void scrollRectOnScreen(const IntRect& rect) void calcOurContentVisibleRect(SkRect* r) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - jclass rectClass = env->FindClass("android/graphics/Rect"); - jmethodID init = env->GetMethodID(rectClass, "<init>", "(IIII)V"); + jclass rectClass = env->FindClass("android/graphics/RectF"); + jmethodID init = env->GetMethodID(rectClass, "<init>", "(FFFF)V"); jobject jRect = env->NewObject(rectClass, init, 0, 0, 0, 0); env->CallVoidMethod(m_javaGlue.object(env).get(), - m_javaGlue.m_calcOurContentVisibleRect, jRect); - r->fLeft = env->GetIntField(jRect, m_javaGlue.m_rectLeft); - r->fTop = env->GetIntField(jRect, m_javaGlue.m_rectTop); - r->fRight = r->fLeft + env->CallIntMethod(jRect, m_javaGlue.m_rectWidth); - r->fBottom = r->fTop + env->CallIntMethod(jRect, m_javaGlue.m_rectHeight); + m_javaGlue.m_calcOurContentVisibleRectF, jRect); + r->fLeft = env->GetFloatField(jRect, m_javaGlue.m_rectFLeft); + r->fTop = env->GetFloatField(jRect, m_javaGlue.m_rectFTop); + r->fRight = r->fLeft + env->CallFloatMethod(jRect, m_javaGlue.m_rectFWidth); + r->fBottom = r->fTop + env->CallFloatMethod(jRect, m_javaGlue.m_rectFHeight); env->DeleteLocalRef(jRect); checkException(env); } |