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

Side by Side Diff: cc/layer_tree_host_common.cc

Issue 11276060: Pass accurate contentsScale to LayerImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/layer_tree_host_common.h" 7 #include "cc/layer_tree_host_common.h"
8 8
9 #include "FloatQuad.h" 9 #include "FloatQuad.h"
10 #include "IntRect.h" 10 #include "IntRect.h"
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 // explicitly compensate for all ancestors' nonzero scrollDeltas to keep this layer 526 // explicitly compensate for all ancestors' nonzero scrollDeltas to keep this layer
527 // fixed correctly. 527 // fixed correctly.
528 combinedTransform = currentScrollCompensationMatrix * combinedTransform; 528 combinedTransform = currentScrollCompensationMatrix * combinedTransform;
529 } 529 }
530 530
531 // The drawTransform that gets computed below is effectively the layer's dra wTransform, unless 531 // The drawTransform that gets computed below is effectively the layer's dra wTransform, unless
532 // the layer itself creates a renderSurface. In that case, the renderSurface re-parents the transforms. 532 // the layer itself creates a renderSurface. In that case, the renderSurface re-parents the transforms.
533 WebTransformationMatrix drawTransform = combinedTransform; 533 WebTransformationMatrix drawTransform = combinedTransform;
534 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) { 534 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) {
535 // M[draw] = M[parent] * LT * S[layer2content] 535 // M[draw] = M[parent] * LT * S[layer2content]
536 drawTransform.scaleNonUniform(layer->bounds().width() / static_cast<doub le>(layer->contentBounds().width()), 536 drawTransform.scaleNonUniform(1.0 / layer->contentsScaleX(),
537 layer->bounds().height() / static_cast<dou ble>(layer->contentBounds().height())); 537 1.0 / layer->contentsScaleY());
538 } 538 }
539 539
540 // layerScreenSpaceTransform represents the transform between root layer's " screen space" and local content space. 540 // layerScreenSpaceTransform represents the transform between root layer's " screen space" and local content space.
541 WebTransformationMatrix layerScreenSpaceTransform = fullHierarchyMatrix; 541 WebTransformationMatrix layerScreenSpaceTransform = fullHierarchyMatrix;
542 if (!layer->preserves3D()) 542 if (!layer->preserves3D())
543 MathUtil::flattenTransformTo2d(layerScreenSpaceTransform); 543 MathUtil::flattenTransformTo2d(layerScreenSpaceTransform);
544 layerScreenSpaceTransform.multiply(drawTransform); 544 layerScreenSpaceTransform.multiply(drawTransform);
545 layer->setScreenSpaceTransform(layerScreenSpaceTransform); 545 layer->setScreenSpaceTransform(layerScreenSpaceTransform);
546 546
547 bool animatingTransformToTarget = layer->transformIsAnimating(); 547 bool animatingTransformToTarget = layer->transformIsAnimating();
(...skipping 19 matching lines...) Expand all
567 567
568 if (!layer->renderSurface()) 568 if (!layer->renderSurface())
569 layer->createRenderSurface(); 569 layer->createRenderSurface();
570 570
571 RenderSurfaceType* renderSurface = layer->renderSurface(); 571 RenderSurfaceType* renderSurface = layer->renderSurface();
572 renderSurface->clearLayerLists(); 572 renderSurface->clearLayerLists();
573 573
574 // The owning layer's draw transform has a scale from content to layer s pace which we need to undo and 574 // The owning layer's draw transform has a scale from content to layer s pace which we need to undo and
575 // replace with a scale from the surface's subtree into layer space. 575 // replace with a scale from the surface's subtree into layer space.
576 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) { 576 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) {
577 drawTransform.scaleNonUniform(layer->contentBounds().width() / stati c_cast<double>(layer->bounds().width()), 577 drawTransform.scaleNonUniform(layer->contentsScaleX(),
578 layer->contentBounds().height() / stat ic_cast<double>(layer->bounds().height())); 578 layer->contentsScaleY());
579 } 579 }
580 drawTransform.scaleNonUniform(1 / renderSurfaceSublayerScale.x(), 1 / re nderSurfaceSublayerScale.y()); 580 drawTransform.scaleNonUniform(1 / renderSurfaceSublayerScale.x(), 1 / re nderSurfaceSublayerScale.y());
581 renderSurface->setDrawTransform(drawTransform); 581 renderSurface->setDrawTransform(drawTransform);
582 582
583 // The origin of the new surface is the upper left corner of the layer. 583 // The origin of the new surface is the upper left corner of the layer.
584 WebTransformationMatrix layerDrawTransform; 584 WebTransformationMatrix layerDrawTransform;
585 layerDrawTransform.scaleNonUniform(renderSurfaceSublayerScale.x(), rende rSurfaceSublayerScale.y()); 585 layerDrawTransform.scaleNonUniform(renderSurfaceSublayerScale.x(), rende rSurfaceSublayerScale.y());
586 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) { 586 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) {
587 layerDrawTransform.scaleNonUniform(layer->bounds().width() / static_ cast<double>(layer->contentBounds().width()), 587 layerDrawTransform.scaleNonUniform(1.0 / layer->contentsScaleX(),
588 layer->bounds().height() / static _cast<double>(layer->contentBounds().height())); 588 1.0 / layer->contentsScaleY());
589 } 589 }
590 layer->setDrawTransform(layerDrawTransform); 590 layer->setDrawTransform(layerDrawTransform);
591 591
592 // Inside the surface's subtree, we scale everything to the owning layer 's scale. 592 // Inside the surface's subtree, we scale everything to the owning layer 's scale.
593 // The sublayer matrix transforms centered layer rects into target 593 // The sublayer matrix transforms centered layer rects into target
594 // surface content space. 594 // surface content space.
595 sublayerMatrix.makeIdentity(); 595 sublayerMatrix.makeIdentity();
596 sublayerMatrix.scaleNonUniform(renderSurfaceSublayerScale.x(), renderSur faceSublayerScale.y()); 596 sublayerMatrix.scaleNonUniform(renderSurfaceSublayerScale.x(), renderSur faceSublayerScale.y());
597 597
598 // The opacity value is moved from the layer to its surface, so that the entire subtree properly inherits opacity. 598 // The opacity value is moved from the layer to its surface, so that the entire subtree properly inherits opacity.
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 756
757 if (clippedContentRect.isEmpty()) 757 if (clippedContentRect.isEmpty())
758 renderSurface->clearLayerLists(); 758 renderSurface->clearLayerLists();
759 759
760 renderSurface->setContentRect(clippedContentRect); 760 renderSurface->setContentRect(clippedContentRect);
761 761
762 // The owning layer's screenSpaceTransform has a scale from content to l ayer space which we need to undo and 762 // The owning layer's screenSpaceTransform has a scale from content to l ayer space which we need to undo and
763 // replace with a scale from the surface's subtree into layer space. 763 // replace with a scale from the surface's subtree into layer space.
764 WebTransformationMatrix screenSpaceTransform = layer->screenSpaceTransfo rm(); 764 WebTransformationMatrix screenSpaceTransform = layer->screenSpaceTransfo rm();
765 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) { 765 if (!layer->contentBounds().isEmpty() && !layer->bounds().isEmpty()) {
766 screenSpaceTransform.scaleNonUniform(layer->contentBounds().width() / static_cast<double>(layer->bounds().width()), 766 screenSpaceTransform.scaleNonUniform(layer->contentsScaleX(),
767 layer->contentBounds().height() / stat ic_cast<double>(layer->bounds().height())); 767 layer->contentsScaleY());
768 } 768 }
769 screenSpaceTransform.scaleNonUniform(1 / renderSurfaceSublayerScale.x(), 1 / renderSurfaceSublayerScale.y()); 769 screenSpaceTransform.scaleNonUniform(1 / renderSurfaceSublayerScale.x(), 1 / renderSurfaceSublayerScale.y());
770 renderSurface->setScreenSpaceTransform(screenSpaceTransform); 770 renderSurface->setScreenSpaceTransform(screenSpaceTransform);
771 771
772 if (layer->replicaLayer()) { 772 if (layer->replicaLayer()) {
773 WebTransformationMatrix surfaceOriginToReplicaOriginTransform; 773 WebTransformationMatrix surfaceOriginToReplicaOriginTransform;
774 surfaceOriginToReplicaOriginTransform.scaleNonUniform(renderSurfaceS ublayerScale.x(), renderSurfaceSublayerScale.y()); 774 surfaceOriginToReplicaOriginTransform.scaleNonUniform(renderSurfaceS ublayerScale.x(), renderSurfaceSublayerScale.y());
775 surfaceOriginToReplicaOriginTransform.translate(layer->replicaLayer( )->position().x() + layer->replicaLayer()->anchorPoint().x() * bounds.width(), 775 surfaceOriginToReplicaOriginTransform.translate(layer->replicaLayer( )->position().x() + layer->replicaLayer()->anchorPoint().x() * bounds.width(),
776 layer->replicaLayer( )->position().y() + layer->replicaLayer()->anchorPoint().y() * bounds.height()); 776 layer->replicaLayer( )->position().y() + layer->replicaLayer()->anchorPoint().y() * bounds.height());
777 surfaceOriginToReplicaOriginTransform.multiply(layer->replicaLayer() ->transform()); 777 surfaceOriginToReplicaOriginTransform.multiply(layer->replicaLayer() ->transform());
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 921
922 foundLayer = currentLayer; 922 foundLayer = currentLayer;
923 break; 923 break;
924 } 924 }
925 925
926 // This can potentially return 0, which means the screenSpacePoint did not s uccessfully hit test any layers, not even the root layer. 926 // This can potentially return 0, which means the screenSpacePoint did not s uccessfully hit test any layers, not even the root layer.
927 return foundLayer; 927 return foundLayer;
928 } 928 }
929 929
930 } // namespace cc 930 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698