OLD | NEW |
---|---|
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 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
247 memoryNiceToHaveBytes, | 247 memoryNiceToHaveBytes, |
248 memoryUsedBytes); | 248 memoryUsedBytes); |
249 } | 249 } |
250 | 250 |
251 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) | 251 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) |
252 { | 252 { |
253 if (!rootScrollLayer()) | 253 if (!rootScrollLayer()) |
254 return; | 254 return; |
255 | 255 |
256 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 256 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
257 gfx::SizeF scaledContentSize = contentSize(); | 257 gfx::SizeF scaledContentSize = activeTree()->ScrollableSize(); |
danakj
2013/01/17 18:02:49
rename scaledContentSize to what it now holds as w
aelias_OOO_until_Jul13
2013/01/17 19:59:46
Done.
aelias_OOO_until_Jul13
2013/01/17 19:59:46
Done.
| |
258 if (!m_settings.pageScalePinchZoomEnabled) { | 258 if (!m_settings.pageScalePinchZoomEnabled) { |
259 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 259 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
260 scaledContentSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 260 scaledContentSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
261 } | 261 } |
262 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); | 262 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); |
263 | 263 |
264 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); | 264 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
265 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi ewport.total_page_scale_factor(), viewportSize, scaledContentSize, startTimeSeco nds); | 265 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi ewport.total_page_scale_factor(), viewportSize, scaledContentSize, startTimeSeco nds); |
danakj
2013/01/17 18:02:49
Without a change to PageScaleAnimation how does th
aelias_OOO_until_Jul13
2013/01/17 19:59:46
This function was already prepared for the coordin
| |
266 | 266 |
267 if (anchorPoint) { | 267 if (anchorPoint) { |
268 gfx::Vector2dF anchor(targetOffset); | 268 gfx::Vector2dF anchor(targetOffset); |
269 if (!m_settings.pageScalePinchZoomEnabled) | 269 if (!m_settings.pageScalePinchZoomEnabled) |
270 anchor.Scale(1 / pageScale); | 270 anchor.Scale(1 / pageScale); |
271 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); | 271 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); |
272 } else { | 272 } else { |
273 gfx::Vector2dF scaledTargetOffset = targetOffset; | 273 gfx::Vector2dF scaledTargetOffset = targetOffset; |
274 if (!m_settings.pageScalePinchZoomEnabled) | 274 if (!m_settings.pageScalePinchZoomEnabled) |
275 scaledTargetOffset.Scale(1 / pageScale); | 275 scaledTargetOffset.Scale(1 / pageScale); |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
547 | 547 |
548 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) | 548 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) |
549 { | 549 { |
550 // Lazily create the timeSource adapter so that we can vary the interval for testing. | 550 // Lazily create the timeSource adapter so that we can vary the interval for testing. |
551 if (!m_timeSourceClientAdapter) | 551 if (!m_timeSourceClientAdapter) |
552 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->curr entThread())); | 552 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), m_proxy->curr entThread())); |
553 | 553 |
554 m_timeSourceClientAdapter->setActive(enabled); | 554 m_timeSourceClientAdapter->setActive(enabled); |
555 } | 555 } |
556 | 556 |
557 gfx::Size LayerTreeHostImpl::contentSize() const | |
558 { | |
559 return activeTree()->ContentSize(); | |
560 } | |
561 | |
562 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame) | 557 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame) |
563 { | 558 { |
564 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId); | 559 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId); |
565 return it != frame.renderPassesById.end() ? it->second : NULL; | 560 return it != frame.renderPassesById.end() ? it->second : NULL; |
566 } | 561 } |
567 | 562 |
568 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer TreeHostImpl::FrameData& frame) | 563 static void removeRenderPassesRecursive(RenderPass::Id removeRenderPassId, Layer TreeHostImpl::FrameData& frame) |
569 { | 564 { |
570 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ; | 565 RenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, frame) ; |
571 // The pass was already removed by another quad - probably the original, and we are the replica. | 566 // The pass was already removed by another quad - probably the original, and we are the replica. |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
761 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | 756 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const |
762 { | 757 { |
763 if (!rootScrollLayer()) | 758 if (!rootScrollLayer()) |
764 return CompositorFrameMetadata(); | 759 return CompositorFrameMetadata(); |
765 | 760 |
766 CompositorFrameMetadata metadata; | 761 CompositorFrameMetadata metadata; |
767 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); | 762 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); |
768 if (!m_settings.pageScalePinchZoomEnabled) | 763 if (!m_settings.pageScalePinchZoomEnabled) |
769 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); | 764 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); |
770 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); | 765 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); |
771 metadata.viewport_size = m_pinchZoomViewport.Bounds().size(); | 766 metadata.viewport_size = m_pinchZoomViewport.ZoomedViewport().size(); |
772 metadata.root_layer_size = contentSize(); | 767 metadata.root_layer_size = activeTree()->ScrollableSize(); |
773 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; | 768 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; |
774 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; | 769 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; |
775 | 770 |
776 return metadata; | 771 return metadata; |
777 } | 772 } |
778 | 773 |
779 void LayerTreeHostImpl::drawLayers(FrameData& frame) | 774 void LayerTreeHostImpl::drawLayers(FrameData& frame) |
780 { | 775 { |
781 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); | 776 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); |
782 DCHECK(canDraw()); | 777 DCHECK(canDraw()); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1021 | 1016 |
1022 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) | 1017 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) |
1023 { | 1018 { |
1024 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) | 1019 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) |
1025 return; | 1020 return; |
1026 | 1021 |
1027 m_layoutViewportSize = layoutViewportSize; | 1022 m_layoutViewportSize = layoutViewportSize; |
1028 m_deviceViewportSize = deviceViewportSize; | 1023 m_deviceViewportSize = deviceViewportSize; |
1029 | 1024 |
1030 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize); | 1025 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize); |
1026 m_pinchZoomViewport.set_device_viewport_size(deviceViewportSize); | |
1031 | 1027 |
1032 updateMaxScrollOffset(); | 1028 updateMaxScrollOffset(); |
1033 | 1029 |
1034 if (m_renderer) | 1030 if (m_renderer) |
1035 m_renderer->viewportChanged(); | 1031 m_renderer->viewportChanged(); |
1036 | 1032 |
1037 m_client->onCanDrawStateChanged(canDraw()); | 1033 m_client->onCanDrawStateChanged(canDraw()); |
1038 } | 1034 } |
1039 | 1035 |
1040 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) | 1036 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1364 const float pinchZoomOutSensitivity = 0.95f; | 1360 const float pinchZoomOutSensitivity = 0.95f; |
1365 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) | 1361 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) |
1366 return; | 1362 return; |
1367 | 1363 |
1368 // Compute where the scroll offset/page scale would be if fully pinch-zoomed | 1364 // Compute where the scroll offset/page scale would be if fully pinch-zoomed |
1369 // out from the anchor point. | 1365 // out from the anchor point. |
1370 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 1366 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
1371 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); | 1367 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); |
1372 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); | 1368 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); |
1373 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m _pinchZoomViewport.page_scale_factor(); | 1369 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m _pinchZoomViewport.page_scale_factor(); |
1374 gfx::SizeF scaledContentsSize = gfx::ScaleSize(contentSize(), pageScaleDelta ToSend); | 1370 gfx::SizeF scaledContentsSize = gfx::ScaleSize(activeTree()->ScrollableSize( ), pageScaleDeltaToSend); |
danakj
2013/01/17 18:02:49
rename scaledContentsSize here also
aelias_OOO_until_Jul13
2013/01/17 19:59:46
Done.
| |
1375 | 1371 |
1376 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); | 1372 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); |
1377 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; | 1373 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; |
1378 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); | 1374 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); |
1379 scrollEnd -= anchorOffset; | 1375 scrollEnd -= anchorOffset; |
1380 scrollEnd.ClampToMax(gfx::RectF(scaledContentsSize).bottom_right() - gfx::Re ct(m_deviceViewportSize).bottom_right()); | 1376 scrollEnd.ClampToMax(gfx::RectF(scaledContentsSize).bottom_right() - gfx::Re ct(m_deviceViewportSize).bottom_right()); |
danakj
2013/01/17 18:02:49
You mentioned that scrolling should all be in logi
aelias_OOO_until_Jul13
2013/01/17 19:59:46
This method adjustScrollsForPageScaleChange is pur
| |
1381 scrollEnd.ClampToMin(gfx::Vector2d()); | 1377 scrollEnd.ClampToMin(gfx::Vector2d()); |
1382 scrollEnd.Scale(1 / pageScaleDeltaToSend); | 1378 scrollEnd.Scale(1 / pageScaleDeltaToSend); |
1383 scrollEnd.Scale(m_deviceScaleFactor); | 1379 scrollEnd.Scale(m_deviceScaleFactor); |
1384 | 1380 |
1385 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch ZoomViewport.min_page_scale_factor()); | 1381 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch ZoomViewport.min_page_scale_factor()); |
1386 } | 1382 } |
1387 | 1383 |
1388 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale) | 1384 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale) |
1389 { | 1385 { |
1390 if (!rootScrollLayer()) | 1386 if (!rootScrollLayer()) |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1639 } | 1635 } |
1640 | 1636 |
1641 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture() | 1637 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture() |
1642 { | 1638 { |
1643 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree(); | 1639 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree(); |
1644 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1640 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
1645 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1641 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
1646 } | 1642 } |
1647 | 1643 |
1648 } // namespace cc | 1644 } // namespace cc |
OLD | NEW |