Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2253)

Unified Diff: android_webview/browser/in_process_view_renderer.cc

Issue 16255010: Hookup android_webview scroll offset delegation to Java side. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix compile break Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/in_process_view_renderer.cc
diff --git a/android_webview/browser/in_process_view_renderer.cc b/android_webview/browser/in_process_view_renderer.cc
index 28810e2b7aa3c5d303bed9a3ed1b2fcea98ed103..acb6db8c2d60ee0b88cde771c676f8f90be1e1e5 100644
--- a/android_webview/browser/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_view_renderer.cc
@@ -25,6 +25,7 @@
#include "ui/gfx/size_conversions.h"
#include "ui/gfx/skia_util.h"
#include "ui/gfx/transform.h"
+#include "ui/gfx/vector2d_conversions.h"
#include "ui/gfx/vector2d_f.h"
#include "ui/gl/gl_bindings.h"
@@ -306,6 +307,7 @@ InProcessViewRenderer::InProcessViewRenderer(
web_contents_(web_contents),
compositor_(NULL),
view_visible_(false),
+ dip_scale_(0.0),
continuous_invalidate_(false),
block_invalidates_(false),
width_(0),
@@ -341,7 +343,7 @@ void InProcessViewRenderer::WebContentsGone() {
bool InProcessViewRenderer::OnDraw(jobject java_canvas,
bool is_hardware_canvas,
- const gfx::Point& scroll,
+ const gfx::Vector2d& scroll,
const gfx::Rect& clip) {
scroll_at_start_of_frame_ = scroll;
if (is_hardware_canvas && attached_to_window_ && compositor_ &&
@@ -643,14 +645,49 @@ void InProcessViewRenderer::SetContinuousInvalidate(bool invalidate) {
EnsureContinuousInvalidation(NULL);
}
+void InProcessViewRenderer::SetDipScale(float dip_scale) {
+ dip_scale_ = dip_scale;
+ CHECK(dip_scale_ > 0);
+}
+
+void InProcessViewRenderer::ScrollTo(gfx::Vector2d new_value) {
+ DCHECK(dip_scale_ > 0);
+ // In general we don't guarantee that the scroll offset transforms are
+ // symmetrical. That is if scrolling from JS to offset1 results in a native
+ // offset2 then scrolling from UI to offset2 results in JS being scrolled to
+ // offset1 again.
+ // The reason we explicitly do rounding here is that it seems to yeld the
+ // most stabile transformation.
+ gfx::Vector2dF new_value_css = gfx::ToRoundedVector2d(
+ gfx::ScaleVector2d(new_value, 1.0f / dip_scale_));
+
+ DCHECK(scroll_offset_css_ != new_value_css);
+
+ scroll_offset_css_ = new_value_css;
+
+ if (compositor_)
+ compositor_->DidChangeRootLayerScrollOffset();
+}
+
void InProcessViewRenderer::SetTotalRootLayerScrollOffset(
- gfx::Vector2dF new_value) {
- // TODO(mkosiba): Plumb this all the way through to the view.
- scroll_offset_ = new_value;
+ gfx::Vector2dF new_value_css) {
+ // TOOD(mkosiba): Add a DCHECK to say that this does _not_ get called during
+ // DrawGl when http://crbug.com/249972 is fixed.
+ if (scroll_offset_css_ == new_value_css)
+ return;
+
+ scroll_offset_css_ = new_value_css;
+
+ DCHECK(dip_scale_ > 0);
+
+ gfx::Vector2d scroll_offset =
+ gfx::ToRoundedVector2d(gfx::ScaleVector2d(new_value_css, dip_scale_));
+
+ client_->ScrollContainerViewTo(scroll_offset);
}
gfx::Vector2dF InProcessViewRenderer::GetTotalRootLayerScrollOffset() {
- return scroll_offset_;
+ return scroll_offset_css_;
}
void InProcessViewRenderer::EnsureContinuousInvalidation(

Powered by Google App Engine
This is Rietveld 408576698