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

Side by Side Diff: cc/layer_tree_impl.cc

Issue 12552004: Support bottom-right anchored fixed-position elements during a pinch gesture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reupload the same thing Created 7 years, 9 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/layer_tree_impl.h" 5 #include "cc/layer_tree_impl.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "cc/heads_up_display_layer_impl.h" 8 #include "cc/heads_up_display_layer_impl.h"
9 #include "cc/layer_tree_host_common.h" 9 #include "cc/layer_tree_host_common.h"
10 #include "cc/layer_tree_host_impl.h" 10 #include "cc/layer_tree_host_impl.h"
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 if (pending_tree) { 163 if (pending_tree) {
164 DCHECK_EQ(1, pending_tree->sent_page_scale_delta()); 164 DCHECK_EQ(1, pending_tree->sent_page_scale_delta());
165 pending_tree->SetPageScaleDelta(page_scale_delta_ / sent_page_scale_delta_ ); 165 pending_tree->SetPageScaleDelta(page_scale_delta_ / sent_page_scale_delta_ );
166 } 166 }
167 } 167 }
168 168
169 UpdateMaxScrollOffset(); 169 UpdateMaxScrollOffset();
170 set_needs_update_draw_properties(); 170 set_needs_update_draw_properties();
171 } 171 }
172 172
173 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { 173 gfx::SizeF LayerTreeImpl::UnscaledScrollableViewportSize() const {
174 gfx::SizeF view_bounds;
175 // The clip layer should be used for scrolling bounds if available since it 174 // The clip layer should be used for scrolling bounds if available since it
176 // adjusts for non-overlay scrollbars. Otherwise, fall back to our knowledge 175 // adjusts for non-overlay scrollbars. Otherwise, fall back to our knowledge
177 // of the physical viewport size. 176 // of the physical viewport size.
178 LayerImpl* clip_layer = NULL; 177 LayerImpl* clip_layer = NULL;
179 if (root_scroll_layer_) 178 if (root_scroll_layer_)
180 clip_layer = root_scroll_layer_->parent(); 179 clip_layer = root_scroll_layer_->parent();
181 if (clip_layer && clip_layer->masksToBounds()) { 180 if (clip_layer && clip_layer->masksToBounds()) {
182 view_bounds = clip_layer->bounds(); 181 return clip_layer->bounds();
183 } else { 182 } else {
184 view_bounds = gfx::ScaleSize(device_viewport_size(), 183 return gfx::ScaleSize(device_viewport_size(),
185 1 / device_scale_factor()); 184 1 / device_scale_factor());
186 } 185 }
186 }
187
188 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
189 gfx::SizeF view_bounds = UnscaledScrollableViewportSize();
187 view_bounds.Scale(1 / total_page_scale_factor()); 190 view_bounds.Scale(1 / total_page_scale_factor());
188 191
189 return view_bounds; 192 return view_bounds;
190 } 193 }
191 194
192 void LayerTreeImpl::UpdateMaxScrollOffset() { 195 void LayerTreeImpl::UpdateMaxScrollOffset() {
193 if (!root_scroll_layer_ || !root_scroll_layer_->children().size()) 196 if (!root_scroll_layer_ || !root_scroll_layer_->children().size())
194 return; 197 return;
195 198
196 gfx::Vector2dF max_scroll = gfx::Rect(ScrollableSize()).bottom_right() - 199 gfx::Vector2dF max_scroll = gfx::Rect(ScrollableSize()).bottom_right() -
197 gfx::RectF(ScrollableViewportSize()).bottom_right(); 200 gfx::RectF(ScrollableViewportSize()).bottom_right();
198 201
199 // The viewport may be larger than the contents in some cases, such as 202 // The viewport may be larger than the contents in some cases, such as
200 // having a vertical scrollbar but no horizontal overflow. 203 // having a vertical scrollbar but no horizontal overflow.
201 max_scroll.ClampToMin(gfx::Vector2dF()); 204 max_scroll.ClampToMin(gfx::Vector2dF());
202 205
203 root_scroll_layer_->setMaxScrollOffset(gfx::ToFlooredVector2d(max_scroll)); 206 root_scroll_layer_->setMaxScrollOffset(gfx::ToFlooredVector2d(max_scroll));
207
208 gfx::Vector2dF scrollable_viewport_size =
209 gfx::RectF(ScrollableViewportSize()).bottom_right() - gfx::PointF();
210 gfx::Vector2dF original_scrollable_viewport_size =
211 gfx::RectF(UnscaledScrollableViewportSize()).bottom_right() -
212 gfx::PointF();
213 original_scrollable_viewport_size.Scale(1 / page_scale_factor());
214 root_scroll_layer_->setFixedContainerSizeDelta(
215 scrollable_viewport_size - original_scrollable_viewport_size);
204 } 216 }
205 217
206 gfx::Transform LayerTreeImpl::ImplTransform() const { 218 gfx::Transform LayerTreeImpl::ImplTransform() const {
207 gfx::Transform transform; 219 gfx::Transform transform;
208 transform.Scale(total_page_scale_factor(), total_page_scale_factor()); 220 transform.Scale(total_page_scale_factor(), total_page_scale_factor());
209 return transform; 221 return transform;
210 } 222 }
211 223
212 struct UpdateTilePrioritiesForLayer { 224 struct UpdateTilePrioritiesForLayer {
213 void operator()(LayerImpl *layer) { 225 void operator()(LayerImpl *layer) {
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 for (LayerIteratorType it = LayerIteratorType::begin( 492 for (LayerIteratorType it = LayerIteratorType::begin(
481 &render_surface_layer_list_); it != end; ++it) { 493 &render_surface_layer_list_); it != end; ++it) {
482 if (!it.representsItself()) 494 if (!it.representsItself())
483 continue; 495 continue;
484 state->Append((*it)->AsValue().release()); 496 state->Append((*it)->AsValue().release());
485 } 497 }
486 return state.PassAs<base::Value>(); 498 return state.PassAs<base::Value>();
487 } 499 }
488 500
489 } // namespace cc 501 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698