| 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 | 5 |
| 6 #include "config.h" | 6 #include "config.h" |
| 7 | 7 |
| 8 #include "CCLayerTreeHostCommon.h" | 8 #include "CCLayerTreeHostCommon.h" |
| 9 | 9 |
| 10 #include "CCLayerImpl.h" | 10 #include "CCLayerImpl.h" |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 // -- this is just a translation by scrollDelta. | 264 // -- this is just a translation by scrollDelta. |
| 265 // Step 3. transform back to target surface space. | 265 // Step 3. transform back to target surface space. |
| 266 // -- this transform is the "partialLayerOriginTransform" = (paren
tMatrix * scale(layer->pageScaleDelta())); | 266 // -- this transform is the "partialLayerOriginTransform" = (paren
tMatrix * scale(layer->pageScaleDelta())); |
| 267 // | 267 // |
| 268 // These steps create a matrix that both start and end in targetSurfaceSpace
. So this matrix can | 268 // These steps create a matrix that both start and end in targetSurfaceSpace
. So this matrix can |
| 269 // pre-multiply any fixed-position layer's drawTransform to undo the scrollD
eltas -- as long as | 269 // pre-multiply any fixed-position layer's drawTransform to undo the scrollD
eltas -- as long as |
| 270 // that fixed position layer is fixed onto the same renderTarget as this scr
ollingLayer. | 270 // that fixed position layer is fixed onto the same renderTarget as this scr
ollingLayer. |
| 271 // | 271 // |
| 272 | 272 |
| 273 WebTransformationMatrix partialLayerOriginTransform = parentMatrix; | 273 WebTransformationMatrix partialLayerOriginTransform = parentMatrix; |
| 274 partialLayerOriginTransform.scale(scrollingLayer->pageScaleDelta()); | 274 partialLayerOriginTransform.multiply(scrollingLayer->implTransform()); |
| 275 | 275 |
| 276 WebTransformationMatrix scrollCompensationForThisLayer = partialLayerOriginT
ransform; // Step 3 | 276 WebTransformationMatrix scrollCompensationForThisLayer = partialLayerOriginT
ransform; // Step 3 |
| 277 scrollCompensationForThisLayer.translate(scrollingLayer->scrollDelta().width
(), scrollingLayer->scrollDelta().height()); // Step 2 | 277 scrollCompensationForThisLayer.translate(scrollingLayer->scrollDelta().width
(), scrollingLayer->scrollDelta().height()); // Step 2 |
| 278 scrollCompensationForThisLayer.multiply(partialLayerOriginTransform.inverse(
)); // Step 1 | 278 scrollCompensationForThisLayer.multiply(partialLayerOriginTransform.inverse(
)); // Step 1 |
| 279 return scrollCompensationForThisLayer; | 279 return scrollCompensationForThisLayer; |
| 280 } | 280 } |
| 281 | 281 |
| 282 WebTransformationMatrix computeScrollCompensationMatrixForChildren(LayerChromium
* currentLayer, const WebTransformationMatrix& currentParentMatrix, const WebTra
nsformationMatrix& currentScrollCompensation) | 282 WebTransformationMatrix computeScrollCompensationMatrixForChildren(LayerChromium
* currentLayer, const WebTransformationMatrix& currentParentMatrix, const WebTra
nsformationMatrix& currentScrollCompensation) |
| 283 { | 283 { |
| 284 // The main thread (i.e. LayerChromium) does not need to worry about scroll
compensation. | 284 // The main thread (i.e. LayerChromium) does not need to worry about scroll
compensation. |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 | 461 |
| 462 IntSize bounds = layer->bounds(); | 462 IntSize bounds = layer->bounds(); |
| 463 FloatPoint anchorPoint = layer->anchorPoint(); | 463 FloatPoint anchorPoint = layer->anchorPoint(); |
| 464 FloatPoint position = layer->position() - layer->scrollDelta(); | 464 FloatPoint position = layer->position() - layer->scrollDelta(); |
| 465 | 465 |
| 466 // Offset between anchor point and the center of the quad. | 466 // Offset between anchor point and the center of the quad. |
| 467 float centerOffsetX = (0.5 - anchorPoint.x()) * bounds.width(); | 467 float centerOffsetX = (0.5 - anchorPoint.x()) * bounds.width(); |
| 468 float centerOffsetY = (0.5 - anchorPoint.y()) * bounds.height(); | 468 float centerOffsetY = (0.5 - anchorPoint.y()) * bounds.height(); |
| 469 | 469 |
| 470 WebTransformationMatrix layerLocalTransform; | 470 WebTransformationMatrix layerLocalTransform; |
| 471 // LT = S[pageScaleDelta] | 471 // LT = M[impl transformation] |
| 472 layerLocalTransform.scale(layer->pageScaleDelta()); | 472 layerLocalTransform.multiply(layer->implTransform()); |
| 473 // LT = S[pageScaleDelta] * Tr[origin] * Tr[origin2anchor] | 473 // LT = M[impl transformation] * Tr[origin] * Tr[origin2anchor] |
| 474 layerLocalTransform.translate3d(position.x() + anchorPoint.x() * bounds.widt
h(), position.y() + anchorPoint.y() * bounds.height(), layer->anchorPointZ()); | 474 layerLocalTransform.translate3d(position.x() + anchorPoint.x() * bounds.widt
h(), position.y() + anchorPoint.y() * bounds.height(), layer->anchorPointZ()); |
| 475 // LT = S[pageScaleDelta] * Tr[origin] * Tr[origin2anchor] * M[layer] | 475 // LT = M[impl transformation] * Tr[origin] * Tr[origin2anchor] * M[layer] |
| 476 layerLocalTransform.multiply(layer->transform()); | 476 layerLocalTransform.multiply(layer->transform()); |
| 477 // LT = S[pageScaleDelta] * Tr[origin] * Tr[origin2anchor] * M[layer] * Tr[a
nchor2center] | 477 // LT = M[impl transformation] * Tr[origin] * Tr[origin2anchor] * M[layer] *
Tr[anchor2center] |
| 478 layerLocalTransform.translate3d(centerOffsetX, centerOffsetY, -layer->anchor
PointZ()); | 478 layerLocalTransform.translate3d(centerOffsetX, centerOffsetY, -layer->anchor
PointZ()); |
| 479 | 479 |
| 480 WebTransformationMatrix combinedTransform = parentMatrix; | 480 WebTransformationMatrix combinedTransform = parentMatrix; |
| 481 combinedTransform.multiply(layerLocalTransform); | 481 combinedTransform.multiply(layerLocalTransform); |
| 482 | 482 |
| 483 if (layer->fixedToContainerLayer()) { | 483 if (layer->fixedToContainerLayer()) { |
| 484 // Special case: this layer is a composited fixed-position layer; we nee
d to | 484 // Special case: this layer is a composited fixed-position layer; we nee
d to |
| 485 // explicitly compensate for all ancestors' nonzero scrollDeltas to keep
this layer | 485 // explicitly compensate for all ancestors' nonzero scrollDeltas to keep
this layer |
| 486 // fixed correctly. | 486 // fixed correctly. |
| 487 combinedTransform = currentScrollCompensationMatrix * combinedTransform; | 487 combinedTransform = currentScrollCompensationMatrix * combinedTransform; |
| (...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 | 885 |
| 886 foundLayer = currentLayer; | 886 foundLayer = currentLayer; |
| 887 break; | 887 break; |
| 888 } | 888 } |
| 889 | 889 |
| 890 // This can potentially return 0, which means the viewportPoint did not succ
essfully hit test any layers, not even the root layer. | 890 // This can potentially return 0, which means the viewportPoint did not succ
essfully hit test any layers, not even the root layer. |
| 891 return foundLayer; | 891 return foundLayer; |
| 892 } | 892 } |
| 893 | 893 |
| 894 } // namespace cc | 894 } // namespace cc |
| OLD | NEW |