Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: cc/trees/property_tree.h

Issue 2189583004: [not for review - epic CL] Adding Elastic+Momentum+Layered scrolling to views::ScrollView Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_impl.cc ('k') | cc/trees/property_tree.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef CC_TREES_PROPERTY_TREE_H_ 5 #ifndef CC_TREES_PROPERTY_TREE_H_
6 #define CC_TREES_PROPERTY_TREE_H_ 6 #define CC_TREES_PROPERTY_TREE_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 // Stores copy requests, keyed by node id. 392 // Stores copy requests, keyed by node id.
393 std::unordered_multimap<int, std::unique_ptr<CopyOutputRequest>> 393 std::unordered_multimap<int, std::unique_ptr<CopyOutputRequest>>
394 copy_requests_; 394 copy_requests_;
395 395
396 // Unsorted list of all mask layer ids that effect nodes refer to. 396 // Unsorted list of all mask layer ids that effect nodes refer to.
397 std::vector<int> mask_layer_ids_; 397 std::vector<int> mask_layer_ids_;
398 }; 398 };
399 399
400 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { 400 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> {
401 public: 401 public:
402 struct ScrollWithOverscroll;
403
402 ScrollTree(); 404 ScrollTree();
403 ~ScrollTree(); 405 ~ScrollTree();
404 406
405 ScrollTree& operator=(const ScrollTree& from); 407 ScrollTree& operator=(const ScrollTree& from);
406 bool operator==(const ScrollTree& other) const; 408 bool operator==(const ScrollTree& other) const;
407 409
408 void ToProtobuf(proto::PropertyTree* proto) const; 410 void ToProtobuf(proto::PropertyTree* proto) const;
409 void FromProtobuf(const proto::PropertyTree& proto, 411 void FromProtobuf(const proto::PropertyTree& proto,
410 std::unordered_map<int, int>* node_id_to_index_map); 412 std::unordered_map<int, int>* node_id_to_index_map);
411 413
412 void clear(); 414 void clear();
413 415
414 typedef std::unordered_map<int, scoped_refptr<SyncedScrollOffset>> 416 typedef std::unordered_map<int, ScrollWithOverscroll> ScrollOffsetMap;
415 ScrollOffsetMap;
416 417
417 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const; 418 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const;
418 void OnScrollOffsetAnimated(int layer_id, 419 void OnScrollOffsetAnimated(int layer_id,
419 int transform_tree_index, 420 int transform_tree_index,
420 int scroll_tree_index, 421 int scroll_tree_index,
421 const gfx::ScrollOffset& scroll_offset, 422 const gfx::ScrollOffset& scroll_offset,
422 LayerTreeImpl* layer_tree_impl); 423 LayerTreeImpl* layer_tree_impl);
423 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const; 424 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const;
424 ScrollNode* CurrentlyScrollingNode(); 425 ScrollNode* CurrentlyScrollingNode();
425 const ScrollNode* CurrentlyScrollingNode() const; 426 const ScrollNode* CurrentlyScrollingNode() const;
426 #if DCHECK_IS_ON() 427 #if DCHECK_IS_ON()
427 int CurrentlyScrollingNodeId() const; 428 int CurrentlyScrollingNodeId() const;
428 #endif 429 #endif
429 void set_currently_scrolling_node(int scroll_node_id); 430 void set_currently_scrolling_node(int scroll_node_id);
430 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const; 431 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const;
431 432
432 const gfx::ScrollOffset current_scroll_offset(int layer_id) const; 433 const gfx::ScrollOffset current_scroll_offset(int layer_id) const;
434 const gfx::ScrollOffset current_overscroll(int layer_id) const;
433 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, 435 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info,
434 int inner_viewport_layer_id); 436 int inner_viewport_layer_id);
435 void UpdateScrollOffsetMap(ScrollOffsetMap* new_scroll_offset_map, 437 void UpdateScrollOffsetMap(ScrollTree* scroll_tree,
436 LayerTreeImpl* layer_tree_impl); 438 LayerTreeImpl* layer_tree_impl);
437 ScrollOffsetMap& scroll_offset_map(); 439 const ScrollOffsetMap& scroll_offset_map_for_test() const;
438 const ScrollOffsetMap& scroll_offset_map() const;
439 void ApplySentScrollDeltasFromAbortedCommit(); 440 void ApplySentScrollDeltasFromAbortedCommit();
440 bool SetBaseScrollOffset(int layer_id, 441 void SetBaseScrollOffset(int layer_id,
441 const gfx::ScrollOffset& scroll_offset); 442 const gfx::ScrollOffset& scroll_offset,
442 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset); 443 const gfx::ScrollOffset& overscroll);
443 void SetScrollOffsetClobberActiveValue(int layer_id) { 444 bool SetScrollOffset(int layer_id,
444 synced_scroll_offset(layer_id)->set_clobber_active_value(); 445 const gfx::ScrollOffset& scroll_offset,
446 const gfx::ScrollOffset& overscroll);
447
448 // TODO(tapted): Remove this overload (used by TreeSynchronizerTest).
449 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset) {
450 return SetScrollOffset(layer_id, scroll_offset, gfx::ScrollOffset());
445 } 451 }
452
453 void SetScrollOffsetClobberActiveValue(int layer_id);
446 bool UpdateScrollOffsetBaseForTesting(int layer_id, 454 bool UpdateScrollOffsetBaseForTesting(int layer_id,
447 const gfx::ScrollOffset& offset); 455 const gfx::ScrollOffset& offset);
448 bool SetScrollOffsetDeltaForTesting(int layer_id, 456 bool SetScrollOffsetDeltaForTesting(int layer_id,
449 const gfx::Vector2dF& delta); 457 const gfx::Vector2dF& delta);
450 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const; 458 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const;
451 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const; 459 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const;
452 void CollectScrollDeltasForTesting(); 460 void CollectScrollDeltasForTesting();
453 461
454 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state); 462 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state);
455 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node, 463 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node,
456 const gfx::Vector2dF& scroll, 464 const gfx::Vector2dF& scroll,
457 LayerTreeImpl* layer_tree_impl); 465 LayerTreeImpl* layer_tree_impl);
458 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset, 466 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset,
459 ScrollNode* scroll_node) const; 467 ScrollNode* scroll_node) const;
460 468
461 private: 469 private:
462 int currently_scrolling_node_id_; 470 int currently_scrolling_node_id_;
463 ScrollOffsetMap layer_id_to_scroll_offset_map_; 471 ScrollOffsetMap layer_id_to_scroll_offset_map_;
464 472
473 ScrollWithOverscroll* GetOrCreate(int layer_id);
474 const ScrollWithOverscroll* GetOrNull(int layer_id) const;
465 SyncedScrollOffset* synced_scroll_offset(int layer_id); 475 SyncedScrollOffset* synced_scroll_offset(int layer_id);
466 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const; 476 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const;
477
467 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset); 478 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset);
468 void UpdateScrollOffsetMapEntry(int key, 479 void UpdateScrollOffsetMapEntry(int key,
469 ScrollOffsetMap* new_scroll_offset_map, 480 ScrollOffsetMap* new_scroll_offset_map,
470 LayerTreeImpl* layer_tree_impl); 481 LayerTreeImpl* layer_tree_impl);
471 }; 482 };
472 483
484 // Required in the header for TreeSynchronizerTest.
485 struct ScrollTree::ScrollWithOverscroll {
486 scoped_refptr<SyncedScrollOffset> synced_offset;
487 gfx::ScrollOffset overscroll;
488
489 // Hide the copy constructor to prevent inefficient map iterations, but then
490 // the map needs a move constructor to insert items.
491 ScrollWithOverscroll();
492 ScrollWithOverscroll(const ScrollWithOverscroll& rhs) = delete;
493 ScrollWithOverscroll(ScrollWithOverscroll&& rhs);
494 ~ScrollWithOverscroll();
495
496 bool operator==(const ScrollWithOverscroll& rhs) const {
497 return synced_offset == rhs.synced_offset && overscroll == rhs.overscroll;
498 }
499 bool operator!=(const ScrollWithOverscroll& rhs) const {
500 return !operator==(rhs);
501 }
502 };
503
473 struct AnimationScaleData { 504 struct AnimationScaleData {
474 // Variable used to invalidate cached animation scale data when transform tree 505 // Variable used to invalidate cached animation scale data when transform tree
475 // updates. 506 // updates.
476 int update_number; 507 int update_number;
477 508
478 // Current animations, considering only scales at keyframes not including the 509 // Current animations, considering only scales at keyframes not including the
479 // starting keyframe of each animation. 510 // starting keyframe of each animation.
480 float local_maximum_animation_target_scale; 511 float local_maximum_animation_target_scale;
481 512
482 // The maximum scale that this node's |local| transform will have during 513 // The maximum scale that this node's |local| transform will have during
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 gfx::Vector2dF inner_viewport_container_bounds_delta_; 674 gfx::Vector2dF inner_viewport_container_bounds_delta_;
644 gfx::Vector2dF outer_viewport_container_bounds_delta_; 675 gfx::Vector2dF outer_viewport_container_bounds_delta_;
645 gfx::Vector2dF inner_viewport_scroll_bounds_delta_; 676 gfx::Vector2dF inner_viewport_scroll_bounds_delta_;
646 677
647 PropertyTreesCachedData cached_data_; 678 PropertyTreesCachedData cached_data_;
648 }; 679 };
649 680
650 } // namespace cc 681 } // namespace cc
651 682
652 #endif // CC_TREES_PROPERTY_TREE_H_ 683 #endif // CC_TREES_PROPERTY_TREE_H_
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_impl.cc ('k') | cc/trees/property_tree.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698