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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11552009: Add support for calculating the position of the top controls in the cc layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove some unnecessary bits after addressing comments. Created 8 years 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
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_host_impl.h" 5 #include "cc/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 , m_numMainThreadScrolls(0) 229 , m_numMainThreadScrolls(0)
230 , m_cumulativeNumLayersDrawn(0) 230 , m_cumulativeNumLayersDrawn(0)
231 , m_cumulativeNumMissingTiles(0) 231 , m_cumulativeNumMissingTiles(0)
232 , m_lastSentMemoryVisibleBytes(0) 232 , m_lastSentMemoryVisibleBytes(0)
233 , m_lastSentMemoryVisibleAndNearbyBytes(0) 233 , m_lastSentMemoryVisibleAndNearbyBytes(0)
234 , m_lastSentMemoryUseBytes(0) 234 , m_lastSentMemoryUseBytes(0)
235 { 235 {
236 DCHECK(m_proxy->isImplThread()); 236 DCHECK(m_proxy->isImplThread());
237 didVisibilityChange(this, m_visible); 237 didVisibilityChange(this, m_visible);
238 238
239 if (settings.calculateTopControlsPosition)
240 m_topControlsManager = TopControlsManager::Create(this, settings.topCont rolsHeight);
241
239 // TODO(nduca): For now, assume we have an active tree. This will be removed 242 // TODO(nduca): For now, assume we have an active tree. This will be removed
240 // in future patches. 243 // in future patches.
241 m_activeTree = LayerTreeImpl::create(this); 244 m_activeTree = LayerTreeImpl::create(this);
242 } 245 }
243 246
244 LayerTreeHostImpl::~LayerTreeHostImpl() 247 LayerTreeHostImpl::~LayerTreeHostImpl()
245 { 248 {
246 DCHECK(m_proxy->isImplThread()); 249 DCHECK(m_proxy->isImplThread());
247 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 250 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
248 251
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 OutputSurface* LayerTreeHostImpl::outputSurface() const 302 OutputSurface* LayerTreeHostImpl::outputSurface() const
300 { 303 {
301 return m_outputSurface.get(); 304 return m_outputSurface.get();
302 } 305 }
303 306
304 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime) 307 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime)
305 { 308 {
306 animatePageScale(monotonicTime); 309 animatePageScale(monotonicTime);
307 animateLayers(monotonicTime, wallClockTime); 310 animateLayers(monotonicTime, wallClockTime);
308 animateScrollbars(monotonicTime); 311 animateScrollbars(monotonicTime);
312 if (m_topControlsManager)
313 m_topControlsManager->Animate(monotonicTime);
309 } 314 }
310 315
311 void LayerTreeHostImpl::manageTiles() 316 void LayerTreeHostImpl::manageTiles()
312 { 317 {
313 DCHECK(m_tileManager); 318 DCHECK(m_tileManager);
314 m_tileManager->ManageTiles(); 319 m_tileManager->ManageTiles();
315 } 320 }
316 321
317 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) 322 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on)
318 { 323 {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 402
398 if (!m_renderer) // For maxTextureSize. 403 if (!m_renderer) // For maxTextureSize.
399 return; 404 return;
400 405
401 if (rootScrollLayer()) 406 if (rootScrollLayer())
402 rootScrollLayer()->setImplTransform(implTransform()); 407 rootScrollLayer()->setImplTransform(implTransform());
403 408
404 { 409 {
405 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc"); 410 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
406 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); 411 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
412 if (m_topControlsManager)
413 m_topControlsManager->UpdateDrawPositions();
407 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, m_renderSurfaceLayerList); 414 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, m_settings.canUseLCDText, m_renderSurfaceLayerList);
408 } 415 }
409 } 416 }
410 417
411 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 418 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
412 { 419 {
413 RenderPass* pass = renderPass.get(); 420 RenderPass* pass = renderPass.get();
414 renderPasses.push_back(pass); 421 renderPasses.push_back(pass);
415 renderPassesById.set(pass->id, renderPass.Pass()); 422 renderPassesById.set(pass->id, renderPass.Pass());
416 } 423 }
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); 889 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta();
883 metadata.page_scale_factor = m_pinchZoomViewport.totalPageScaleFactor(); 890 metadata.page_scale_factor = m_pinchZoomViewport.totalPageScaleFactor();
884 metadata.viewport_size = m_pinchZoomViewport.bounds().size(); 891 metadata.viewport_size = m_pinchZoomViewport.bounds().size();
885 metadata.root_layer_size = rootScrollLayer()->bounds(); 892 metadata.root_layer_size = rootScrollLayer()->bounds();
886 metadata.min_page_scale_factor = m_pinchZoomViewport.minPageScaleFactor(); 893 metadata.min_page_scale_factor = m_pinchZoomViewport.minPageScaleFactor();
887 metadata.max_page_scale_factor = m_pinchZoomViewport.maxPageScaleFactor(); 894 metadata.max_page_scale_factor = m_pinchZoomViewport.maxPageScaleFactor();
888 if (!m_settings.pageScalePinchZoomEnabled) { 895 if (!m_settings.pageScalePinchZoomEnabled) {
889 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.pageScaleFacto r()); 896 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.pageScaleFacto r());
890 metadata.root_layer_size.Scale(1 / m_pinchZoomViewport.pageScaleFactor() ); 897 metadata.root_layer_size.Scale(1 / m_pinchZoomViewport.pageScaleFactor() );
891 } 898 }
899 if (m_topControlsManager) {
900 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager- >controls_top_offset());
901 metadata.content_offset = gfx::Vector2dF(0.f, m_topControlsManager->cont ent_top_offset());
902 }
892 903
893 return metadata; 904 return metadata;
894 } 905 }
895 906
896 void LayerTreeHostImpl::drawLayers(FrameData& frame) 907 void LayerTreeHostImpl::drawLayers(FrameData& frame)
897 { 908 {
898 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); 909 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers");
899 DCHECK(canDraw()); 910 DCHECK(canDraw());
900 DCHECK(!frame.renderPasses.empty()); 911 DCHECK(!frame.renderPasses.empty());
901 912
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 1020
1010 if (layerImpl->scrollable()) 1021 if (layerImpl->scrollable())
1011 return layerImpl; 1022 return layerImpl;
1012 1023
1013 if (layerImpl->drawsContent() && layerImpl->parent() && layerImpl->parent()- >scrollable()) 1024 if (layerImpl->drawsContent() && layerImpl->parent() && layerImpl->parent()- >scrollable())
1014 return layerImpl->parent(); 1025 return layerImpl->parent();
1015 1026
1016 return 0; 1027 return 0;
1017 } 1028 }
1018 1029
1030 LayerTreeImpl* LayerTreeHostImpl::activeTree()
1031 {
1032 return m_activeTree.get();
1033 }
1034
1019 void LayerTreeHostImpl::setRootLayer(scoped_ptr<LayerImpl> layer) 1035 void LayerTreeHostImpl::setRootLayer(scoped_ptr<LayerImpl> layer)
1020 { 1036 {
1021 m_activeTree->SetRootLayer(layer.Pass()); 1037 m_activeTree->SetRootLayer(layer.Pass());
1022 setNeedsUpdateDrawProperties(); 1038 setNeedsUpdateDrawProperties();
1023 } 1039 }
1024 1040
1025 scoped_ptr<LayerImpl> LayerTreeHostImpl::detachLayerTree() 1041 scoped_ptr<LayerImpl> LayerTreeHostImpl::detachLayerTree()
1026 { 1042 {
1027 scoped_ptr<LayerImpl> layer = m_activeTree->DetachLayerTree(); 1043 scoped_ptr<LayerImpl> layer = m_activeTree->DetachLayerTree();
1028 m_renderSurfaceLayerList.clear(); 1044 m_renderSurfaceLayerList.clear();
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 gfx::Vector2dF maxScroll = gfx::Rect(contentBounds).bottom_right() - gfx::Re ctF(viewBounds).bottom_right(); 1220 gfx::Vector2dF maxScroll = gfx::Rect(contentBounds).bottom_right() - gfx::Re ctF(viewBounds).bottom_right();
1205 maxScroll.Scale(1 / m_deviceScaleFactor); 1221 maxScroll.Scale(1 / m_deviceScaleFactor);
1206 1222
1207 // The viewport may be larger than the contents in some cases, such as 1223 // The viewport may be larger than the contents in some cases, such as
1208 // having a vertical scrollbar but no horizontal overflow. 1224 // having a vertical scrollbar but no horizontal overflow.
1209 maxScroll.ClampToMin(gfx::Vector2dF()); 1225 maxScroll.ClampToMin(gfx::Vector2dF());
1210 1226
1211 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll)); 1227 rootScrollLayer()->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll));
1212 } 1228 }
1213 1229
1230 void LayerTreeHostImpl::setNeedsUpdateDrawProperties()
1231 {
1232 m_needsUpdateDrawProperties = true;
1233 }
1234
1214 void LayerTreeHostImpl::setNeedsRedraw() 1235 void LayerTreeHostImpl::setNeedsRedraw()
1215 { 1236 {
1216 m_client->setNeedsRedrawOnImplThread(); 1237 m_client->setNeedsRedrawOnImplThread();
1217 } 1238 }
1218 1239
1219 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1240 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1220 { 1241 {
1221 updateDrawProperties(); 1242 updateDrawProperties();
1222 return m_renderSurfaceLayerList.size(); 1243 return m_renderSurfaceLayerList.size();
1223 } 1244 }
1224 1245
1225 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) 1246 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type)
1226 { 1247 {
1227 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); 1248 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin");
1228 1249
1250 if (m_topControlsManager)
1251 m_topControlsManager->ScrollBegin();
1252
1229 DCHECK(!currentlyScrollingLayer()); 1253 DCHECK(!currentlyScrollingLayer());
1230 clearCurrentlyScrollingLayer(); 1254 clearCurrentlyScrollingLayer();
1231 1255
1232 if (!ensureRenderSurfaceLayerList()) 1256 if (!ensureRenderSurfaceLayerList())
1233 return ScrollIgnored; 1257 return ScrollIgnored;
1234 1258
1235 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor); 1259 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor);
1236 1260
1237 // First find out which layer was hit from the saved list of visible layers 1261 // First find out which layer was hit from the saved list of visible layers
1238 // in the most recent frame. 1262 // in the most recent frame.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1346 bool didScroll = false; 1370 bool didScroll = false;
1347 1371
1348 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) { 1372 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) {
1349 if (!layerImpl->scrollable()) 1373 if (!layerImpl->scrollable())
1350 continue; 1374 continue;
1351 1375
1352 PinchZoomViewport* viewport = NULL; 1376 PinchZoomViewport* viewport = NULL;
1353 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ()) 1377 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ())
1354 viewport = &m_pinchZoomViewport; 1378 viewport = &m_pinchZoomViewport;
1355 gfx::Vector2dF appliedDelta; 1379 gfx::Vector2dF appliedDelta;
1380 if (m_topControlsManager && layerImpl == rootScrollLayer())
1381 pendingDelta = m_topControlsManager->ScrollBy(pendingDelta);
1382
1356 if (m_scrollDeltaIsInViewportSpace) { 1383 if (m_scrollDeltaIsInViewportSpace) {
1357 float scaleFromViewportToScreenSpace = m_deviceScaleFactor; 1384 float scaleFromViewportToScreenSpace = m_deviceScaleFactor;
1358 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta); 1385 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta);
1359 } else 1386 } else
1360 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta); 1387 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta);
1361 1388
1362 // If the layer wasn't able to move, try the next one in the hierarchy. 1389 // If the layer wasn't able to move, try the next one in the hierarchy.
1363 float moveThresholdSquared = 0.1f * 0.1f; 1390 float moveThresholdSquared = 0.1f * 0.1f;
1364 if (appliedDelta.LengthSquared() < moveThresholdSquared) 1391 if (appliedDelta.LengthSquared() < moveThresholdSquared)
1365 continue; 1392 continue;
(...skipping 24 matching lines...) Expand all
1390 return didScroll; 1417 return didScroll;
1391 } 1418 }
1392 1419
1393 void LayerTreeHostImpl::clearCurrentlyScrollingLayer() 1420 void LayerTreeHostImpl::clearCurrentlyScrollingLayer()
1394 { 1421 {
1395 m_activeTree->ClearCurrentlyScrollingLayer(); 1422 m_activeTree->ClearCurrentlyScrollingLayer();
1396 } 1423 }
1397 1424
1398 void LayerTreeHostImpl::scrollEnd() 1425 void LayerTreeHostImpl::scrollEnd()
1399 { 1426 {
1427 if (m_topControlsManager)
1428 m_topControlsManager->ScrollEnd();
1400 clearCurrentlyScrollingLayer(); 1429 clearCurrentlyScrollingLayer();
1401 } 1430 }
1402 1431
1403 void LayerTreeHostImpl::pinchGestureBegin() 1432 void LayerTreeHostImpl::pinchGestureBegin()
1404 { 1433 {
1405 m_pinchGestureActive = true; 1434 m_pinchGestureActive = true;
1406 m_previousPinchAnchor = gfx::Point(); 1435 m_previousPinchAnchor = gfx::Point();
1407 1436
1408 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) 1437 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
1409 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( ); 1438 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( );
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1730 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1759 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1731 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1760 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1732 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1761 if (scrollbarController && scrollbarController->animate(monotonicTime))
1733 m_client->setNeedsRedrawOnImplThread(); 1762 m_client->setNeedsRedrawOnImplThread();
1734 1763
1735 for (size_t i = 0; i < layer->children().size(); ++i) 1764 for (size_t i = 0; i < layer->children().size(); ++i)
1736 animateScrollbarsRecursive(layer->children()[i], time); 1765 animateScrollbarsRecursive(layer->children()[i], time);
1737 } 1766 }
1738 1767
1739 } // namespace cc 1768 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698