client_->DidManageTiles();
}
-void LayerTreeHostImpl::StartPageScaleAnimation(
- const gfx::Vector2d& target_offset,
- bool anchor_point,
- float page_scale,
- base::TimeDelta duration) {
- if (!InnerViewportScrollLayer())
- return;
-
- gfx::Vector2dF scroll_total = active_tree_->TotalScrollOffset();
- gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize();
- gfx::SizeF viewport_size =
- active_tree_->InnerViewportContainerLayer()->bounds();
-
- // Easing constants experimentally determined.
- scoped_ptr<TimingFunction> timing_function =
- CubicBezierTimingFunction::Create(.8, 0, .3, .9).PassAs<TimingFunction>();
-
- page_scale_animation_ =
- PageScaleAnimation::Create(scroll_total,
- active_tree_->total_page_scale_factor(),
- viewport_size,
- scaled_scrollable_size,
- timing_function.Pass());
-
- if (anchor_point) {
- gfx::Vector2dF anchor(target_offset);
- page_scale_animation_->ZoomWithAnchor(anchor,
- page_scale,
- duration.InSecondsF());
- } else {
- gfx::Vector2dF scaled_target_offset = target_offset;
- page_scale_animation_->ZoomTo(scaled_target_offset,
- page_scale,
- duration.InSecondsF());
- }
-
- SetNeedsAnimate();
- client_->SetNeedsCommitOnImplThread();
- client_->RenewTreePriority();
-}
-
bool LayerTreeHostImpl::IsCurrentlyScrollingLayerAt(
const gfx::Point& viewport_point,
InputHandler::ScrollInputType type) {
if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) {
bool disable_picture_quad_image_filtering =
- IsCurrentlyScrolling() || needs_animate_layers();
+ IsActivelyScrolling() || needs_animate_layers();
scoped_ptr<SoftwareRenderer> temp_software_renderer =
SoftwareRenderer::Create(this, &settings_, output_surface_.get(), NULL);
return active_tree_->CurrentlyScrollingLayer();
}
-bool LayerTreeHostImpl::IsCurrentlyScrolling() const {
- return CurrentlyScrollingLayer() ||
+bool LayerTreeHostImpl::IsActivelyScrolling() const {
+ return (did_lock_scrolling_layer_ && CurrentlyScrollingLayer()) ||
(InnerViewportScrollLayer() &&
InnerViewportScrollLayer()->IsExternalFlingActive()) ||
(OuterViewportScrollLayer() &&
if (time_source_client_adapter_ && time_source_client_adapter_->Active())
DCHECK(active_tree_->root_layer());
+
+ scoped_ptr<PageScaleAnimation> page_scale_animation =
+ active_tree_->TakePageScaleAnimation();
+ if (page_scale_animation) {
+ page_scale_animation_ = page_scale_animation.Pass();
+ SetNeedsAnimate();
+ client_->SetNeedsCommitOnImplThread();
+ client_->RenewTreePriority();
+ }
}
void LayerTreeHostImpl::SetVisible(bool visible) {
if (top_controls_manager_)
top_controls_manager_->PinchEnd();
client_->SetNeedsCommitOnImplThread();
+ // When a pinch ends, we may be displaying content cached at incorrect scales,
+ // so updating draw properties and drawing will ensure we are using the right
+ // scales that we want when we're not inside a pinch.
+ active_tree_->set_needs_update_draw_properties();
+ SetNeedsRedraw();
+ // TODO(danakj): Don't set root damage. Just updating draw properties and
+ // getting new tiles rastered should be enough! crbug.com/427423
+ SetFullRootLayerDamage();
}
static void CollectScrollDeltas(ScrollAndScaleSet* scroll_info,