| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 | 469 |
| 470 SetNeedsRedraw(); | 470 SetNeedsRedraw(); |
| 471 client_->SetNeedsCommitOnImplThread(); | 471 client_->SetNeedsCommitOnImplThread(); |
| 472 client_->RenewTreePriority(); | 472 client_->RenewTreePriority(); |
| 473 } | 473 } |
| 474 | 474 |
| 475 void LayerTreeHostImpl::ScheduleAnimation() { | 475 void LayerTreeHostImpl::ScheduleAnimation() { |
| 476 SetNeedsRedraw(); | 476 SetNeedsRedraw(); |
| 477 } | 477 } |
| 478 | 478 |
| 479 bool LayerTreeHostImpl::HaveTouchEventHandlersAt(gfx::Point viewport_point) { | 479 bool LayerTreeHostImpl::HaveTouchEventHandlersAt( |
| 480 const gfx::Point& viewport_point) { |
| 480 if (!settings_.touch_hit_testing) | 481 if (!settings_.touch_hit_testing) |
| 481 return true; | 482 return true; |
| 482 if (!EnsureRenderSurfaceLayerList()) | 483 if (!EnsureRenderSurfaceLayerList()) |
| 483 return false; | 484 return false; |
| 484 | 485 |
| 485 gfx::PointF device_viewport_point = | 486 gfx::PointF device_viewport_point = |
| 486 gfx::ScalePoint(viewport_point, device_scale_factor_); | 487 gfx::ScalePoint(viewport_point, device_scale_factor_); |
| 487 | 488 |
| 488 LayerImpl* layer_impl = | 489 LayerImpl* layer_impl = |
| 489 LayerTreeHostCommon::FindLayerThatIsHitByPointInTouchHandlerRegion( | 490 LayerTreeHostCommon::FindLayerThatIsHitByPointInTouchHandlerRegion( |
| (...skipping 1572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2062 } | 2063 } |
| 2063 | 2064 |
| 2064 if (status == ScrollStarted && !potentially_scrolling_layer_impl) | 2065 if (status == ScrollStarted && !potentially_scrolling_layer_impl) |
| 2065 potentially_scrolling_layer_impl = scroll_layer_impl; | 2066 potentially_scrolling_layer_impl = scroll_layer_impl; |
| 2066 } | 2067 } |
| 2067 | 2068 |
| 2068 return potentially_scrolling_layer_impl; | 2069 return potentially_scrolling_layer_impl; |
| 2069 } | 2070 } |
| 2070 | 2071 |
| 2071 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollBegin( | 2072 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollBegin( |
| 2072 gfx::Point viewport_point, InputHandler::ScrollInputType type) { | 2073 const gfx::Point& viewport_point, |
| 2074 InputHandler::ScrollInputType type) { |
| 2073 TRACE_EVENT0("cc", "LayerTreeHostImpl::ScrollBegin"); | 2075 TRACE_EVENT0("cc", "LayerTreeHostImpl::ScrollBegin"); |
| 2074 | 2076 |
| 2075 if (top_controls_manager_) | 2077 if (top_controls_manager_) |
| 2076 top_controls_manager_->ScrollBegin(); | 2078 top_controls_manager_->ScrollBegin(); |
| 2077 | 2079 |
| 2078 DCHECK(!CurrentlyScrollingLayer()); | 2080 DCHECK(!CurrentlyScrollingLayer()); |
| 2079 ClearCurrentlyScrollingLayer(); | 2081 ClearCurrentlyScrollingLayer(); |
| 2080 | 2082 |
| 2081 if (!EnsureRenderSurfaceLayerList()) | 2083 if (!EnsureRenderSurfaceLayerList()) |
| 2082 return ScrollIgnored; | 2084 return ScrollIgnored; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2190 return actual_viewport_end_point - viewport_point; | 2192 return actual_viewport_end_point - viewport_point; |
| 2191 } | 2193 } |
| 2192 | 2194 |
| 2193 static gfx::Vector2dF ScrollLayerWithLocalDelta(LayerImpl* layer_impl, | 2195 static gfx::Vector2dF ScrollLayerWithLocalDelta(LayerImpl* layer_impl, |
| 2194 const gfx::Vector2dF& local_delta) { | 2196 const gfx::Vector2dF& local_delta) { |
| 2195 gfx::Vector2dF previous_delta(layer_impl->ScrollDelta()); | 2197 gfx::Vector2dF previous_delta(layer_impl->ScrollDelta()); |
| 2196 layer_impl->ScrollBy(local_delta); | 2198 layer_impl->ScrollBy(local_delta); |
| 2197 return layer_impl->ScrollDelta() - previous_delta; | 2199 return layer_impl->ScrollDelta() - previous_delta; |
| 2198 } | 2200 } |
| 2199 | 2201 |
| 2200 bool LayerTreeHostImpl::ScrollBy(gfx::Point viewport_point, | 2202 bool LayerTreeHostImpl::ScrollBy(const gfx::Point& viewport_point, |
| 2201 const gfx::Vector2dF& scroll_delta) { | 2203 const gfx::Vector2dF& scroll_delta) { |
| 2202 TRACE_EVENT0("cc", "LayerTreeHostImpl::ScrollBy"); | 2204 TRACE_EVENT0("cc", "LayerTreeHostImpl::ScrollBy"); |
| 2203 if (!CurrentlyScrollingLayer()) | 2205 if (!CurrentlyScrollingLayer()) |
| 2204 return false; | 2206 return false; |
| 2205 | 2207 |
| 2206 gfx::Vector2dF pending_delta = scroll_delta; | 2208 gfx::Vector2dF pending_delta = scroll_delta; |
| 2207 gfx::Vector2dF unused_root_delta; | 2209 gfx::Vector2dF unused_root_delta; |
| 2208 bool did_scroll_x = false; | 2210 bool did_scroll_x = false; |
| 2209 bool did_scroll_y = false; | 2211 bool did_scroll_y = false; |
| 2210 // TODO(wjmaclean) Should we guard against CurrentlyScrollingLayer() == 0 | 2212 // TODO(wjmaclean) Should we guard against CurrentlyScrollingLayer() == 0 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2319 params.current_fling_velocity = current_fling_velocity_; | 2321 params.current_fling_velocity = current_fling_velocity_; |
| 2320 input_handler_client_->DidOverscroll(params); | 2322 input_handler_client_->DidOverscroll(params); |
| 2321 } | 2323 } |
| 2322 | 2324 |
| 2323 return did_scroll; | 2325 return did_scroll; |
| 2324 } | 2326 } |
| 2325 | 2327 |
| 2326 // This implements scrolling by page as described here: | 2328 // This implements scrolling by page as described here: |
| 2327 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms645601(v=vs.85).asp
x#_win32_The_Mouse_Wheel | 2329 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms645601(v=vs.85).asp
x#_win32_The_Mouse_Wheel |
| 2328 // for events with WHEEL_PAGESCROLL set. | 2330 // for events with WHEEL_PAGESCROLL set. |
| 2329 bool LayerTreeHostImpl::ScrollVerticallyByPage(gfx::Point viewport_point, | 2331 bool LayerTreeHostImpl::ScrollVerticallyByPage(const gfx::Point& viewport_point, |
| 2330 ScrollDirection direction) { | 2332 ScrollDirection direction) { |
| 2331 DCHECK(wheel_scrolling_); | 2333 DCHECK(wheel_scrolling_); |
| 2332 | 2334 |
| 2333 for (LayerImpl* layer_impl = CurrentlyScrollingLayer(); | 2335 for (LayerImpl* layer_impl = CurrentlyScrollingLayer(); |
| 2334 layer_impl; | 2336 layer_impl; |
| 2335 layer_impl = layer_impl->parent()) { | 2337 layer_impl = layer_impl->parent()) { |
| 2336 if (!layer_impl->scrollable()) | 2338 if (!layer_impl->scrollable()) |
| 2337 continue; | 2339 continue; |
| 2338 | 2340 |
| 2339 if (!layer_impl->HasScrollbar(VERTICAL)) | 2341 if (!layer_impl->HasScrollbar(VERTICAL)) |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2426 layer_impl->content_bounds()); | 2428 layer_impl->content_bounds()); |
| 2427 | 2429 |
| 2428 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect( | 2430 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect( |
| 2429 layer_impl->screen_space_transform(), | 2431 layer_impl->screen_space_transform(), |
| 2430 layer_impl_bounds); | 2432 layer_impl_bounds); |
| 2431 | 2433 |
| 2432 return device_viewport_layer_impl_bounds.ManhattanDistanceToPoint( | 2434 return device_viewport_layer_impl_bounds.ManhattanDistanceToPoint( |
| 2433 device_viewport_point); | 2435 device_viewport_point); |
| 2434 } | 2436 } |
| 2435 | 2437 |
| 2436 void LayerTreeHostImpl::MouseMoveAt(gfx::Point viewport_point) { | 2438 void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { |
| 2437 if (!EnsureRenderSurfaceLayerList()) | 2439 if (!EnsureRenderSurfaceLayerList()) |
| 2438 return; | 2440 return; |
| 2439 | 2441 |
| 2440 gfx::PointF device_viewport_point = gfx::ScalePoint(viewport_point, | 2442 gfx::PointF device_viewport_point = gfx::ScalePoint(viewport_point, |
| 2441 device_scale_factor_); | 2443 device_scale_factor_); |
| 2442 | 2444 |
| 2443 LayerImpl* layer_impl = LayerTreeHostCommon::FindLayerThatIsHitByPoint( | 2445 LayerImpl* layer_impl = LayerTreeHostCommon::FindLayerThatIsHitByPoint( |
| 2444 device_viewport_point, | 2446 device_viewport_point, |
| 2445 active_tree_->RenderSurfaceLayerList()); | 2447 active_tree_->RenderSurfaceLayerList()); |
| 2446 if (HandleMouseOverScrollbar(layer_impl, device_viewport_point)) | 2448 if (HandleMouseOverScrollbar(layer_impl, device_viewport_point)) |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2524 active_tree_->OuterViewportScrollLayer()); | 2526 active_tree_->OuterViewportScrollLayer()); |
| 2525 } else { | 2527 } else { |
| 2526 active_tree_->SetCurrentlyScrollingLayer( | 2528 active_tree_->SetCurrentlyScrollingLayer( |
| 2527 active_tree_->InnerViewportScrollLayer()); | 2529 active_tree_->InnerViewportScrollLayer()); |
| 2528 } | 2530 } |
| 2529 if (top_controls_manager_) | 2531 if (top_controls_manager_) |
| 2530 top_controls_manager_->PinchBegin(); | 2532 top_controls_manager_->PinchBegin(); |
| 2531 } | 2533 } |
| 2532 | 2534 |
| 2533 void LayerTreeHostImpl::PinchGestureUpdate(float magnify_delta, | 2535 void LayerTreeHostImpl::PinchGestureUpdate(float magnify_delta, |
| 2534 gfx::Point anchor) { | 2536 const gfx::Point& anchor) { |
| 2535 if (!InnerViewportScrollLayer()) | 2537 if (!InnerViewportScrollLayer()) |
| 2536 return; | 2538 return; |
| 2537 | 2539 |
| 2538 TRACE_EVENT0("cc", "LayerTreeHostImpl::PinchGestureUpdate"); | 2540 TRACE_EVENT0("cc", "LayerTreeHostImpl::PinchGestureUpdate"); |
| 2539 | 2541 |
| 2540 // Keep the center-of-pinch anchor specified by (x, y) in a stable | 2542 // Keep the center-of-pinch anchor specified by (x, y) in a stable |
| 2541 // position over the course of the magnify. | 2543 // position over the course of the magnify. |
| 2542 float page_scale_delta = active_tree_->page_scale_delta(); | 2544 float page_scale_delta = active_tree_->page_scale_delta(); |
| 2543 gfx::PointF previous_scale_anchor = | 2545 gfx::PointF previous_scale_anchor = |
| 2544 gfx::ScalePoint(anchor, 1.f / page_scale_delta); | 2546 gfx::ScalePoint(anchor, 1.f / page_scale_delta); |
| (...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3023 swap_promise_monitor_.erase(monitor); | 3025 swap_promise_monitor_.erase(monitor); |
| 3024 } | 3026 } |
| 3025 | 3027 |
| 3026 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { | 3028 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { |
| 3027 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); | 3029 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); |
| 3028 for (; it != swap_promise_monitor_.end(); it++) | 3030 for (; it != swap_promise_monitor_.end(); it++) |
| 3029 (*it)->OnSetNeedsRedrawOnImpl(); | 3031 (*it)->OnSetNeedsRedrawOnImpl(); |
| 3030 } | 3032 } |
| 3031 | 3033 |
| 3032 } // namespace cc | 3034 } // namespace cc |
| OLD | NEW |