| Index: cc/trees/layer_tree_impl.cc
|
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
|
| index 041c5fea5186105c11c86371cea45ed66c3ee206..97ebb009ecbd7058f0fc321295fb2aec5c006011 100644
|
| --- a/cc/trees/layer_tree_impl.cc
|
| +++ b/cc/trees/layer_tree_impl.cc
|
| @@ -7,8 +7,8 @@
|
| #include <limits>
|
| #include <set>
|
|
|
| -#include "base/debug/trace_event.h"
|
| -#include "base/debug/trace_event_argument.h"
|
| +#include "base/trace_event/trace_event.h"
|
| +#include "base/trace_event/trace_event_argument.h"
|
| #include "cc/animation/keyframed_animation_curve.h"
|
| #include "cc/animation/scrollbar_animation_controller.h"
|
| #include "cc/animation/scrollbar_animation_controller_linear_fade.h"
|
| @@ -50,11 +50,11 @@ class LayerScrollOffsetDelegateProxy : public LayerImpl::ScrollOffsetDelegate {
|
| }
|
|
|
| // LayerScrollOffsetDelegate implementation.
|
| - void SetTotalScrollOffset(const gfx::ScrollOffset& new_offset) override {
|
| + void SetCurrentScrollOffset(const gfx::ScrollOffset& new_offset) override {
|
| last_set_scroll_offset_ = new_offset;
|
| }
|
|
|
| - gfx::ScrollOffset GetTotalScrollOffset() override {
|
| + gfx::ScrollOffset GetCurrentScrollOffset() override {
|
| return layer_tree_impl_->GetDelegatedScrollOffset(layer_);
|
| }
|
|
|
| @@ -154,10 +154,10 @@ gfx::ScrollOffset LayerTreeImpl::TotalScrollOffset() const {
|
| gfx::ScrollOffset offset;
|
|
|
| if (inner_viewport_scroll_layer_)
|
| - offset += inner_viewport_scroll_layer_->TotalScrollOffset();
|
| + offset += inner_viewport_scroll_layer_->CurrentScrollOffset();
|
|
|
| if (outer_viewport_scroll_layer_)
|
| - offset += outer_viewport_scroll_layer_->TotalScrollOffset();
|
| + offset += outer_viewport_scroll_layer_->CurrentScrollOffset();
|
|
|
| return offset;
|
| }
|
| @@ -173,15 +173,6 @@ gfx::ScrollOffset LayerTreeImpl::TotalMaxScrollOffset() const {
|
|
|
| return offset;
|
| }
|
| -gfx::Vector2dF LayerTreeImpl::TotalScrollDelta() const {
|
| - DCHECK(inner_viewport_scroll_layer_);
|
| - gfx::Vector2dF delta = inner_viewport_scroll_layer_->ScrollDelta();
|
| -
|
| - if (outer_viewport_scroll_layer_)
|
| - delta += outer_viewport_scroll_layer_->ScrollDelta();
|
| -
|
| - return delta;
|
| -}
|
|
|
| scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() {
|
| // Clear all data structures that have direct references to the layer tree.
|
| @@ -395,6 +386,29 @@ void LayerTreeImpl::DidUpdatePageScale() {
|
| }
|
|
|
| ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer());
|
| +
|
| + HideInnerViewportScrollbarsIfNearMinimumScale();
|
| +}
|
| +
|
| +void LayerTreeImpl::HideInnerViewportScrollbarsIfNearMinimumScale() {
|
| + if (!InnerViewportContainerLayer())
|
| + return;
|
| +
|
| + LayerImpl::ScrollbarSet* scrollbars =
|
| + InnerViewportContainerLayer()->scrollbars();
|
| +
|
| + if (!scrollbars)
|
| + return;
|
| +
|
| + for (LayerImpl::ScrollbarSet::iterator it = scrollbars->begin();
|
| + it != scrollbars->end();
|
| + ++it) {
|
| + ScrollbarLayerImplBase* scrollbar = *it;
|
| + float minimum_scale_to_show_at =
|
| + min_page_scale_factor() * settings().scrollbar_show_scale_threshold;
|
| + scrollbar->SetHideLayerAndSubtree(
|
| + current_page_scale_factor() < minimum_scale_to_show_at);
|
| + }
|
| }
|
|
|
| SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() {
|
| @@ -445,19 +459,6 @@ void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() {
|
| root_layer(), base::Bind(&ApplySentScrollDeltasFromAbortedCommitTo));
|
| }
|
|
|
| -static void ApplyScrollDeltasSinceBeginMainFrameTo(LayerImpl* layer) {
|
| - layer->ApplyScrollDeltasSinceBeginMainFrame();
|
| -}
|
| -
|
| -void LayerTreeImpl::ApplyScrollDeltasSinceBeginMainFrame() {
|
| - DCHECK(IsPendingTree());
|
| - if (!root_layer())
|
| - return;
|
| -
|
| - LayerTreeHostCommon::CallFunctionForSubtree(
|
| - root_layer(), base::Bind(&ApplyScrollDeltasSinceBeginMainFrameTo));
|
| -}
|
| -
|
| void LayerTreeImpl::SetViewportLayersFromIds(
|
| int overscroll_elasticity_layer_id,
|
| int page_scale_layer_id,
|
| @@ -476,6 +477,8 @@ void LayerTreeImpl::SetViewportLayersFromIds(
|
| DCHECK(outer_viewport_scroll_layer_ ||
|
| outer_viewport_scroll_layer_id == Layer::INVALID_ID);
|
|
|
| + HideInnerViewportScrollbarsIfNearMinimumScale();
|
| +
|
| if (!root_layer_scroll_offset_delegate_)
|
| return;
|
|
|
| @@ -972,6 +975,11 @@ void LayerTreeImpl::SetRootLayerScrollOffsetDelegate(
|
| }
|
|
|
| if (inner_viewport_scroll_layer_)
|
| + inner_viewport_scroll_layer_->RefreshFromScrollDelegate();
|
| + if (outer_viewport_scroll_layer_)
|
| + outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
|
| +
|
| + if (inner_viewport_scroll_layer_)
|
| UpdateScrollOffsetDelegate();
|
| }
|
| }
|
| @@ -979,10 +987,10 @@ void LayerTreeImpl::SetRootLayerScrollOffsetDelegate(
|
| void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() {
|
| DCHECK(root_layer_scroll_offset_delegate_);
|
| if (inner_viewport_scroll_layer_) {
|
| - inner_viewport_scroll_layer_->DidScroll();
|
| + inner_viewport_scroll_layer_->RefreshFromScrollDelegate();
|
| }
|
| if (outer_viewport_scroll_layer_) {
|
| - outer_viewport_scroll_layer_->DidScroll();
|
| + outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
|
| }
|
| }
|
|
|
| @@ -1406,6 +1414,25 @@ static bool LayerHasTouchEventHandlersAt(const gfx::PointF& screen_space_point,
|
| return true;
|
| }
|
|
|
| +struct FindWheelEventLayerFunctor {
|
| + bool operator()(LayerImpl* layer) const {
|
| + return layer->have_wheel_event_handlers();
|
| + }
|
| +};
|
| +
|
| +LayerImpl* LayerTreeImpl::FindLayerWithWheelHandlerThatIsHitByPoint(
|
| + const gfx::PointF& screen_space_point) {
|
| + if (!root_layer())
|
| + return NULL;
|
| + if (!UpdateDrawProperties())
|
| + return NULL;
|
| + FindWheelEventLayerFunctor func;
|
| + FindClosestMatchingLayerDataForRecursion data_for_recursion;
|
| + FindClosestMatchingLayer(screen_space_point, root_layer(), func,
|
| + &data_for_recursion);
|
| + return data_for_recursion.closest_match;
|
| +}
|
| +
|
| struct FindTouchEventLayerFunctor {
|
| bool operator()(LayerImpl* layer) const {
|
| return LayerHasTouchEventHandlersAt(screen_space_point, layer);
|
|
|