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

Side by Side Diff: cc/layers/layer.cc

Issue 212603017: Remove scroll distribution code from Layer/LayerTreeHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « cc/cc_tests.gyp ('k') | cc/trees/layer_tree_host.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 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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 "cc/layers/layer.h" 5 #include "cc/layers/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 void Layer::RemoveClipChild(Layer* child) { 667 void Layer::RemoveClipChild(Layer* child) {
668 clip_children_->erase(child); 668 clip_children_->erase(child);
669 if (clip_children_->empty()) 669 if (clip_children_->empty())
670 clip_children_.reset(); 670 clip_children_.reset();
671 SetNeedsCommit(); 671 SetNeedsCommit();
672 } 672 }
673 673
674 void Layer::SetScrollOffset(gfx::Vector2d scroll_offset) { 674 void Layer::SetScrollOffset(gfx::Vector2d scroll_offset) {
675 DCHECK(IsPropertyChangeAllowed()); 675 DCHECK(IsPropertyChangeAllowed());
676 676
677 if (layer_tree_host()) {
678 scroll_offset = layer_tree_host()->DistributeScrollOffsetToViewports(
679 scroll_offset, this);
680 }
681
682 if (scroll_offset_ == scroll_offset) 677 if (scroll_offset_ == scroll_offset)
683 return; 678 return;
684 scroll_offset_ = scroll_offset; 679 scroll_offset_ = scroll_offset;
685 SetNeedsCommit(); 680 SetNeedsCommit();
686 } 681 }
687 682
688 void Layer::SetScrollOffsetFromImplSide(const gfx::Vector2d& scroll_offset) { 683 void Layer::SetScrollOffsetFromImplSide(const gfx::Vector2d& scroll_offset) {
689 DCHECK(IsPropertyChangeAllowed()); 684 DCHECK(IsPropertyChangeAllowed());
690 // This function only gets called during a BeginMainFrame, so there 685 // This function only gets called during a BeginMainFrame, so there
691 // is no need to call SetNeedsUpdate here. 686 // is no need to call SetNeedsUpdate here.
692 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested()); 687 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested());
693 if (scroll_offset_ == scroll_offset) 688 if (scroll_offset_ == scroll_offset)
694 return; 689 return;
695 scroll_offset_ = scroll_offset; 690 scroll_offset_ = scroll_offset;
696 SetNeedsPushProperties(); 691 SetNeedsPushProperties();
697 if (!did_scroll_callback_.is_null()) 692 if (!did_scroll_callback_.is_null())
698 did_scroll_callback_.Run(); 693 did_scroll_callback_.Run();
699 // The callback could potentially change the layer structure: 694 // The callback could potentially change the layer structure:
700 // "this" may have been destroyed during the process. 695 // "this" may have been destroyed during the process.
701 } 696 }
702 697
703 // TODO(wjmaclean) We should template this and put it into LayerTreeHostCommon
704 // so that both Layer and LayerImpl are using the same code. In order
705 // to template it we should avoid calling layer_tree_host() by giving
706 // Layer/LayerImpl local accessors for page_scale_layer() and
707 // page_scale_factor().
708 gfx::Vector2d Layer::MaxScrollOffset() const {
709 if (scroll_clip_layer_id_ == INVALID_ID)
710 return gfx::Vector2d();
711
712 gfx::Size scaled_scroll_bounds(bounds());
713 Layer const* current_layer = this;
714 Layer const* page_scale_layer = layer_tree_host()->page_scale_layer();
715 float scale_factor = 1.f;
716 do {
717 if (current_layer == page_scale_layer) {
718 scale_factor = layer_tree_host()->page_scale_factor();
719 scaled_scroll_bounds.SetSize(
720 scale_factor * scaled_scroll_bounds.width(),
721 scale_factor * scaled_scroll_bounds.height());
722 }
723 current_layer = current_layer->parent();
724 } while (current_layer && current_layer->id() != scroll_clip_layer_id_);
725 DCHECK(current_layer);
726 DCHECK(current_layer->id() == scroll_clip_layer_id_);
727
728 gfx::Vector2dF max_offset(
729 scaled_scroll_bounds.width() - current_layer->bounds().width(),
730 scaled_scroll_bounds.height() - current_layer->bounds().height());
731 // We need the final scroll offset to be in CSS coords.
732 max_offset.Scale(1.f / scale_factor);
733 max_offset.SetToMax(gfx::Vector2dF());
734 return gfx::ToFlooredVector2d(max_offset);
735 }
736
737 void Layer::SetScrollClipLayerId(int clip_layer_id) { 698 void Layer::SetScrollClipLayerId(int clip_layer_id) {
738 DCHECK(IsPropertyChangeAllowed()); 699 DCHECK(IsPropertyChangeAllowed());
739 if (scroll_clip_layer_id_ == clip_layer_id) 700 if (scroll_clip_layer_id_ == clip_layer_id)
740 return; 701 return;
741 scroll_clip_layer_id_ = clip_layer_id; 702 scroll_clip_layer_id_ = clip_layer_id;
742 SetNeedsCommit(); 703 SetNeedsCommit();
743 } 704 }
744 705
745 void Layer::SetUserScrollable(bool horizontal, bool vertical) { 706 void Layer::SetUserScrollable(bool horizontal, bool vertical) {
746 DCHECK(IsPropertyChangeAllowed()); 707 DCHECK(IsPropertyChangeAllowed());
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 if (clip_parent_) 1180 if (clip_parent_)
1220 clip_parent_->RemoveClipChild(this); 1181 clip_parent_->RemoveClipChild(this);
1221 1182
1222 clip_parent_ = NULL; 1183 clip_parent_ = NULL;
1223 } 1184 }
1224 1185
1225 void Layer::RunMicroBenchmark(MicroBenchmark* benchmark) { 1186 void Layer::RunMicroBenchmark(MicroBenchmark* benchmark) {
1226 benchmark->RunOnLayer(this); 1187 benchmark->RunOnLayer(this);
1227 } 1188 }
1228 } // namespace cc 1189 } // namespace cc
OLDNEW
« no previous file with comments | « cc/cc_tests.gyp ('k') | cc/trees/layer_tree_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698