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

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

Issue 2194833002: Overscroll and Elasticity for views::ScrollView Base URL: https://chromium.googlesource.com/chromium/src.git@20160728-MacViews-RouteThroughInputHandler
Patch Set: Restore functionality and fix bugs \o/ Created 4 years, 1 month 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 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 // Stores copy requests, keyed by node id. 390 // Stores copy requests, keyed by node id.
391 std::unordered_multimap<int, std::unique_ptr<CopyOutputRequest>> 391 std::unordered_multimap<int, std::unique_ptr<CopyOutputRequest>>
392 copy_requests_; 392 copy_requests_;
393 393
394 // Unsorted list of all mask layer ids that effect nodes refer to. 394 // Unsorted list of all mask layer ids that effect nodes refer to.
395 std::vector<int> mask_layer_ids_; 395 std::vector<int> mask_layer_ids_;
396 }; 396 };
397 397
398 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { 398 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> {
399 public: 399 public:
400 struct ScrollWithOverscroll;
401
400 ScrollTree(); 402 ScrollTree();
401 ~ScrollTree(); 403 ~ScrollTree();
402 404
403 ScrollTree& operator=(const ScrollTree& from); 405 ScrollTree& operator=(const ScrollTree& from);
404 bool operator==(const ScrollTree& other) const; 406 bool operator==(const ScrollTree& other) const;
405 407
406 void ToProtobuf(proto::PropertyTree* proto) const; 408 void ToProtobuf(proto::PropertyTree* proto) const;
407 void FromProtobuf(const proto::PropertyTree& proto, 409 void FromProtobuf(const proto::PropertyTree& proto,
408 std::unordered_map<int, int>* node_id_to_index_map); 410 std::unordered_map<int, int>* node_id_to_index_map);
409 411
410 void clear(); 412 void clear();
411 413
412 typedef std::unordered_map<int, scoped_refptr<SyncedScrollOffset>> 414 typedef std::unordered_map<int, ScrollWithOverscroll> ScrollOffsetMap;
413 ScrollOffsetMap;
414 415
415 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const; 416 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const;
416 void OnScrollOffsetAnimated(int layer_id, 417 void OnScrollOffsetAnimated(int layer_id,
417 int transform_tree_index, 418 int transform_tree_index,
418 int scroll_tree_index, 419 int scroll_tree_index,
419 const gfx::ScrollOffset& scroll_offset, 420 const gfx::ScrollOffset& scroll_offset,
420 LayerTreeImpl* layer_tree_impl); 421 LayerTreeImpl* layer_tree_impl);
421 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const; 422 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const;
422 ScrollNode* CurrentlyScrollingNode(); 423 ScrollNode* CurrentlyScrollingNode();
423 const ScrollNode* CurrentlyScrollingNode() const; 424 const ScrollNode* CurrentlyScrollingNode() const;
424 #if DCHECK_IS_ON() 425 #if DCHECK_IS_ON()
425 int CurrentlyScrollingNodeId() const; 426 int CurrentlyScrollingNodeId() const;
426 #endif 427 #endif
427 void set_currently_scrolling_node(int scroll_node_id); 428 void set_currently_scrolling_node(int scroll_node_id);
428 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const; 429 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const;
429 430
430 const gfx::ScrollOffset current_scroll_offset(int layer_id) const; 431 const gfx::ScrollOffset current_scroll_offset(int layer_id) const;
432 const gfx::ScrollOffset current_overscroll(int layer_id) const;
431 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, 433 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info,
432 int inner_viewport_layer_id); 434 int inner_viewport_layer_id);
433 void UpdateScrollOffsetMap(ScrollOffsetMap* new_scroll_offset_map, 435 void UpdateScrollOffsetMap(ScrollTree* scroll_tree,
434 LayerTreeImpl* layer_tree_impl); 436 LayerTreeImpl* layer_tree_impl);
435 ScrollOffsetMap& scroll_offset_map(); 437 const ScrollOffsetMap& scroll_offset_map_for_test() const;
436 const ScrollOffsetMap& scroll_offset_map() const;
437 void ApplySentScrollDeltasFromAbortedCommit(); 438 void ApplySentScrollDeltasFromAbortedCommit();
438 bool SetBaseScrollOffset(int layer_id, 439 void SetBaseScrollOffset(int layer_id,
439 const gfx::ScrollOffset& scroll_offset); 440 const gfx::ScrollOffset& scroll_offset,
440 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset); 441 const gfx::ScrollOffset& overscroll);
441 void SetScrollOffsetClobberActiveValue(int layer_id) { 442 bool SetScrollOffset(int layer_id,
442 synced_scroll_offset(layer_id)->set_clobber_active_value(); 443 const gfx::ScrollOffset& scroll_offset,
444 const gfx::ScrollOffset& overscroll);
445
446 // TODO(tapted): Remove this overload (used by TreeSynchronizerTest).
447 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset) {
448 return SetScrollOffset(layer_id, scroll_offset, gfx::ScrollOffset());
443 } 449 }
450
451 void SetScrollOffsetClobberActiveValue(int layer_id);
444 bool UpdateScrollOffsetBaseForTesting(int layer_id, 452 bool UpdateScrollOffsetBaseForTesting(int layer_id,
445 const gfx::ScrollOffset& offset); 453 const gfx::ScrollOffset& offset);
446 bool SetScrollOffsetDeltaForTesting(int layer_id, 454 bool SetScrollOffsetDeltaForTesting(int layer_id,
447 const gfx::Vector2dF& delta); 455 const gfx::Vector2dF& delta);
448 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const; 456 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const;
449 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const; 457 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const;
450 void CollectScrollDeltasForTesting(); 458 void CollectScrollDeltasForTesting();
451 459
452 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state); 460 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state);
453 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node, 461 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node,
454 const gfx::Vector2dF& scroll, 462 const gfx::Vector2dF& scroll,
455 LayerTreeImpl* layer_tree_impl); 463 LayerTreeImpl* layer_tree_impl);
456 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset, 464 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset,
457 ScrollNode* scroll_node) const; 465 ScrollNode* scroll_node) const;
458 466
459 private: 467 private:
460 int currently_scrolling_node_id_; 468 int currently_scrolling_node_id_;
461 ScrollOffsetMap layer_id_to_scroll_offset_map_; 469 ScrollOffsetMap layer_id_to_scroll_offset_map_;
462 470
471 ScrollWithOverscroll* GetOrCreate(int layer_id);
472 const ScrollWithOverscroll* GetOrNull(int layer_id) const;
463 SyncedScrollOffset* synced_scroll_offset(int layer_id); 473 SyncedScrollOffset* synced_scroll_offset(int layer_id);
464 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const; 474 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const;
475
465 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset); 476 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset);
466 void UpdateScrollOffsetMapEntry(int key, 477 void UpdateScrollOffsetMapEntry(int key,
467 ScrollOffsetMap* new_scroll_offset_map, 478 ScrollOffsetMap* new_scroll_offset_map,
468 LayerTreeImpl* layer_tree_impl); 479 LayerTreeImpl* layer_tree_impl);
469 }; 480 };
470 481
482 // Required in the header for TreeSynchronizerTest.
483 struct ScrollTree::ScrollWithOverscroll {
484 scoped_refptr<SyncedScrollOffset> synced_offset;
485 gfx::ScrollOffset overscroll;
486
487 // Hide the copy constructor to prevent inefficient map iterations, but then
488 // the map needs a move constructor to insert items.
489 ScrollWithOverscroll();
490 ScrollWithOverscroll(const ScrollWithOverscroll& rhs) = delete;
491 ScrollWithOverscroll(ScrollWithOverscroll&& rhs);
492 ~ScrollWithOverscroll();
493
494 bool operator==(const ScrollWithOverscroll& rhs) const {
495 return synced_offset == rhs.synced_offset && overscroll == rhs.overscroll;
496 }
497 bool operator!=(const ScrollWithOverscroll& rhs) const {
498 return !operator==(rhs);
499 }
500 };
501
471 struct AnimationScaleData { 502 struct AnimationScaleData {
472 // Variable used to invalidate cached animation scale data when transform tree 503 // Variable used to invalidate cached animation scale data when transform tree
473 // updates. 504 // updates.
474 int update_number; 505 int update_number;
475 506
476 // Current animations, considering only scales at keyframes not including the 507 // Current animations, considering only scales at keyframes not including the
477 // starting keyframe of each animation. 508 // starting keyframe of each animation.
478 float local_maximum_animation_target_scale; 509 float local_maximum_animation_target_scale;
479 510
480 // The maximum scale that this node's |local| transform will have during 511 // The maximum scale that this node's |local| transform will have during
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 DrawTransforms& GetDrawTransforms(int transform_id, int effect_id) const; 691 DrawTransforms& GetDrawTransforms(int transform_id, int effect_id) const;
661 DrawTransformData& FetchDrawTransformsDataFromCache(int transform_id, 692 DrawTransformData& FetchDrawTransformsDataFromCache(int transform_id,
662 int effect_id) const; 693 int effect_id) const;
663 694
664 PropertyTreesCachedData cached_data_; 695 PropertyTreesCachedData cached_data_;
665 }; 696 };
666 697
667 } // namespace cc 698 } // namespace cc
668 699
669 #endif // CC_TREES_PROPERTY_TREE_H_ 700 #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