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

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: Combined rebase Created 4 years, 4 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
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 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 std::unordered_multimap<int, std::unique_ptr<CopyOutputRequest>> 358 std::unordered_multimap<int, std::unique_ptr<CopyOutputRequest>>
359 copy_requests_; 359 copy_requests_;
360 360
361 // Unsorted list of all mask, replica, and replica mask layer ids that 361 // Unsorted list of all mask, replica, and replica mask layer ids that
362 // effect nodes refer to. 362 // effect nodes refer to.
363 std::vector<int> mask_replica_layer_ids_; 363 std::vector<int> mask_replica_layer_ids_;
364 }; 364 };
365 365
366 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { 366 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> {
367 public: 367 public:
368 struct ScrollWithOverscroll;
369
368 ScrollTree(); 370 ScrollTree();
369 ~ScrollTree(); 371 ~ScrollTree();
370 372
371 ScrollTree& operator=(const ScrollTree& from); 373 ScrollTree& operator=(const ScrollTree& from);
372 bool operator==(const ScrollTree& other) const; 374 bool operator==(const ScrollTree& other) const;
373 375
374 void ToProtobuf(proto::PropertyTree* proto) const; 376 void ToProtobuf(proto::PropertyTree* proto) const;
375 void FromProtobuf(const proto::PropertyTree& proto, 377 void FromProtobuf(const proto::PropertyTree& proto,
376 std::unordered_map<int, int>* node_id_to_index_map); 378 std::unordered_map<int, int>* node_id_to_index_map);
377 379
378 void clear(); 380 void clear();
379 381
380 typedef std::unordered_map<int, scoped_refptr<SyncedScrollOffset>> 382 typedef std::unordered_map<int, ScrollWithOverscroll> ScrollOffsetMap;
381 ScrollOffsetMap;
382 383
383 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const; 384 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const;
384 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const; 385 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const;
385 ScrollNode* CurrentlyScrollingNode(); 386 ScrollNode* CurrentlyScrollingNode();
386 const ScrollNode* CurrentlyScrollingNode() const; 387 const ScrollNode* CurrentlyScrollingNode() const;
387 void set_currently_scrolling_node(int scroll_node_id); 388 void set_currently_scrolling_node(int scroll_node_id);
388 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const; 389 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const;
389 390
390 const gfx::ScrollOffset current_scroll_offset(int layer_id) const; 391 const gfx::ScrollOffset current_scroll_offset(int layer_id) const;
392 const gfx::ScrollOffset current_overscroll(int layer_id) const;
391 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, 393 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info,
392 int inner_viewport_layer_id); 394 int inner_viewport_layer_id);
393 void UpdateScrollOffsetMap(ScrollOffsetMap* new_scroll_offset_map, 395 void UpdateScrollOffsetMap(ScrollTree* scroll_tree,
394 LayerTreeImpl* layer_tree_impl); 396 LayerTreeImpl* layer_tree_impl);
395 ScrollOffsetMap& scroll_offset_map(); 397 const ScrollOffsetMap& scroll_offset_map_for_test() const;
396 const ScrollOffsetMap& scroll_offset_map() const;
397 void ApplySentScrollDeltasFromAbortedCommit(); 398 void ApplySentScrollDeltasFromAbortedCommit();
398 bool SetBaseScrollOffset(int layer_id, 399 void SetBaseScrollOffset(int layer_id,
399 const gfx::ScrollOffset& scroll_offset); 400 const gfx::ScrollOffset& scroll_offset,
400 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset); 401 const gfx::ScrollOffset& overscroll);
401 void SetScrollOffsetClobberActiveValue(int layer_id) { 402 bool SetScrollOffset(int layer_id,
402 synced_scroll_offset(layer_id)->set_clobber_active_value(); 403 const gfx::ScrollOffset& scroll_offset,
404 const gfx::ScrollOffset& overscroll);
405
406 // TODO(tapted): Remove this overload (used by TreeSynchronizerTest).
407 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset) {
408 return SetScrollOffset(layer_id, scroll_offset, gfx::ScrollOffset());
403 } 409 }
410
411 void SetScrollOffsetClobberActiveValue(int layer_id);
404 bool UpdateScrollOffsetBaseForTesting(int layer_id, 412 bool UpdateScrollOffsetBaseForTesting(int layer_id,
405 const gfx::ScrollOffset& offset); 413 const gfx::ScrollOffset& offset);
406 bool SetScrollOffsetDeltaForTesting(int layer_id, 414 bool SetScrollOffsetDeltaForTesting(int layer_id,
407 const gfx::Vector2dF& delta); 415 const gfx::Vector2dF& delta);
408 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const; 416 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const;
409 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const; 417 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const;
410 void CollectScrollDeltasForTesting(); 418 void CollectScrollDeltasForTesting();
411 419
412 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state); 420 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state);
413 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node, 421 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node,
414 const gfx::Vector2dF& scroll, 422 const gfx::Vector2dF& scroll,
415 LayerTreeImpl* layer_tree_impl); 423 LayerTreeImpl* layer_tree_impl);
416 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset, 424 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset,
417 ScrollNode* scroll_node) const; 425 ScrollNode* scroll_node) const;
418 426
419 private: 427 private:
420 int currently_scrolling_node_id_; 428 int currently_scrolling_node_id_;
421 ScrollOffsetMap layer_id_to_scroll_offset_map_; 429 ScrollOffsetMap layer_id_to_scroll_offset_map_;
422 430
431 ScrollWithOverscroll* GetOrCreate(int layer_id);
432 const ScrollWithOverscroll* GetOrNull(int layer_id) const;
423 SyncedScrollOffset* synced_scroll_offset(int layer_id); 433 SyncedScrollOffset* synced_scroll_offset(int layer_id);
424 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const; 434 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const;
435
425 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset); 436 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset);
426 void UpdateScrollOffsetMapEntry(int key, 437 void UpdateScrollOffsetMapEntry(int key,
427 ScrollOffsetMap* new_scroll_offset_map, 438 ScrollOffsetMap* new_scroll_offset_map,
428 LayerTreeImpl* layer_tree_impl); 439 LayerTreeImpl* layer_tree_impl);
429 }; 440 };
430 441
442 // Required in the header for TreeSynchronizerTest.
443 struct ScrollTree::ScrollWithOverscroll {
444 scoped_refptr<SyncedScrollOffset> synced_offset;
445 gfx::ScrollOffset overscroll;
446
447 // Hide the copy constructor to prevent inefficient map iterations, but then
448 // the map needs a move constructor to insert items.
449 ScrollWithOverscroll();
450 ScrollWithOverscroll(const ScrollWithOverscroll& rhs) = delete;
451 ScrollWithOverscroll(ScrollWithOverscroll&& rhs);
452 ~ScrollWithOverscroll();
453
454 bool operator==(const ScrollWithOverscroll& rhs) const {
455 return synced_offset == rhs.synced_offset && overscroll == rhs.overscroll;
456 }
457 bool operator!=(const ScrollWithOverscroll& rhs) const {
458 return !operator==(rhs);
459 }
460 };
461
431 struct AnimationScaleData { 462 struct AnimationScaleData {
432 // Variable used to invalidate cached animation scale data when transform tree 463 // Variable used to invalidate cached animation scale data when transform tree
433 // updates. 464 // updates.
434 int update_number; 465 int update_number;
435 466
436 // Current animations, considering only scales at keyframes not including the 467 // Current animations, considering only scales at keyframes not including the
437 // starting keyframe of each animation. 468 // starting keyframe of each animation.
438 float local_maximum_animation_target_scale; 469 float local_maximum_animation_target_scale;
439 470
440 // The maximum scale that this node's |local| transform will have during 471 // The maximum scale that this node's |local| transform will have during
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 gfx::Vector2dF inner_viewport_container_bounds_delta_; 626 gfx::Vector2dF inner_viewport_container_bounds_delta_;
596 gfx::Vector2dF outer_viewport_container_bounds_delta_; 627 gfx::Vector2dF outer_viewport_container_bounds_delta_;
597 gfx::Vector2dF inner_viewport_scroll_bounds_delta_; 628 gfx::Vector2dF inner_viewport_scroll_bounds_delta_;
598 629
599 PropertyTreesCachedData cached_data_; 630 PropertyTreesCachedData cached_data_;
600 }; 631 };
601 632
602 } // namespace cc 633 } // namespace cc
603 634
604 #endif // CC_TREES_PROPERTY_TREE_H_ 635 #endif // CC_TREES_PROPERTY_TREE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698