Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| index dbf533cd0cb10eed0c1323ae9409b1a2c23b8edd..b444f085dec4cc13af15ad17437124e04d3f59c5 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| @@ -1177,11 +1177,11 @@ bool LayoutBox::MapVisualRectToContainer( |
| const LayoutObject* ancestor, |
| VisualRectFlags visual_rect_flags, |
| TransformState& transform_state) const { |
| - bool preserve3D = container_object->Style()->Preserves3D(); |
| + bool container_preserve_3d = container_object->Style()->Preserves3D(); |
| TransformState::TransformAccumulation accumulation = |
| - preserve3D ? TransformState::kAccumulateTransform |
| - : TransformState::kFlattenTransform; |
| + container_preserve_3d ? TransformState::kAccumulateTransform |
| + : TransformState::kFlattenTransform; |
| // If there is no transform on this box, adjust for container offset and |
| // container scrolling, then apply container clip. |
| @@ -1195,32 +1195,45 @@ bool LayoutBox::MapVisualRectToContainer( |
| return true; |
| } |
| - // Otherwise, apply the following: |
| - // 1. Transform. |
| - // 2. Container offset. |
| - // 3. Container scroll offset. |
| - // 4. Perspective applied by container. |
| - // 5. Transform flattening. |
| - // 6. Expansion for pixel snapping. |
| - // 7. Container clip. |
| + // Otherwise, do the following: |
| + // 1. Expand for pixel snapping. |
| + // 2. Generate transformation matrix combining, in this order |
| + // a) transform, |
| + // b) container offset, |
| + // c) container scroll offset, |
| + // d) perspective applied by container. |
| + // 3. Apply transform Transform+flattening. |
| + // 4. Apply container clip. |
| - // 1. Transform. |
| + // 1. Expand for pixel snapping. |
| + // Use EnclosingBoundingBox because we cannot properly compute pixel |
| + // snapping for painted elements within the transform since we don't know |
| + // the desired subpixel accumulation at this point, and the transform may |
| + // include a scale. This only makes sense for non-preserve3D. |
| + if (!StyleRef().Preserves3D()) { |
|
chrishtr
2017/05/05 16:04:44
Why remove the SPv2 condition here?
Xianzhu
2017/05/05 16:14:51
MapToVisualRectInAncestorSpace() is still used on
Xianzhu
2017/05/05 16:16:02
Correction: with width and height of the inner div
chrishtr
2017/05/05 16:17:19
Ah, right. Ok.
|
| + transform_state.Flatten(); |
| + transform_state.SetQuad( |
| + FloatQuad(transform_state.LastPlanarQuad().EnclosingBoundingBox())); |
| + } |
| + |
| + // 2. Generate transformation matrix. |
| + // a) Transform. |
| TransformationMatrix transform; |
| if (Layer() && Layer()->Transform()) |
| transform.Multiply(Layer()->CurrentTransform()); |
| - // 2. Container offset. |
| + // b) Container offset. |
| transform.PostTranslate(container_offset.X().ToFloat(), |
| container_offset.Y().ToFloat()); |
| - // 3. Container scroll offset. |
| + // c) Container scroll offset. |
| if (container_object->IsBox() && container_object != ancestor && |
| container_object->HasOverflowClip()) { |
| IntSize offset = -ToLayoutBox(container_object)->ScrolledContentOffset(); |
| transform.PostTranslate(offset.Width(), offset.Height()); |
| } |
| - // 4. Perspective applied by container. |
| + // d) Perspective applied by container. |
| if (container_object && container_object->HasLayer() && |
| container_object->Style()->HasPerspective()) { |
| // Perspective on the container affects us, so we have to factor it in here. |
| @@ -1237,21 +1250,12 @@ bool LayoutBox::MapVisualRectToContainer( |
| transform = perspective_matrix * transform; |
| } |
| - // 5. Transform flattening. |
| + // 3. Apply transform and flatten. |
| transform_state.ApplyTransform(transform, accumulation); |
| - |
| - // 6. Expansion for pixel snapping. |
| - // Use enclosingBoundingBox because we cannot properly compute pixel |
| - // snapping for painted elements within the transform since we don't know |
| - // the desired subpixel accumulation at this point, and the transform may |
| - // include a scale. |
| - if (!preserve3D) { |
| + if (!container_preserve_3d) |
| transform_state.Flatten(); |
| - transform_state.SetQuad( |
| - FloatQuad(transform_state.LastPlanarQuad().EnclosingBoundingBox())); |
| - } |
| - // 7. Container clip. |
| + // 4. Apply container clip. |
| if (container_object->IsBox() && container_object != ancestor && |
| container_object->HasClipRelatedProperty()) { |
| return ToLayoutBox(container_object) |