OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 clip_id = data.clip_id(); | 472 clip_id = data.clip_id(); |
473 } | 473 } |
474 | 474 |
475 ScrollNodeData::ScrollNodeData() | 475 ScrollNodeData::ScrollNodeData() |
476 : scrollable(false), | 476 : scrollable(false), |
477 main_thread_scrolling_reasons( | 477 main_thread_scrolling_reasons( |
478 MainThreadScrollingReason::kNotScrollingOnMain), | 478 MainThreadScrollingReason::kNotScrollingOnMain), |
479 contains_non_fast_scrollable_region(false), | 479 contains_non_fast_scrollable_region(false), |
480 max_scroll_offset_affected_by_page_scale(false), | 480 max_scroll_offset_affected_by_page_scale(false), |
481 is_inner_viewport_scroll_layer(false), | 481 is_inner_viewport_scroll_layer(false), |
482 is_outer_viewport_scroll_layer(false) {} | 482 is_outer_viewport_scroll_layer(false), |
| 483 should_flatten(false), |
| 484 transform_id(0) {} |
483 | 485 |
484 bool ScrollNodeData::operator==(const ScrollNodeData& other) const { | 486 bool ScrollNodeData::operator==(const ScrollNodeData& other) const { |
485 return scrollable == other.scrollable && | 487 return scrollable == other.scrollable && |
486 main_thread_scrolling_reasons == other.main_thread_scrolling_reasons && | 488 main_thread_scrolling_reasons == other.main_thread_scrolling_reasons && |
487 contains_non_fast_scrollable_region == | 489 contains_non_fast_scrollable_region == |
488 other.contains_non_fast_scrollable_region && | 490 other.contains_non_fast_scrollable_region && |
489 scroll_clip_layer_bounds == other.scroll_clip_layer_bounds && | 491 scroll_clip_layer_bounds == other.scroll_clip_layer_bounds && |
490 bounds == other.bounds && | 492 bounds == other.bounds && |
491 max_scroll_offset_affected_by_page_scale == | 493 max_scroll_offset_affected_by_page_scale == |
492 other.max_scroll_offset_affected_by_page_scale && | 494 other.max_scroll_offset_affected_by_page_scale && |
493 is_inner_viewport_scroll_layer == | 495 is_inner_viewport_scroll_layer == |
494 other.is_inner_viewport_scroll_layer && | 496 other.is_inner_viewport_scroll_layer && |
495 is_outer_viewport_scroll_layer == other.is_outer_viewport_scroll_layer; | 497 is_outer_viewport_scroll_layer == |
| 498 other.is_outer_viewport_scroll_layer && |
| 499 offset_to_transform_parent == other.offset_to_transform_parent && |
| 500 should_flatten == other.should_flatten && |
| 501 transform_id == other.transform_id; |
496 } | 502 } |
497 | 503 |
498 void ScrollNodeData::ToProtobuf(proto::TreeNode* proto) const { | 504 void ScrollNodeData::ToProtobuf(proto::TreeNode* proto) const { |
499 DCHECK(!proto->has_scroll_node_data()); | 505 DCHECK(!proto->has_scroll_node_data()); |
500 proto::ScrollNodeData* data = proto->mutable_scroll_node_data(); | 506 proto::ScrollNodeData* data = proto->mutable_scroll_node_data(); |
501 data->set_scrollable(scrollable); | 507 data->set_scrollable(scrollable); |
502 data->set_main_thread_scrolling_reasons(main_thread_scrolling_reasons); | 508 data->set_main_thread_scrolling_reasons(main_thread_scrolling_reasons); |
503 data->set_contains_non_fast_scrollable_region( | 509 data->set_contains_non_fast_scrollable_region( |
504 contains_non_fast_scrollable_region); | 510 contains_non_fast_scrollable_region); |
505 SizeToProto(scroll_clip_layer_bounds, | 511 SizeToProto(scroll_clip_layer_bounds, |
506 data->mutable_scroll_clip_layer_bounds()); | 512 data->mutable_scroll_clip_layer_bounds()); |
507 SizeToProto(bounds, data->mutable_bounds()); | 513 SizeToProto(bounds, data->mutable_bounds()); |
508 data->set_max_scroll_offset_affected_by_page_scale( | 514 data->set_max_scroll_offset_affected_by_page_scale( |
509 max_scroll_offset_affected_by_page_scale); | 515 max_scroll_offset_affected_by_page_scale); |
510 data->set_is_inner_viewport_scroll_layer(is_inner_viewport_scroll_layer); | 516 data->set_is_inner_viewport_scroll_layer(is_inner_viewport_scroll_layer); |
511 data->set_is_outer_viewport_scroll_layer(is_outer_viewport_scroll_layer); | 517 data->set_is_outer_viewport_scroll_layer(is_outer_viewport_scroll_layer); |
| 518 Vector2dFToProto(offset_to_transform_parent, |
| 519 data->mutable_offset_to_transform_parent()); |
| 520 data->set_should_flatten(should_flatten); |
| 521 data->set_transform_id(transform_id); |
512 } | 522 } |
513 | 523 |
514 void ScrollNodeData::FromProtobuf(const proto::TreeNode& proto) { | 524 void ScrollNodeData::FromProtobuf(const proto::TreeNode& proto) { |
515 DCHECK(proto.has_scroll_node_data()); | 525 DCHECK(proto.has_scroll_node_data()); |
516 const proto::ScrollNodeData& data = proto.scroll_node_data(); | 526 const proto::ScrollNodeData& data = proto.scroll_node_data(); |
517 | 527 |
518 scrollable = data.scrollable(); | 528 scrollable = data.scrollable(); |
519 main_thread_scrolling_reasons = data.main_thread_scrolling_reasons(); | 529 main_thread_scrolling_reasons = data.main_thread_scrolling_reasons(); |
520 contains_non_fast_scrollable_region = | 530 contains_non_fast_scrollable_region = |
521 data.contains_non_fast_scrollable_region(); | 531 data.contains_non_fast_scrollable_region(); |
522 scroll_clip_layer_bounds = ProtoToSize(data.scroll_clip_layer_bounds()); | 532 scroll_clip_layer_bounds = ProtoToSize(data.scroll_clip_layer_bounds()); |
523 bounds = ProtoToSize(data.bounds()); | 533 bounds = ProtoToSize(data.bounds()); |
524 max_scroll_offset_affected_by_page_scale = | 534 max_scroll_offset_affected_by_page_scale = |
525 data.max_scroll_offset_affected_by_page_scale(); | 535 data.max_scroll_offset_affected_by_page_scale(); |
526 is_inner_viewport_scroll_layer = data.is_inner_viewport_scroll_layer(); | 536 is_inner_viewport_scroll_layer = data.is_inner_viewport_scroll_layer(); |
527 is_outer_viewport_scroll_layer = data.is_outer_viewport_scroll_layer(); | 537 is_outer_viewport_scroll_layer = data.is_outer_viewport_scroll_layer(); |
| 538 offset_to_transform_parent = |
| 539 ProtoToVector2dF(data.offset_to_transform_parent()); |
| 540 should_flatten = data.should_flatten(); |
| 541 transform_id = data.transform_id(); |
528 } | 542 } |
529 | 543 |
530 void TransformTree::clear() { | 544 void TransformTree::clear() { |
531 PropertyTree<TransformNode>::clear(); | 545 PropertyTree<TransformNode>::clear(); |
532 | 546 |
533 nodes_affected_by_inner_viewport_bounds_delta_.clear(); | 547 nodes_affected_by_inner_viewport_bounds_delta_.clear(); |
534 nodes_affected_by_outer_viewport_bounds_delta_.clear(); | 548 nodes_affected_by_outer_viewport_bounds_delta_.clear(); |
535 } | 549 } |
536 | 550 |
537 bool TransformTree::ComputeTransform(int source_id, | 551 bool TransformTree::ComputeTransform(int source_id, |
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1271 | 1285 |
1272 gfx::ScrollOffset max_offset( | 1286 gfx::ScrollOffset max_offset( |
1273 scaled_scroll_bounds.width() - scroll_clip_layer_bounds.width(), | 1287 scaled_scroll_bounds.width() - scroll_clip_layer_bounds.width(), |
1274 scaled_scroll_bounds.height() - scroll_clip_layer_bounds.height()); | 1288 scaled_scroll_bounds.height() - scroll_clip_layer_bounds.height()); |
1275 | 1289 |
1276 max_offset.Scale(1 / scale_factor); | 1290 max_offset.Scale(1 / scale_factor); |
1277 max_offset.SetToMax(gfx::ScrollOffset()); | 1291 max_offset.SetToMax(gfx::ScrollOffset()); |
1278 return max_offset; | 1292 return max_offset; |
1279 } | 1293 } |
1280 | 1294 |
| 1295 gfx::Transform ScrollTree::ScreenSpaceTransform(int scroll_node_id) const { |
| 1296 const ScrollNode* scroll_node = Node(scroll_node_id); |
| 1297 const TransformNode* transform_node = |
| 1298 property_trees()->transform_tree.Node(scroll_node->data.transform_id); |
| 1299 gfx::Transform screen_space_transform( |
| 1300 1, 0, 0, 1, scroll_node->data.offset_to_transform_parent.x(), |
| 1301 scroll_node->data.offset_to_transform_parent.y()); |
| 1302 screen_space_transform.ConcatTransform(transform_node->data.to_screen); |
| 1303 if (scroll_node->data.should_flatten) |
| 1304 screen_space_transform.FlattenTo2d(); |
| 1305 return screen_space_transform; |
| 1306 } |
| 1307 |
1281 PropertyTrees::PropertyTrees() | 1308 PropertyTrees::PropertyTrees() |
1282 : needs_rebuild(true), non_root_surfaces_enabled(true), sequence_number(0) { | 1309 : needs_rebuild(true), non_root_surfaces_enabled(true), sequence_number(0) { |
1283 transform_tree.SetPropertyTrees(this); | 1310 transform_tree.SetPropertyTrees(this); |
1284 effect_tree.SetPropertyTrees(this); | 1311 effect_tree.SetPropertyTrees(this); |
1285 clip_tree.SetPropertyTrees(this); | 1312 clip_tree.SetPropertyTrees(this); |
1286 scroll_tree.SetPropertyTrees(this); | 1313 scroll_tree.SetPropertyTrees(this); |
1287 } | 1314 } |
1288 | 1315 |
1289 PropertyTrees::~PropertyTrees() {} | 1316 PropertyTrees::~PropertyTrees() {} |
1290 | 1317 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1367 outer_viewport_container_bounds_delta_ = bounds_delta; | 1394 outer_viewport_container_bounds_delta_ = bounds_delta; |
1368 transform_tree.UpdateOuterViewportContainerBoundsDelta(); | 1395 transform_tree.UpdateOuterViewportContainerBoundsDelta(); |
1369 } | 1396 } |
1370 | 1397 |
1371 void PropertyTrees::SetInnerViewportScrollBoundsDelta( | 1398 void PropertyTrees::SetInnerViewportScrollBoundsDelta( |
1372 gfx::Vector2dF bounds_delta) { | 1399 gfx::Vector2dF bounds_delta) { |
1373 inner_viewport_scroll_bounds_delta_ = bounds_delta; | 1400 inner_viewport_scroll_bounds_delta_ = bounds_delta; |
1374 } | 1401 } |
1375 | 1402 |
1376 } // namespace cc | 1403 } // namespace cc |
OLD | NEW |