OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
6 | 6 |
7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
10 #include "base/trace_event/trace_event_argument.h" | 10 #include "base/trace_event/trace_event_argument.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 mask_layer_id_(-1), | 47 mask_layer_id_(-1), |
48 replica_layer_id_(-1), | 48 replica_layer_id_(-1), |
49 layer_id_(id), | 49 layer_id_(id), |
50 layer_tree_impl_(tree_impl), | 50 layer_tree_impl_(tree_impl), |
51 scroll_offset_(scroll_offset), | 51 scroll_offset_(scroll_offset), |
52 scroll_offset_delegate_(nullptr), | 52 scroll_offset_delegate_(nullptr), |
53 scroll_clip_layer_(nullptr), | 53 scroll_clip_layer_(nullptr), |
54 should_scroll_on_main_thread_(false), | 54 should_scroll_on_main_thread_(false), |
55 have_wheel_event_handlers_(false), | 55 have_wheel_event_handlers_(false), |
56 have_scroll_event_handlers_(false), | 56 have_scroll_event_handlers_(false), |
| 57 scroll_blocks_on_(ScrollBlocksOnNone), |
57 user_scrollable_horizontal_(true), | 58 user_scrollable_horizontal_(true), |
58 user_scrollable_vertical_(true), | 59 user_scrollable_vertical_(true), |
59 stacking_order_changed_(false), | 60 stacking_order_changed_(false), |
60 double_sided_(true), | 61 double_sided_(true), |
61 should_flatten_transform_(true), | 62 should_flatten_transform_(true), |
62 layer_property_changed_(false), | 63 layer_property_changed_(false), |
63 masks_to_bounds_(false), | 64 masks_to_bounds_(false), |
64 contents_opaque_(false), | 65 contents_opaque_(false), |
65 is_root_for_isolated_group_(false), | 66 is_root_for_isolated_group_(false), |
66 use_parent_backface_visibility_(false), | 67 use_parent_backface_visibility_(false), |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 : user_scrollable_vertical_; | 386 : user_scrollable_vertical_; |
386 } | 387 } |
387 | 388 |
388 void LayerImpl::ApplySentScrollDeltasFromAbortedCommit() { | 389 void LayerImpl::ApplySentScrollDeltasFromAbortedCommit() { |
389 DCHECK(layer_tree_impl()->IsActiveTree()); | 390 DCHECK(layer_tree_impl()->IsActiveTree()); |
390 scroll_offset_->AbortCommit(); | 391 scroll_offset_->AbortCommit(); |
391 } | 392 } |
392 | 393 |
393 InputHandler::ScrollStatus LayerImpl::TryScroll( | 394 InputHandler::ScrollStatus LayerImpl::TryScroll( |
394 const gfx::PointF& screen_space_point, | 395 const gfx::PointF& screen_space_point, |
395 InputHandler::ScrollInputType type) const { | 396 InputHandler::ScrollInputType type, |
| 397 ScrollBlocksOn effective_block_mode) const { |
396 if (should_scroll_on_main_thread()) { | 398 if (should_scroll_on_main_thread()) { |
397 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Failed ShouldScrollOnMainThread"); | 399 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Failed ShouldScrollOnMainThread"); |
398 return InputHandler::ScrollOnMainThread; | 400 return InputHandler::ScrollOnMainThread; |
399 } | 401 } |
400 | 402 |
401 if (!screen_space_transform().IsInvertible()) { | 403 if (!screen_space_transform().IsInvertible()) { |
402 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Ignored NonInvertibleTransform"); | 404 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Ignored NonInvertibleTransform"); |
403 return InputHandler::ScrollIgnored; | 405 return InputHandler::ScrollIgnored; |
404 } | 406 } |
405 | 407 |
(...skipping 17 matching lines...) Expand all Loading... |
423 1.f / contents_scale_y()); | 425 1.f / contents_scale_y()); |
424 if (!clipped && | 426 if (!clipped && |
425 non_fast_scrollable_region().Contains( | 427 non_fast_scrollable_region().Contains( |
426 gfx::ToRoundedPoint(hit_test_point_in_layer_space))) { | 428 gfx::ToRoundedPoint(hit_test_point_in_layer_space))) { |
427 TRACE_EVENT0("cc", | 429 TRACE_EVENT0("cc", |
428 "LayerImpl::tryScroll: Failed NonFastScrollableRegion"); | 430 "LayerImpl::tryScroll: Failed NonFastScrollableRegion"); |
429 return InputHandler::ScrollOnMainThread; | 431 return InputHandler::ScrollOnMainThread; |
430 } | 432 } |
431 } | 433 } |
432 | 434 |
433 if (type == InputHandler::Wheel && have_wheel_event_handlers()) { | 435 if (have_scroll_event_handlers() && |
| 436 effective_block_mode & ScrollBlocksOnScrollEvent) { |
| 437 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed ScrollEventHandlers"); |
| 438 return InputHandler::ScrollOnMainThread; |
| 439 } |
| 440 |
| 441 if (type == InputHandler::Wheel && have_wheel_event_handlers() && |
| 442 effective_block_mode & ScrollBlocksOnWheelEvent) { |
434 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers"); | 443 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers"); |
435 return InputHandler::ScrollOnMainThread; | 444 return InputHandler::ScrollOnMainThread; |
436 } | 445 } |
437 | 446 |
438 if (!scrollable()) { | 447 if (!scrollable()) { |
439 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Ignored not scrollable"); | 448 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Ignored not scrollable"); |
440 return InputHandler::ScrollIgnored; | 449 return InputHandler::ScrollIgnored; |
441 } | 450 } |
442 | 451 |
443 gfx::ScrollOffset max_scroll_offset = MaxScrollOffset(); | 452 gfx::ScrollOffset max_scroll_offset = MaxScrollOffset(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 draw_checkerboard_for_missing_tiles_); | 489 draw_checkerboard_for_missing_tiles_); |
481 layer->SetDrawsContent(DrawsContent()); | 490 layer->SetDrawsContent(DrawsContent()); |
482 layer->SetHideLayerAndSubtree(hide_layer_and_subtree_); | 491 layer->SetHideLayerAndSubtree(hide_layer_and_subtree_); |
483 layer->SetHasRenderSurface(!!render_surface()); | 492 layer->SetHasRenderSurface(!!render_surface()); |
484 layer->SetFilters(filters()); | 493 layer->SetFilters(filters()); |
485 layer->SetBackgroundFilters(background_filters()); | 494 layer->SetBackgroundFilters(background_filters()); |
486 layer->SetMasksToBounds(masks_to_bounds_); | 495 layer->SetMasksToBounds(masks_to_bounds_); |
487 layer->SetShouldScrollOnMainThread(should_scroll_on_main_thread_); | 496 layer->SetShouldScrollOnMainThread(should_scroll_on_main_thread_); |
488 layer->SetHaveWheelEventHandlers(have_wheel_event_handlers_); | 497 layer->SetHaveWheelEventHandlers(have_wheel_event_handlers_); |
489 layer->SetHaveScrollEventHandlers(have_scroll_event_handlers_); | 498 layer->SetHaveScrollEventHandlers(have_scroll_event_handlers_); |
| 499 layer->SetScrollBlocksOn(scroll_blocks_on_); |
490 layer->SetNonFastScrollableRegion(non_fast_scrollable_region_); | 500 layer->SetNonFastScrollableRegion(non_fast_scrollable_region_); |
491 layer->SetTouchEventHandlerRegion(touch_event_handler_region_); | 501 layer->SetTouchEventHandlerRegion(touch_event_handler_region_); |
492 layer->SetContentsOpaque(contents_opaque_); | 502 layer->SetContentsOpaque(contents_opaque_); |
493 layer->SetOpacity(opacity_); | 503 layer->SetOpacity(opacity_); |
494 layer->SetBlendMode(blend_mode_); | 504 layer->SetBlendMode(blend_mode_); |
495 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_); | 505 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_); |
496 layer->SetPosition(position_); | 506 layer->SetPosition(position_); |
497 layer->SetIsContainerForFixedPositionLayers( | 507 layer->SetIsContainerForFixedPositionLayers( |
498 is_container_for_fixed_position_layers_); | 508 is_container_for_fixed_position_layers_); |
499 layer->SetPositionConstraint(position_constraint_); | 509 layer->SetPositionConstraint(position_constraint_); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 | 652 |
643 if (have_wheel_event_handlers_) | 653 if (have_wheel_event_handlers_) |
644 result->SetBoolean("WheelHandler", have_wheel_event_handlers_); | 654 result->SetBoolean("WheelHandler", have_wheel_event_handlers_); |
645 if (have_scroll_event_handlers_) | 655 if (have_scroll_event_handlers_) |
646 result->SetBoolean("ScrollHandler", have_scroll_event_handlers_); | 656 result->SetBoolean("ScrollHandler", have_scroll_event_handlers_); |
647 if (!touch_event_handler_region_.IsEmpty()) { | 657 if (!touch_event_handler_region_.IsEmpty()) { |
648 scoped_ptr<base::Value> region = touch_event_handler_region_.AsValue(); | 658 scoped_ptr<base::Value> region = touch_event_handler_region_.AsValue(); |
649 result->Set("TouchRegion", region.release()); | 659 result->Set("TouchRegion", region.release()); |
650 } | 660 } |
651 | 661 |
| 662 if (scroll_blocks_on_) { |
| 663 list = new base::ListValue; |
| 664 if (scroll_blocks_on_ & ScrollBlocksOnStartTouch) |
| 665 list->AppendString("StartTouch"); |
| 666 if (scroll_blocks_on_ & ScrollBlocksOnWheelEvent) |
| 667 list->AppendString("WheelEvent"); |
| 668 if (scroll_blocks_on_ & ScrollBlocksOnScrollEvent) |
| 669 list->AppendString("ScrollEvent"); |
| 670 result->Set("ScrollBlocksOn", list); |
| 671 } |
| 672 |
652 list = new base::ListValue; | 673 list = new base::ListValue; |
653 for (size_t i = 0; i < children_.size(); ++i) | 674 for (size_t i = 0; i < children_.size(); ++i) |
654 list->Append(children_[i]->LayerTreeAsJson()); | 675 list->Append(children_[i]->LayerTreeAsJson()); |
655 result->Set("Children", list); | 676 result->Set("Children", list); |
656 | 677 |
657 return result; | 678 return result; |
658 } | 679 } |
659 | 680 |
660 void LayerImpl::SetStackingOrderChanged(bool stacking_order_changed) { | 681 void LayerImpl::SetStackingOrderChanged(bool stacking_order_changed) { |
661 if (stacking_order_changed) { | 682 if (stacking_order_changed) { |
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1433 Region scroll_region(scroll_rect); | 1454 Region scroll_region(scroll_rect); |
1434 state->BeginArray("scroll_event_handler_region"); | 1455 state->BeginArray("scroll_event_handler_region"); |
1435 scroll_region.AsValueInto(state); | 1456 scroll_region.AsValueInto(state); |
1436 state->EndArray(); | 1457 state->EndArray(); |
1437 } | 1458 } |
1438 if (!non_fast_scrollable_region_.IsEmpty()) { | 1459 if (!non_fast_scrollable_region_.IsEmpty()) { |
1439 state->BeginArray("non_fast_scrollable_region"); | 1460 state->BeginArray("non_fast_scrollable_region"); |
1440 non_fast_scrollable_region_.AsValueInto(state); | 1461 non_fast_scrollable_region_.AsValueInto(state); |
1441 state->EndArray(); | 1462 state->EndArray(); |
1442 } | 1463 } |
| 1464 if (scroll_blocks_on_) { |
| 1465 state->SetInteger("scroll_blocks_on", scroll_blocks_on_); |
| 1466 } |
1443 | 1467 |
1444 state->BeginArray("children"); | 1468 state->BeginArray("children"); |
1445 for (size_t i = 0; i < children_.size(); ++i) { | 1469 for (size_t i = 0; i < children_.size(); ++i) { |
1446 state->BeginDictionary(); | 1470 state->BeginDictionary(); |
1447 children_[i]->AsValueInto(state); | 1471 children_[i]->AsValueInto(state); |
1448 state->EndDictionary(); | 1472 state->EndDictionary(); |
1449 } | 1473 } |
1450 state->EndArray(); | 1474 state->EndArray(); |
1451 if (mask_layer_) { | 1475 if (mask_layer_) { |
1452 state->BeginDictionary("mask_layer"); | 1476 state->BeginDictionary("mask_layer"); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1538 SetNeedsPushProperties(); | 1562 SetNeedsPushProperties(); |
1539 layer_tree_impl()->set_needs_update_draw_properties(); | 1563 layer_tree_impl()->set_needs_update_draw_properties(); |
1540 if (should_have_render_surface) { | 1564 if (should_have_render_surface) { |
1541 render_surface_ = make_scoped_ptr(new RenderSurfaceImpl(this)); | 1565 render_surface_ = make_scoped_ptr(new RenderSurfaceImpl(this)); |
1542 return; | 1566 return; |
1543 } | 1567 } |
1544 render_surface_.reset(); | 1568 render_surface_.reset(); |
1545 } | 1569 } |
1546 | 1570 |
1547 } // namespace cc | 1571 } // namespace cc |
OLD | NEW |