| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 #include "cc/trees/layer_tree_settings.h" | 35 #include "cc/trees/layer_tree_settings.h" |
| 36 #include "cc/trees/proxy.h" | 36 #include "cc/trees/proxy.h" |
| 37 #include "ui/gfx/geometry/box_f.h" | 37 #include "ui/gfx/geometry/box_f.h" |
| 38 #include "ui/gfx/geometry/point_conversions.h" | 38 #include "ui/gfx/geometry/point_conversions.h" |
| 39 #include "ui/gfx/geometry/quad_f.h" | 39 #include "ui/gfx/geometry/quad_f.h" |
| 40 #include "ui/gfx/geometry/rect_conversions.h" | 40 #include "ui/gfx/geometry/rect_conversions.h" |
| 41 #include "ui/gfx/geometry/size_conversions.h" | 41 #include "ui/gfx/geometry/size_conversions.h" |
| 42 #include "ui/gfx/geometry/vector2d_conversions.h" | 42 #include "ui/gfx/geometry/vector2d_conversions.h" |
| 43 | 43 |
| 44 namespace cc { | 44 namespace cc { |
| 45 |
| 46 namespace { |
| 47 |
| 48 base::ListValue* EventListenerPropertiesAsJSON(uint32_t event_properties) { |
| 49 base::ListValue* result = new base::ListValue; |
| 50 if ((event_properties & EventListenerProperties::kBlocking) != |
| 51 EventListenerProperties::kNone) |
| 52 result->AppendString("Blocking"); |
| 53 if ((event_properties & EventListenerProperties::kPassive) != |
| 54 EventListenerProperties::kNone) |
| 55 result->AppendString("Passive"); |
| 56 return result; |
| 57 } |
| 58 |
| 59 } // namespace |
| 60 |
| 45 LayerImpl::LayerImpl(LayerTreeImpl* layer_impl, int id) | 61 LayerImpl::LayerImpl(LayerTreeImpl* layer_impl, int id) |
| 46 : LayerImpl(layer_impl, id, new LayerImpl::SyncedScrollOffset) { | 62 : LayerImpl(layer_impl, id, new LayerImpl::SyncedScrollOffset) { |
| 47 } | 63 } |
| 48 | 64 |
| 49 LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, | 65 LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, |
| 50 int id, | 66 int id, |
| 51 scoped_refptr<SyncedScrollOffset> scroll_offset) | 67 scoped_refptr<SyncedScrollOffset> scroll_offset) |
| 52 : parent_(nullptr), | 68 : parent_(nullptr), |
| 53 scroll_parent_(nullptr), | 69 scroll_parent_(nullptr), |
| 54 clip_parent_(nullptr), | 70 clip_parent_(nullptr), |
| 55 mask_layer_id_(-1), | 71 mask_layer_id_(-1), |
| 56 replica_layer_id_(-1), | 72 replica_layer_id_(-1), |
| 57 layer_id_(id), | 73 layer_id_(id), |
| 58 layer_tree_impl_(tree_impl), | 74 layer_tree_impl_(tree_impl), |
| 59 scroll_offset_(scroll_offset), | 75 scroll_offset_(scroll_offset), |
| 60 scroll_clip_layer_id_(Layer::INVALID_ID), | 76 scroll_clip_layer_id_(Layer::INVALID_ID), |
| 61 main_thread_scrolling_reasons_( | 77 main_thread_scrolling_reasons_( |
| 62 MainThreadScrollingReason::kNotScrollingOnMain), | 78 MainThreadScrollingReason::kNotScrollingOnMain), |
| 63 have_wheel_event_handlers_(false), | |
| 64 have_scroll_event_handlers_(false), | 79 have_scroll_event_handlers_(false), |
| 65 scroll_blocks_on_(SCROLL_BLOCKS_ON_NONE), | 80 scroll_blocks_on_(SCROLL_BLOCKS_ON_NONE), |
| 66 user_scrollable_horizontal_(true), | 81 user_scrollable_horizontal_(true), |
| 67 user_scrollable_vertical_(true), | 82 user_scrollable_vertical_(true), |
| 68 stacking_order_changed_(false), | 83 stacking_order_changed_(false), |
| 69 double_sided_(true), | 84 double_sided_(true), |
| 70 should_flatten_transform_(true), | 85 should_flatten_transform_(true), |
| 71 should_flatten_transform_from_property_tree_(false), | 86 should_flatten_transform_from_property_tree_(false), |
| 72 layer_property_changed_(false), | 87 layer_property_changed_(false), |
| 73 masks_to_bounds_(false), | 88 masks_to_bounds_(false), |
| 74 contents_opaque_(false), | 89 contents_opaque_(false), |
| 75 is_root_for_isolated_group_(false), | 90 is_root_for_isolated_group_(false), |
| 76 use_parent_backface_visibility_(false), | 91 use_parent_backface_visibility_(false), |
| 77 draws_content_(false), | 92 draws_content_(false), |
| 78 hide_layer_and_subtree_(false), | 93 hide_layer_and_subtree_(false), |
| 79 transform_is_invertible_(true), | 94 transform_is_invertible_(true), |
| 80 is_container_for_fixed_position_layers_(false), | 95 is_container_for_fixed_position_layers_(false), |
| 81 is_affected_by_page_scale_(true), | 96 is_affected_by_page_scale_(true), |
| 82 was_ever_ready_since_last_transform_animation_(true), | 97 was_ever_ready_since_last_transform_animation_(true), |
| 98 touch_event_properties_(EventListenerProperties::kNone), |
| 99 wheel_event_properties_(EventListenerProperties::kNone), |
| 83 background_color_(0), | 100 background_color_(0), |
| 84 opacity_(1.0), | 101 opacity_(1.0), |
| 85 blend_mode_(SkXfermode::kSrcOver_Mode), | 102 blend_mode_(SkXfermode::kSrcOver_Mode), |
| 86 draw_blend_mode_(SkXfermode::kSrcOver_Mode), | 103 draw_blend_mode_(SkXfermode::kSrcOver_Mode), |
| 87 num_descendants_that_draw_content_(0), | 104 num_descendants_that_draw_content_(0), |
| 88 transform_tree_index_(-1), | 105 transform_tree_index_(-1), |
| 89 effect_tree_index_(-1), | 106 effect_tree_index_(-1), |
| 90 clip_tree_index_(-1), | 107 clip_tree_index_(-1), |
| 91 draw_depth_(0.f), | 108 draw_depth_(0.f), |
| 92 needs_push_properties_(false), | 109 needs_push_properties_(false), |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 if (have_scroll_event_handlers() && | 573 if (have_scroll_event_handlers() && |
| 557 effective_block_mode & SCROLL_BLOCKS_ON_SCROLL_EVENT) { | 574 effective_block_mode & SCROLL_BLOCKS_ON_SCROLL_EVENT) { |
| 558 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed ScrollEventHandlers"); | 575 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed ScrollEventHandlers"); |
| 559 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; | 576 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; |
| 560 scroll_status.main_thread_scrolling_reasons = | 577 scroll_status.main_thread_scrolling_reasons = |
| 561 MainThreadScrollingReason::kEventHandlers; | 578 MainThreadScrollingReason::kEventHandlers; |
| 562 return scroll_status; | 579 return scroll_status; |
| 563 } | 580 } |
| 564 | 581 |
| 565 if ((type == InputHandler::WHEEL || type == InputHandler::ANIMATED_WHEEL) && | 582 if ((type == InputHandler::WHEEL || type == InputHandler::ANIMATED_WHEEL) && |
| 566 have_wheel_event_handlers() && | 583 (wheel_event_properties() & EventListenerProperties::kBlocking) != |
| 584 EventListenerProperties::kNone && |
| 567 effective_block_mode & SCROLL_BLOCKS_ON_WHEEL_EVENT) { | 585 effective_block_mode & SCROLL_BLOCKS_ON_WHEEL_EVENT) { |
| 568 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers"); | 586 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers"); |
| 569 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; | 587 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; |
| 570 scroll_status.main_thread_scrolling_reasons = | 588 scroll_status.main_thread_scrolling_reasons = |
| 571 MainThreadScrollingReason::kEventHandlers; | 589 MainThreadScrollingReason::kEventHandlers; |
| 572 return scroll_status; | 590 return scroll_status; |
| 573 } | 591 } |
| 574 | 592 |
| 575 if (!scrollable()) { | 593 if (!scrollable()) { |
| 576 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Ignored not scrollable"); | 594 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Ignored not scrollable"); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 // TODO(weiliangc): Should be safely removed after impl side is able to | 633 // TODO(weiliangc): Should be safely removed after impl side is able to |
| 616 // update render surfaces without rebuilding property trees. | 634 // update render surfaces without rebuilding property trees. |
| 617 if (layer->has_render_surface() != has_render_surface()) | 635 if (layer->has_render_surface() != has_render_surface()) |
| 618 layer->layer_tree_impl()->set_needs_update_draw_properties(); | 636 layer->layer_tree_impl()->set_needs_update_draw_properties(); |
| 619 layer->SetHasRenderSurface(!!render_surface()); | 637 layer->SetHasRenderSurface(!!render_surface()); |
| 620 layer->SetForceRenderSurface(force_render_surface_); | 638 layer->SetForceRenderSurface(force_render_surface_); |
| 621 layer->SetFilters(filters()); | 639 layer->SetFilters(filters()); |
| 622 layer->SetBackgroundFilters(background_filters()); | 640 layer->SetBackgroundFilters(background_filters()); |
| 623 layer->SetMasksToBounds(masks_to_bounds_); | 641 layer->SetMasksToBounds(masks_to_bounds_); |
| 624 layer->set_main_thread_scrolling_reasons(main_thread_scrolling_reasons_); | 642 layer->set_main_thread_scrolling_reasons(main_thread_scrolling_reasons_); |
| 625 layer->SetHaveWheelEventHandlers(have_wheel_event_handlers_); | 643 layer->SetTouchEventProperties(touch_event_properties_); |
| 644 layer->SetWheelEventProperties(wheel_event_properties_); |
| 626 layer->SetHaveScrollEventHandlers(have_scroll_event_handlers_); | 645 layer->SetHaveScrollEventHandlers(have_scroll_event_handlers_); |
| 627 layer->SetScrollBlocksOn(scroll_blocks_on_); | 646 layer->SetScrollBlocksOn(scroll_blocks_on_); |
| 628 layer->SetNonFastScrollableRegion(non_fast_scrollable_region_); | 647 layer->SetNonFastScrollableRegion(non_fast_scrollable_region_); |
| 629 layer->SetTouchEventHandlerRegion(touch_event_handler_region_); | 648 layer->SetTouchEventHandlerRegion(touch_event_handler_region_); |
| 630 layer->SetContentsOpaque(contents_opaque_); | 649 layer->SetContentsOpaque(contents_opaque_); |
| 631 layer->SetOpacity(opacity_); | 650 layer->SetOpacity(opacity_); |
| 632 layer->SetBlendMode(blend_mode_); | 651 layer->SetBlendMode(blend_mode_); |
| 633 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_); | 652 layer->SetIsRootForIsolatedGroup(is_root_for_isolated_group_); |
| 634 layer->SetPosition(position_); | 653 layer->SetPosition(position_); |
| 635 layer->SetIsContainerForFixedPositionLayers( | 654 layer->SetIsContainerForFixedPositionLayers( |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 result->Set("DrawTransform", list); | 785 result->Set("DrawTransform", list); |
| 767 | 786 |
| 768 result->SetBoolean("DrawsContent", draws_content_); | 787 result->SetBoolean("DrawsContent", draws_content_); |
| 769 result->SetBoolean("Is3dSorted", Is3dSorted()); | 788 result->SetBoolean("Is3dSorted", Is3dSorted()); |
| 770 result->SetDouble("OPACITY", opacity()); | 789 result->SetDouble("OPACITY", opacity()); |
| 771 result->SetBoolean("ContentsOpaque", contents_opaque_); | 790 result->SetBoolean("ContentsOpaque", contents_opaque_); |
| 772 | 791 |
| 773 if (scrollable()) | 792 if (scrollable()) |
| 774 result->SetBoolean("Scrollable", true); | 793 result->SetBoolean("Scrollable", true); |
| 775 | 794 |
| 776 if (have_wheel_event_handlers_) | 795 if (touch_event_properties_ != EventListenerProperties::kNone) { |
| 777 result->SetBoolean("WheelHandler", have_wheel_event_handlers_); | 796 list = EventListenerPropertiesAsJSON(touch_event_properties_); |
| 797 result->Set("TouchHandler", list); |
| 798 } |
| 799 |
| 800 if (wheel_event_properties_ != EventListenerProperties::kNone) { |
| 801 list = EventListenerPropertiesAsJSON(wheel_event_properties_); |
| 802 result->Set("WheelHandler", list); |
| 803 } |
| 804 |
| 778 if (have_scroll_event_handlers_) | 805 if (have_scroll_event_handlers_) |
| 779 result->SetBoolean("ScrollHandler", have_scroll_event_handlers_); | 806 result->SetBoolean("ScrollHandler", have_scroll_event_handlers_); |
| 780 if (!touch_event_handler_region_.IsEmpty()) { | 807 if (!touch_event_handler_region_.IsEmpty()) { |
| 781 scoped_ptr<base::Value> region = touch_event_handler_region_.AsValue(); | 808 scoped_ptr<base::Value> region = touch_event_handler_region_.AsValue(); |
| 782 result->Set("TouchRegion", region.release()); | 809 result->Set("TouchRegion", region.release()); |
| 783 } | 810 } |
| 784 | 811 |
| 785 if (scroll_blocks_on_) { | 812 if (scroll_blocks_on_) { |
| 786 list = new base::ListValue; | 813 list = new base::ListValue; |
| 787 if (scroll_blocks_on_ & SCROLL_BLOCKS_ON_START_TOUCH) | 814 if (scroll_blocks_on_ & SCROLL_BLOCKS_ON_START_TOUCH) |
| (...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1735 bool clipped; | 1762 bool clipped; |
| 1736 gfx::QuadF layer_quad = | 1763 gfx::QuadF layer_quad = |
| 1737 MathUtil::MapQuad(ScreenSpaceTransform(), | 1764 MathUtil::MapQuad(ScreenSpaceTransform(), |
| 1738 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped); | 1765 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped); |
| 1739 MathUtil::AddToTracedValue("layer_quad", layer_quad, state); | 1766 MathUtil::AddToTracedValue("layer_quad", layer_quad, state); |
| 1740 if (!touch_event_handler_region_.IsEmpty()) { | 1767 if (!touch_event_handler_region_.IsEmpty()) { |
| 1741 state->BeginArray("touch_event_handler_region"); | 1768 state->BeginArray("touch_event_handler_region"); |
| 1742 touch_event_handler_region_.AsValueInto(state); | 1769 touch_event_handler_region_.AsValueInto(state); |
| 1743 state->EndArray(); | 1770 state->EndArray(); |
| 1744 } | 1771 } |
| 1745 if (have_wheel_event_handlers_) { | 1772 if (wheel_event_properties_ != EventListenerProperties::kNone) { |
| 1746 gfx::Rect wheel_rect(bounds()); | 1773 gfx::Rect wheel_rect(bounds()); |
| 1747 Region wheel_region(wheel_rect); | 1774 Region wheel_region(wheel_rect); |
| 1748 state->BeginArray("wheel_event_handler_region"); | 1775 state->BeginArray("wheel_event_handler_region"); |
| 1749 wheel_region.AsValueInto(state); | 1776 wheel_region.AsValueInto(state); |
| 1750 state->EndArray(); | 1777 state->EndArray(); |
| 1751 } | 1778 } |
| 1752 if (have_scroll_event_handlers_) { | 1779 if (have_scroll_event_handlers_) { |
| 1753 gfx::Rect scroll_rect(bounds()); | 1780 gfx::Rect scroll_rect(bounds()); |
| 1754 Region scroll_region(scroll_rect); | 1781 Region scroll_region(scroll_rect); |
| 1755 state->BeginArray("scroll_event_handler_region"); | 1782 state->BeginArray("scroll_event_handler_region"); |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1943 .layer_transforms_should_scale_layer_contents) { | 1970 .layer_transforms_should_scale_layer_contents) { |
| 1944 return default_scale; | 1971 return default_scale; |
| 1945 } | 1972 } |
| 1946 | 1973 |
| 1947 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1974 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
| 1948 DrawTransform(), default_scale); | 1975 DrawTransform(), default_scale); |
| 1949 return std::max(transform_scales.x(), transform_scales.y()); | 1976 return std::max(transform_scales.x(), transform_scales.y()); |
| 1950 } | 1977 } |
| 1951 | 1978 |
| 1952 } // namespace cc | 1979 } // namespace cc |
| OLD | NEW |