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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "CCLayerTreeHost.h" | 7 #include "CCLayerTreeHost.h" |
8 | 8 |
9 #include "CCFontAtlas.h" | 9 #include "CCFontAtlas.h" |
10 #include "CCGraphicsContext.h" | 10 #include "CCGraphicsContext.h" |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 } | 535 } |
536 | 536 |
537 static void setScale(LayerChromium* layer, float deviceScaleFactor, float pageSc
aleFactor) | 537 static void setScale(LayerChromium* layer, float deviceScaleFactor, float pageSc
aleFactor) |
538 { | 538 { |
539 if (layer->boundsContainPageScale()) | 539 if (layer->boundsContainPageScale()) |
540 layer->setContentsScale(deviceScaleFactor); | 540 layer->setContentsScale(deviceScaleFactor); |
541 else | 541 else |
542 layer->setContentsScale(deviceScaleFactor * pageScaleFactor); | 542 layer->setContentsScale(deviceScaleFactor * pageScaleFactor); |
543 } | 543 } |
544 | 544 |
| 545 static LayerChromium* findFirstScrollableLayer(LayerChromium* layer) |
| 546 { |
| 547 if (!layer) |
| 548 return 0; |
| 549 |
| 550 if (layer->scrollable()) |
| 551 return layer; |
| 552 |
| 553 for (size_t i = 0; i < layer->children().size(); ++i) { |
| 554 LayerChromium* found = findFirstScrollableLayer(layer->children()[i].get
()); |
| 555 if (found) |
| 556 return found; |
| 557 } |
| 558 |
| 559 return 0; |
| 560 } |
| 561 |
545 static void updateLayerScale(LayerChromium* layer, float deviceScaleFactor, floa
t pageScaleFactor) | 562 static void updateLayerScale(LayerChromium* layer, float deviceScaleFactor, floa
t pageScaleFactor) |
546 { | 563 { |
547 setScale(layer, deviceScaleFactor, pageScaleFactor); | 564 setScale(layer, deviceScaleFactor, pageScaleFactor); |
548 | 565 |
549 LayerChromium* maskLayer = layer->maskLayer(); | 566 LayerChromium* maskLayer = layer->maskLayer(); |
550 if (maskLayer) | 567 if (maskLayer) |
551 setScale(maskLayer, deviceScaleFactor, pageScaleFactor); | 568 setScale(maskLayer, deviceScaleFactor, pageScaleFactor); |
552 | 569 |
553 LayerChromium* replicaMaskLayer = layer->replicaLayer() ? layer->replicaLaye
r()->maskLayer() : 0; | 570 LayerChromium* replicaMaskLayer = layer->replicaLayer() ? layer->replicaLaye
r()->maskLayer() : 0; |
554 if (replicaMaskLayer) | 571 if (replicaMaskLayer) |
555 setScale(replicaMaskLayer, deviceScaleFactor, pageScaleFactor); | 572 setScale(replicaMaskLayer, deviceScaleFactor, pageScaleFactor); |
556 | 573 |
557 const Vector<RefPtr<LayerChromium> >& children = layer->children(); | 574 const Vector<RefPtr<LayerChromium> >& children = layer->children(); |
558 for (unsigned int i = 0; i < children.size(); ++i) | 575 for (unsigned int i = 0; i < children.size(); ++i) |
559 updateLayerScale(children[i].get(), deviceScaleFactor, pageScaleFactor); | 576 updateLayerScale(children[i].get(), deviceScaleFactor, pageScaleFactor); |
560 } | 577 } |
561 | 578 |
562 void CCLayerTreeHost::updateLayers(LayerChromium* rootLayer, CCTextureUpdateQueu
e& queue) | 579 void CCLayerTreeHost::updateLayers(LayerChromium* rootLayer, CCTextureUpdateQueu
e& queue) |
563 { | 580 { |
564 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers"); | 581 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers"); |
565 | 582 |
566 updateLayerScale(rootLayer, m_deviceScaleFactor, m_pageScaleFactor); | 583 updateLayerScale(rootLayer, m_deviceScaleFactor, m_pageScaleFactor); |
567 | 584 |
568 LayerList updateList; | 585 LayerList updateList; |
569 | 586 |
570 { | 587 { |
| 588 if (CCSettings::pageScalePinchZoomEnabled()) { |
| 589 LayerChromium* rootScroll = findFirstScrollableLayer(rootLayer); |
| 590 if (rootScroll) |
| 591 rootScroll->setImplTransform(m_implTransform); |
| 592 } |
| 593 |
571 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers::calcDrawEtc"); | 594 TRACE_EVENT0("cc", "CCLayerTreeHost::updateLayers::calcDrawEtc"); |
572 CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewport
Size(), m_deviceScaleFactor, rendererCapabilities().maxTextureSize, updateList); | 595 CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewport
Size(), m_deviceScaleFactor, rendererCapabilities().maxTextureSize, updateList); |
573 CCLayerTreeHostCommon::calculateVisibleRects(updateList); | 596 CCLayerTreeHostCommon::calculateVisibleRects(updateList); |
574 } | 597 } |
575 | 598 |
576 // Reset partial texture update requests. | 599 // Reset partial texture update requests. |
577 m_partialTextureUpdateRequests = 0; | 600 m_partialTextureUpdateRequests = 0; |
578 | 601 |
579 bool needMoreUpdates = paintLayerContents(updateList, queue); | 602 bool needMoreUpdates = paintLayerContents(updateList, queue); |
580 if (m_triggerIdleUpdates && needMoreUpdates) | 603 if (m_triggerIdleUpdates && needMoreUpdates) |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
699 } | 722 } |
700 | 723 |
701 occlusionTracker.leaveLayer(it); | 724 occlusionTracker.leaveLayer(it); |
702 } | 725 } |
703 | 726 |
704 occlusionTracker.overdrawMetrics().recordMetrics(this); | 727 occlusionTracker.overdrawMetrics().recordMetrics(this); |
705 | 728 |
706 return needMoreUpdates; | 729 return needMoreUpdates; |
707 } | 730 } |
708 | 731 |
709 static LayerChromium* findFirstScrollableLayer(LayerChromium* layer) | |
710 { | |
711 if (!layer) | |
712 return 0; | |
713 | |
714 if (layer->scrollable()) | |
715 return layer; | |
716 | |
717 for (size_t i = 0; i < layer->children().size(); ++i) { | |
718 LayerChromium* found = findFirstScrollableLayer(layer->children()[i].get
()); | |
719 if (found) | |
720 return found; | |
721 } | |
722 | |
723 return 0; | |
724 } | |
725 | |
726 void CCLayerTreeHost::applyScrollAndScale(const CCScrollAndScaleSet& info) | 732 void CCLayerTreeHost::applyScrollAndScale(const CCScrollAndScaleSet& info) |
727 { | 733 { |
728 if (!m_rootLayer) | 734 if (!m_rootLayer) |
729 return; | 735 return; |
730 | 736 |
731 LayerChromium* rootScrollLayer = findFirstScrollableLayer(m_rootLayer.get())
; | 737 LayerChromium* rootScrollLayer = findFirstScrollableLayer(m_rootLayer.get())
; |
732 IntSize rootScrollDelta; | 738 IntSize rootScrollDelta; |
733 | 739 |
734 for (size_t i = 0; i < info.scrolls.size(); ++i) { | 740 for (size_t i = 0; i < info.scrolls.size(); ++i) { |
735 LayerChromium* layer = CCLayerTreeHostCommon::findLayerInSubtree(m_rootL
ayer.get(), info.scrolls[i].layerId); | 741 LayerChromium* layer = CCLayerTreeHostCommon::findLayerInSubtree(m_rootL
ayer.get(), info.scrolls[i].layerId); |
736 if (!layer) | 742 if (!layer) |
737 continue; | 743 continue; |
738 if (layer == rootScrollLayer) | 744 if (layer == rootScrollLayer) |
739 rootScrollDelta += info.scrolls[i].scrollDelta; | 745 rootScrollDelta += info.scrolls[i].scrollDelta; |
740 else | 746 else |
741 layer->setScrollPosition(layer->scrollPosition() + info.scrolls[i].s
crollDelta); | 747 layer->setScrollPosition(layer->scrollPosition() + info.scrolls[i].s
crollDelta); |
742 } | 748 } |
743 if (!rootScrollDelta.isZero() || info.pageScaleDelta != 1) | 749 if (!rootScrollDelta.isZero() || info.pageScaleDelta != 1) |
744 m_client->applyScrollAndScale(rootScrollDelta, info.pageScaleDelta); | 750 m_client->applyScrollAndScale(rootScrollDelta, info.pageScaleDelta); |
745 } | 751 } |
746 | 752 |
| 753 void CCLayerTreeHost::setImplTransform(const WebKit::WebTransformationMatrix& tr
ansform) |
| 754 { |
| 755 m_implTransform = transform; |
| 756 } |
| 757 |
747 void CCLayerTreeHost::startRateLimiter(WebKit::WebGraphicsContext3D* context) | 758 void CCLayerTreeHost::startRateLimiter(WebKit::WebGraphicsContext3D* context) |
748 { | 759 { |
749 if (m_animating) | 760 if (m_animating) |
750 return; | 761 return; |
751 | 762 |
752 ASSERT(context); | 763 ASSERT(context); |
753 RateLimiterMap::iterator it = m_rateLimiters.find(context); | 764 RateLimiterMap::iterator it = m_rateLimiters.find(context); |
754 if (it != m_rateLimiters.end()) | 765 if (it != m_rateLimiters.end()) |
755 #if WTF_NEW_HASHMAP_ITERATORS_INTERFACE | 766 #if WTF_NEW_HASHMAP_ITERATORS_INTERFACE |
756 it->value->start(); | 767 it->value->start(); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 else | 865 else |
855 layer->notifyAnimationFinished(wallClockTime); | 866 layer->notifyAnimationFinished(wallClockTime); |
856 } | 867 } |
857 } | 868 } |
858 | 869 |
859 for (size_t childIndex = 0; childIndex < layer->children().size(); ++childIn
dex) | 870 for (size_t childIndex = 0; childIndex < layer->children().size(); ++childIn
dex) |
860 setAnimationEventsRecursive(events, layer->children()[childIndex].get(),
wallClockTime); | 871 setAnimationEventsRecursive(events, layer->children()[childIndex].get(),
wallClockTime); |
861 } | 872 } |
862 | 873 |
863 } // namespace cc | 874 } // namespace cc |
OLD | NEW |