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 0ad4a41f71ecdeeda6d4a4f40263fe207440b90d..3f2277a213136ef69549faad04ecf6367d5ea05c 100644 |
--- a/android_webview/browser/in_process_view_renderer.cc |
+++ b/android_webview/browser/in_process_view_renderer.cc |
@@ -354,9 +354,9 @@ void InProcessViewRenderer::WebContentsGone() { |
bool InProcessViewRenderer::OnDraw(jobject java_canvas, |
bool is_hardware_canvas, |
- const gfx::Point& scroll, |
+ const gfx::Vector2d& scroll_pix, |
const gfx::Rect& clip) { |
- scroll_at_start_of_frame_ = scroll; |
+ scroll_at_start_of_frame_pix_ = scroll_pix; |
if (is_hardware_canvas && attached_to_window_ && compositor_ && |
HardwareEnabled() && client_->RequestDrawGL(java_canvas)) { |
// All set: we'll get a call on DrawGL when the time comes. |
@@ -407,8 +407,8 @@ void InProcessViewRenderer::DrawGL(AwDrawGLInfo* draw_info) { |
gfx::Transform transform; |
transform.matrix().setColMajorf(draw_info->transform); |
- transform.Translate(scroll_at_start_of_frame_.x(), |
- scroll_at_start_of_frame_.y()); |
+ transform.Translate(scroll_at_start_of_frame_pix_.x(), |
+ scroll_at_start_of_frame_pix_.y()); |
// TODO(joth): Check return value. |
compositor_->DemandDrawHw( |
gfx::Size(draw_info->width, draw_info->height), |
@@ -448,10 +448,11 @@ bool InProcessViewRenderer::DrawSWInternal(jobject java_canvas, |
} |
if (!RasterizeIntoBitmap(env, jbitmap, |
- clip.x() - scroll_at_start_of_frame_.x(), |
- clip.y() - scroll_at_start_of_frame_.y(), |
+ clip.x() - scroll_at_start_of_frame_pix_.x(), |
+ clip.y() - scroll_at_start_of_frame_pix_.y(), |
base::Bind(&InProcessViewRenderer::RenderSW, |
base::Unretained(this)))) { |
+ |
TRACE_EVENT_INSTANT0("android_webview", "Rasterize Fail", |
TRACE_EVENT_SCOPE_THREAD); |
return false; |
@@ -487,8 +488,8 @@ bool InProcessViewRenderer::DrawSWInternal(jobject java_canvas, |
} else { |
canvas.clipRect(gfx::RectToSkRect(clip)); |
} |
- canvas.translate(scroll_at_start_of_frame_.x(), |
- scroll_at_start_of_frame_.y()); |
+ canvas.translate(scroll_at_start_of_frame_pix_.x(), |
+ scroll_at_start_of_frame_pix_.y()); |
succeeded = RenderSW(&canvas); |
} |
@@ -578,7 +579,6 @@ bool InProcessViewRenderer::IsAttachedToWindow() { |
bool InProcessViewRenderer::IsViewVisible() { |
return view_visible_; |
} |
- |
joth
2013/06/18 03:19:50
mistake?
mkosiba (inactive)
2013/06/18 18:09:25
yes
|
gfx::Rect InProcessViewRenderer::GetScreenRect() { |
return gfx::Rect(client_->GetLocationOnScreen(), gfx::Size(width_, height_)); |
} |
@@ -609,14 +609,29 @@ void InProcessViewRenderer::SetContinuousInvalidate(bool invalidate) { |
EnsureContinuousInvalidation(); |
} |
+void InProcessViewRenderer::ScrollTo(gfx::Vector2dF new_value_css) { |
+ 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) { |
+ bool value_changed = scroll_offset_css_ != new_value_css; |
+ |
+ if (!value_changed) |
+ return; |
+ |
+ scroll_offset_css_ = new_value_css; |
+ |
+ client_->ScrollContainerViewTo(new_value_css); |
} |
gfx::Vector2dF InProcessViewRenderer::GetTotalRootLayerScrollOffset() { |
- return scroll_offset_; |
+ return scroll_offset_css_; |
} |
void InProcessViewRenderer::Invalidate() { |