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

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: tests now pass 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..ef4f90a3e5cabe3a8c8fc653d04aca2c8d7b2ef9 100644
--- a/android_webview/browser/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_view_renderer.cc
@@ -306,6 +306,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 +342,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 +644,44 @@ void InProcessViewRenderer::SetContinuousInvalidate(bool invalidate) {
EnsureContinuousInvalidation(NULL);
}
+void InProcessViewRenderer::SetDipScale(double dip_scale) {
+ dip_scale_ = dip_scale;
+ CHECK(dip_scale_ > 0);
+}
+
+void InProcessViewRenderer::ScrollTo(gfx::Vector2d new_value) {
+
joth 2013/06/19 05:34:45 nit: spurious \n
mkosiba (inactive) 2013/06/19 11:12:19 Done.
+ DCHECK(dip_scale_ > 0);
+ gfx::Vector2dF new_value_css(new_value.x() / dip_scale_,
+ new_value.y() / 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.
+ bool value_changed = scroll_offset_css_ != new_value_css;
joth 2013/06/19 05:34:45 nit: local var really needed?
mkosiba (inactive) 2013/06/19 11:12:19 no, I forgot to remove it while restructuring the
+
+ if (!value_changed)
+ return;
+
+ scroll_offset_css_ = new_value_css;
+
+ DCHECK(dip_scale_ > 0);
+ gfx::Vector2d scroll_offset(scroll_offset_css_.x() * dip_scale_,
+ scroll_offset_css_.y() * 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