| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "core/paint/PaintPropertyTreeBuilder.h" | 5 #include "core/paint/PaintPropertyTreeBuilder.h" |
| 6 | 6 |
| 7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
| 8 #include "core/frame/LocalFrame.h" | 8 #include "core/frame/LocalFrame.h" |
| 9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
| 10 #include "core/layout/LayoutInline.h" | 10 #include "core/layout/LayoutInline.h" |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 FloatSize borderBoxSize(box.size()); | 211 FloatSize borderBoxSize(box.size()); |
| 212 return FloatPoint3D( | 212 return FloatPoint3D( |
| 213 floatValueForLength(style.transformOriginX(), borderBoxSize.width()), | 213 floatValueForLength(style.transformOriginX(), borderBoxSize.width()), |
| 214 floatValueForLength(style.transformOriginY(), borderBoxSize.height()), | 214 floatValueForLength(style.transformOriginY(), borderBoxSize.height()), |
| 215 style.transformOriginZ()); | 215 style.transformOriginZ()); |
| 216 } | 216 } |
| 217 | 217 |
| 218 void PaintPropertyTreeBuilder::updateTransform(const LayoutObject& object, Paint
PropertyTreeBuilderContext& context) | 218 void PaintPropertyTreeBuilder::updateTransform(const LayoutObject& object, Paint
PropertyTreeBuilderContext& context) |
| 219 { | 219 { |
| 220 if (object.isSVG() && !object.isSVGRoot()) { | 220 if (object.isSVG() && !object.isSVGRoot()) { |
| 221 // SVG does not use paint offset internally. | 221 // SVG (other than SVGForeignObject) does not use paint offset internall
y. |
| 222 DCHECK(context.current.paintOffset == LayoutPoint()); | 222 DCHECK(object.isSVGForeignObject() || context.current.paintOffset == Lay
outPoint()); |
| 223 | 223 |
| 224 // FIXME(pdr): Check for the presence of a transform instead of the valu
e. Checking for an | 224 // FIXME(pdr): Check for the presence of a transform instead of the valu
e. Checking for an |
| 225 // identity matrix will cause the property tree structure to change duri
ng animations if | 225 // identity matrix will cause the property tree structure to change duri
ng animations if |
| 226 // the animation passes through the identity matrix. | 226 // the animation passes through the identity matrix. |
| 227 // FIXME(pdr): Refactor this so all non-root SVG objects use the same tr
ansform function. | 227 // FIXME(pdr): Refactor this so all non-root SVG objects use the same tr
ansform function. |
| 228 const AffineTransform& transform = object.isSVGForeignObject() ? object.
localSVGTransform() : object.localToSVGParentTransform(); | 228 const AffineTransform& transform = object.isSVGForeignObject() ? object.
localSVGTransform() : object.localToSVGParentTransform(); |
| 229 if (!transform.isIdentity()) { | 229 if (!transform.isIdentity()) { |
| 230 // The origin is included in the local transform, so leave origin em
pty. | 230 // The origin is included in the local transform, so leave origin em
pty. |
| 231 context.current.transform = object.getMutableForPainting().ensureObj
ectPaintProperties().createOrUpdateTransform( | 231 context.current.transform = object.getMutableForPainting().ensureObj
ectPaintProperties().createOrUpdateTransform( |
| 232 context.current.transform, TransformationMatrix(transform), Floa
tPoint3D()); | 232 context.current.transform, TransformationMatrix(transform), Floa
tPoint3D()); |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 } | 534 } |
| 535 case StickyPosition: | 535 case StickyPosition: |
| 536 context.current.paintOffset += boxModelObject.offsetForInFlowPosition(); | 536 context.current.paintOffset += boxModelObject.offsetForInFlowPosition(); |
| 537 break; | 537 break; |
| 538 case FixedPosition: | 538 case FixedPosition: |
| 539 context.current = context.fixedPosition; | 539 context.current = context.fixedPosition; |
| 540 break; | 540 break; |
| 541 default: | 541 default: |
| 542 ASSERT_NOT_REACHED(); | 542 ASSERT_NOT_REACHED(); |
| 543 } | 543 } |
| 544 if (boxModelObject.isBox() && (!boxModelObject.isSVG() || boxModelObject.isS
VGRoot())) { | 544 |
| 545 // SVGForeignObject needs paint offset because its viewport offset is baked
into its location(), |
| 546 // while its localSVGTransform() doesn't contain the offset. |
| 547 if (boxModelObject.isBox() && (!boxModelObject.isSVG() || boxModelObject.isS
VGRoot() || boxModelObject.isSVGForeignObject())) { |
| 545 // TODO(pdr): Several calls in this function walk back up the tree to ca
lculate containers | 548 // TODO(pdr): Several calls in this function walk back up the tree to ca
lculate containers |
| 546 // (e.g., topLeftLocation, offsetForInFlowPosition*). The containing blo
ck and other | 549 // (e.g., topLeftLocation, offsetForInFlowPosition*). The containing blo
ck and other |
| 547 // containers can be stored on PaintPropertyTreeBuilderContext instead o
f recomputing them. | 550 // containers can be stored on PaintPropertyTreeBuilderContext instead o
f recomputing them. |
| 548 context.current.paintOffset.moveBy(toLayoutBox(boxModelObject).topLeftLo
cation()); | 551 context.current.paintOffset.moveBy(toLayoutBox(boxModelObject).topLeftLo
cation()); |
| 549 // This is a weird quirk that table cells paint as children of table row
s, | 552 // This is a weird quirk that table cells paint as children of table row
s, |
| 550 // but their location have the row's location baked-in. | 553 // but their location have the row's location baked-in. |
| 551 // Similar adjustment is done in LayoutTableCell::offsetFromContainer(). | 554 // Similar adjustment is done in LayoutTableCell::offsetFromContainer(). |
| 552 if (boxModelObject.isTableCell()) { | 555 if (boxModelObject.isTableCell()) { |
| 553 LayoutObject* parentRow = boxModelObject.parent(); | 556 LayoutObject* parentRow = boxModelObject.parent(); |
| 554 ASSERT(parentRow && parentRow->isTableRow()); | 557 ASSERT(parentRow && parentRow->isTableRow()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 579 return; | 582 return; |
| 580 | 583 |
| 581 updateOverflowClip(object, context); | 584 updateOverflowClip(object, context); |
| 582 updatePerspective(object, context); | 585 updatePerspective(object, context); |
| 583 updateSvgLocalToBorderBoxTransform(object, context); | 586 updateSvgLocalToBorderBoxTransform(object, context); |
| 584 updateScrollAndScrollTranslation(object, context); | 587 updateScrollAndScrollTranslation(object, context); |
| 585 updateOutOfFlowContext(object, context); | 588 updateOutOfFlowContext(object, context); |
| 586 } | 589 } |
| 587 | 590 |
| 588 } // namespace blink | 591 } // namespace blink |
| OLD | NEW |