summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Roard <nicolas@android.com>2010-05-11 10:24:06 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-05-11 10:24:06 -0700
commitc1cdea2349a33a0ef36e5a10fe8298aa9ee05294 (patch)
tree8f1939b475aa8dc71a83aa9e7a0da6b02adf611b
parentbf13d116b8b9dbefaf2a09542aaad63f85cc16d4 (diff)
parent75238a0c6749b428ac76d812d1ab08bedaec5ee3 (diff)
downloadexternal_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.cpp28
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);
}