summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authorleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-19 02:25:06 +0000
committerleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-19 02:25:06 +0000
commitfe67f5b4728a427b07702a043523acdd71eaf562 (patch)
tree68e5830bccf505895fde86903ed168130f206f22 /android_webview
parent48bd56a2e1d715c94570c1c44ae1fd1e8778c837 (diff)
downloadchromium_src-fe67f5b4728a427b07702a043523acdd71eaf562.zip
chromium_src-fe67f5b4728a427b07702a043523acdd71eaf562.tar.gz
chromium_src-fe67f5b4728a427b07702a043523acdd71eaf562.tar.bz2
Apply scroll correction to HW draw path.
NOTRY=true BUG=161409 Review URL: https://codereview.chromium.org/11635010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173838 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java5
-rw-r--r--android_webview/native/aw_contents.cc17
-rw-r--r--android_webview/native/aw_contents.h3
-rw-r--r--android_webview/native/aw_http_auth_handler.cc1
4 files changed, 20 insertions, 6 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index bac6358..2e83ca6 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -341,8 +341,8 @@ public class AwContents {
}
public boolean onPrepareDrawGL(Canvas canvas) {
- // TODO(joth): Ensure the HW path is setup and read any required params out of canvas.
- Log.e(TAG, "Not implemented: AwContents.onPrepareDrawGL()");
+ nativeSetScrollForHWFrame(mNativeAwContents,
+ mContainerView.getScrollX(), mContainerView.getScrollY());
// returning false will cause a fallback to SW path.
return true;
@@ -938,6 +938,7 @@ public class AwContents {
private native void nativeSetInterceptNavigationDelegate(int nativeAwContents,
InterceptNavigationDelegate navigationInterceptionDelegate);
+ private native void nativeSetScrollForHWFrame(int nativeAwContents, int scrollX, int scrollY);
private native int nativeFindAllSync(int nativeAwContents, String searchString);
private native void nativeFindAllAsync(int nativeAwContents, String searchString);
private native void nativeFindNext(int nativeAwContents, boolean forward);
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 13a74b9..c3abd81 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -142,6 +142,7 @@ AwContents::AwContents(JNIEnv* env,
view_visible_(false),
compositor_visible_(false),
is_composite_pending_(false),
+ last_scroll_x_(0), last_scroll_y_(0),
last_frame_context_(NULL) {
android_webview::AwBrowserDependencyFactory* dependency_factory =
android_webview::AwBrowserDependencyFactory::GetInstance();
@@ -292,6 +293,7 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) {
last_frame_context_ = current_context;
}
+ gfx::Transform transform;
compositor_->SetWindowBounds(gfx::Size(draw_info->width, draw_info->height));
if (draw_info->is_layer) {
@@ -304,7 +306,6 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) {
scissor_clip_layer_->setPosition(gfx::PointF());
scissor_clip_layer_->setBounds(gfx::Size());
scissor_clip_layer_->setSublayerTransform(gfx::Transform());
- transform_layer_->setTransform(gfx::Transform());
} else {
compositor_->SetHasTransparentBackground(true);
@@ -325,13 +326,15 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) {
undo_clip_position.Translate(-clip_rect.x(), -clip_rect.y());
scissor_clip_layer_->setSublayerTransform(undo_clip_position);
- gfx::Transform transform;
transform.matrix().setColMajorf(draw_info->transform);
- transform_layer_->setTransform(transform);
-
view_clip_layer_->setMasksToBounds(true);
}
+ // The scrolling values of the Android Framework affect the transformation
+ // matrix. This needs to be undone to let the compositor handle scrolling.
+ transform.Translate(last_scroll_x_, last_scroll_y_);
+ transform_layer_->setTransform(transform);
+
compositor_->Composite();
is_composite_pending_ = false;
@@ -773,6 +776,12 @@ jboolean AwContents::RestoreFromOpaqueState(
return RestoreFromPickle(&iterator, web_contents_.get());
}
+void AwContents::SetScrollForHWFrame(JNIEnv* env, jobject obj,
+ int scroll_x, int scroll_y) {
+ last_scroll_x_ = scroll_x;
+ last_scroll_y_ = scroll_y;
+}
+
void AwContents::SetPendingWebContentsForPopup(
scoped_ptr<content::WebContents> pending) {
if (pending_contents_.get()) {
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index 4f61adf..cc0e51a 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -97,6 +97,8 @@ class AwContents : public FindHelper::Listener,
base::android::ScopedJavaLocalRef<jbyteArray> GetOpaqueState(
JNIEnv* env, jobject obj);
jboolean RestoreFromOpaqueState(JNIEnv* env, jobject obj, jbyteArray state);
+ void SetScrollForHWFrame(JNIEnv* env, jobject obj,
+ int scroll_x, int scroll_y);
// Find-in-page API and related methods.
jint FindAllSync(JNIEnv* env, jobject obj, jstring search_string);
@@ -142,6 +144,7 @@ class AwContents : public FindHelper::Listener,
bool view_visible_;
bool compositor_visible_;
bool is_composite_pending_;
+ int last_scroll_x_, last_scroll_y_;
// Used only for detecting Android View System context changes.
// Not to be used between draw calls.
diff --git a/android_webview/native/aw_http_auth_handler.cc b/android_webview/native/aw_http_auth_handler.cc
index fa65ebd..e89fcc8 100644
--- a/android_webview/native/aw_http_auth_handler.cc
+++ b/android_webview/native/aw_http_auth_handler.cc
@@ -27,6 +27,7 @@ AwHttpAuthHandler::AwHttpAuthHandler(
}
AwHttpAuthHandler:: ~AwHttpAuthHandler() {
+ // TODO(joth): tell java counterpart, so it can null its native back-pointer.
}
void AwHttpAuthHandler::Proceed(JNIEnv* env,