Index: cc/layers/layer_impl.cc |
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc |
index d42ec311f966c4dcbd32cfc7f166dc3f64ef90f8..03333a4ad88feb44a42f02b026ca94a45049d47c 100644 |
--- a/cc/layers/layer_impl.cc |
+++ b/cc/layers/layer_impl.cc |
@@ -42,6 +42,8 @@ LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, int id) |
scrollable_(false), |
should_scroll_on_main_thread_(false), |
have_wheel_event_handlers_(false), |
+ user_scrollable_horizontal_(true), |
+ user_scrollable_vertical_(true), |
background_color_(0), |
stacking_order_changed_(false), |
double_sided_(true), |
@@ -341,6 +343,15 @@ void LayerImpl::SetSentScrollDelta(gfx::Vector2d sent_scroll_delta) { |
gfx::Vector2dF LayerImpl::ScrollBy(gfx::Vector2dF scroll) { |
DCHECK(scrollable()); |
+ gfx::Vector2dF scroll_hidden; |
+ if (!user_scrollable_horizontal_) { |
+ scroll_hidden.set_x(scroll.x()); |
+ scroll.set_x(0.f); |
+ } |
+ if (!user_scrollable_vertical_) { |
+ scroll_hidden.set_y(scroll.y()); |
+ scroll.set_y(0.f); |
+ } |
gfx::Vector2dF min_delta = -scroll_offset_; |
gfx::Vector2dF max_delta = max_scroll_offset_ - scroll_offset_; |
@@ -348,7 +359,8 @@ gfx::Vector2dF LayerImpl::ScrollBy(gfx::Vector2dF scroll) { |
gfx::Vector2dF new_delta = (ScrollDelta() + scroll); |
new_delta.SetToMax(min_delta); |
new_delta.SetToMin(max_delta); |
- gfx::Vector2dF unscrolled = ScrollDelta() + scroll - new_delta; |
+ gfx::Vector2dF unscrolled = |
+ ScrollDelta() + scroll + scroll_hidden - new_delta; |
SetScrollDelta(new_delta); |
return unscrolled; |
} |
@@ -449,6 +461,9 @@ InputHandler::ScrollStatus LayerImpl::TryScroll( |
return InputHandler::ScrollIgnored; |
} |
+ if (!user_scrollable_horizontal_ && !user_scrollable_vertical_) |
+ return InputHandler::ScrollIgnored; |
jamesr
2013/10/21 22:36:34
nit: it'd be useful to TRACE_EVENT this bail-out l
sadrul
2013/10/21 23:11:17
Done.
|
+ |
return InputHandler::ScrollStarted; |
} |
@@ -514,6 +529,8 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) { |
layer->SetTransform(transform_); |
layer->SetScrollable(scrollable_); |
+ layer->SetUserScrollable(user_scrollable_horizontal_, |
+ user_scrollable_vertical_); |
layer->SetScrollOffsetAndDelta( |
scroll_offset_, layer->ScrollDelta() - layer->sent_scroll_delta()); |
layer->SetSentScrollDelta(gfx::Vector2d()); |