| Index: cc/trees/property_tree.cc
|
| diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
|
| index ac8b60bb2b9184761af6a0461fbb4afffb5b3256..a22961ce12839a229c6cba2e63c2eda3b53b3995 100644
|
| --- a/cc/trees/property_tree.cc
|
| +++ b/cc/trees/property_tree.cc
|
| @@ -479,7 +479,9 @@ ScrollNodeData::ScrollNodeData()
|
| contains_non_fast_scrollable_region(false),
|
| max_scroll_offset_affected_by_page_scale(false),
|
| is_inner_viewport_scroll_layer(false),
|
| - is_outer_viewport_scroll_layer(false) {}
|
| + is_outer_viewport_scroll_layer(false),
|
| + should_flatten(false),
|
| + transform_id(0) {}
|
|
|
| bool ScrollNodeData::operator==(const ScrollNodeData& other) const {
|
| return scrollable == other.scrollable &&
|
| @@ -492,7 +494,11 @@ bool ScrollNodeData::operator==(const ScrollNodeData& other) const {
|
| other.max_scroll_offset_affected_by_page_scale &&
|
| is_inner_viewport_scroll_layer ==
|
| other.is_inner_viewport_scroll_layer &&
|
| - is_outer_viewport_scroll_layer == other.is_outer_viewport_scroll_layer;
|
| + is_outer_viewport_scroll_layer ==
|
| + other.is_outer_viewport_scroll_layer &&
|
| + offset_to_transform_parent == other.offset_to_transform_parent &&
|
| + should_flatten == other.should_flatten &&
|
| + transform_id == other.transform_id;
|
| }
|
|
|
| void ScrollNodeData::ToProtobuf(proto::TreeNode* proto) const {
|
| @@ -509,6 +515,10 @@ void ScrollNodeData::ToProtobuf(proto::TreeNode* proto) const {
|
| max_scroll_offset_affected_by_page_scale);
|
| data->set_is_inner_viewport_scroll_layer(is_inner_viewport_scroll_layer);
|
| data->set_is_outer_viewport_scroll_layer(is_outer_viewport_scroll_layer);
|
| + Vector2dFToProto(offset_to_transform_parent,
|
| + data->mutable_offset_to_transform_parent());
|
| + data->set_should_flatten(should_flatten);
|
| + data->set_transform_id(transform_id);
|
| }
|
|
|
| void ScrollNodeData::FromProtobuf(const proto::TreeNode& proto) {
|
| @@ -525,6 +535,10 @@ void ScrollNodeData::FromProtobuf(const proto::TreeNode& proto) {
|
| data.max_scroll_offset_affected_by_page_scale();
|
| is_inner_viewport_scroll_layer = data.is_inner_viewport_scroll_layer();
|
| is_outer_viewport_scroll_layer = data.is_outer_viewport_scroll_layer();
|
| + offset_to_transform_parent =
|
| + ProtoToVector2dF(data.offset_to_transform_parent());
|
| + should_flatten = data.should_flatten();
|
| + transform_id = data.transform_id();
|
| }
|
|
|
| void TransformTree::clear() {
|
| @@ -1278,6 +1292,19 @@ gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const {
|
| return max_offset;
|
| }
|
|
|
| +gfx::Transform ScrollTree::ScreenSpaceTransform(int scroll_node_id) const {
|
| + const ScrollNode* scroll_node = Node(scroll_node_id);
|
| + const TransformNode* transform_node =
|
| + property_trees()->transform_tree.Node(scroll_node->data.transform_id);
|
| + gfx::Transform screen_space_transform(
|
| + 1, 0, 0, 1, scroll_node->data.offset_to_transform_parent.x(),
|
| + scroll_node->data.offset_to_transform_parent.y());
|
| + screen_space_transform.ConcatTransform(transform_node->data.to_screen);
|
| + if (scroll_node->data.should_flatten)
|
| + screen_space_transform.FlattenTo2d();
|
| + return screen_space_transform;
|
| +}
|
| +
|
| PropertyTrees::PropertyTrees()
|
| : needs_rebuild(true), non_root_surfaces_enabled(true), sequence_number(0) {
|
| transform_tree.SetPropertyTrees(this);
|
|
|