Chromium Code Reviews| 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() { |