| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Rob Buis <buis@kde.org> | 2 * Copyright (C) 2007, 2008 Rob Buis <buis@kde.org> |
| 3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> | 3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> |
| 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> |
| 5 * Copyright (C) 2009 Google, Inc. All rights reserved. | 5 * Copyright (C) 2009 Google, Inc. All rights reserved. |
| 6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
| 7 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 7 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 | 45 |
| 46 namespace blink { | 46 namespace blink { |
| 47 | 47 |
| 48 static inline LayoutRect enclosingIntRectIfNotEmpty(const FloatRect& rect) | 48 static inline LayoutRect enclosingIntRectIfNotEmpty(const FloatRect& rect) |
| 49 { | 49 { |
| 50 if (rect.isEmpty()) | 50 if (rect.isEmpty()) |
| 51 return LayoutRect(); | 51 return LayoutRect(); |
| 52 return enclosingIntRect(rect); | 52 return enclosingIntRect(rect); |
| 53 } | 53 } |
| 54 | 54 |
| 55 LayoutRect SVGLayoutSupport::clippedOverflowRectForPaintInvalidation(const Layou
tObject* object, const LayoutLayerModelObject* paintInvalidationContainer, const
PaintInvalidationState* paintInvalidationState) | 55 LayoutRect SVGLayoutSupport::clippedOverflowRectForPaintInvalidation(const Layou
tObject* object, const LayoutBoxModelObject* paintInvalidationContainer, const P
aintInvalidationState* paintInvalidationState) |
| 56 { | 56 { |
| 57 // Return early for any cases where we don't actually paint | 57 // Return early for any cases where we don't actually paint |
| 58 if (object->style()->visibility() != VISIBLE && !object->enclosingLayer()->h
asVisibleContent()) | 58 if (object->style()->visibility() != VISIBLE && !object->enclosingLayer()->h
asVisibleContent()) |
| 59 return LayoutRect(); | 59 return LayoutRect(); |
| 60 | 60 |
| 61 // Pass our local paint rect to computeRectForPaintInvalidation() which will | 61 // Pass our local paint rect to computeRectForPaintInvalidation() which will |
| 62 // map to parent coords and recurse up the parent chain. | 62 // map to parent coords and recurse up the parent chain. |
| 63 FloatRect paintInvalidationRect = object->paintInvalidationRectInLocalCoordi
nates(); | 63 FloatRect paintInvalidationRect = object->paintInvalidationRectInLocalCoordi
nates(); |
| 64 paintInvalidationRect.inflate(object->style()->outlineWidth()); | 64 paintInvalidationRect.inflate(object->style()->outlineWidth()); |
| 65 | 65 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 parent = parent->parent(); | 97 parent = parent->parent(); |
| 98 } while (!parent->isSVGRoot()); | 98 } while (!parent->isSVGRoot()); |
| 99 | 99 |
| 100 const LayoutSVGRoot& svgRoot = toLayoutSVGRoot(*parent); | 100 const LayoutSVGRoot& svgRoot = toLayoutSVGRoot(*parent); |
| 101 | 101 |
| 102 paintInvalidationRect = svgRoot.localToBorderBoxTransform().mapRect(paintInv
alidationRect); | 102 paintInvalidationRect = svgRoot.localToBorderBoxTransform().mapRect(paintInv
alidationRect); |
| 103 rect = enclosingIntRectIfNotEmpty(paintInvalidationRect); | 103 rect = enclosingIntRectIfNotEmpty(paintInvalidationRect); |
| 104 return svgRoot; | 104 return svgRoot; |
| 105 } | 105 } |
| 106 | 106 |
| 107 void SVGLayoutSupport::mapLocalToContainer(const LayoutObject* object, const Lay
outLayerModelObject* paintInvalidationContainer, TransformState& transformState,
bool* wasFixed, const PaintInvalidationState* paintInvalidationState) | 107 void SVGLayoutSupport::mapLocalToContainer(const LayoutObject* object, const Lay
outBoxModelObject* paintInvalidationContainer, TransformState& transformState, b
ool* wasFixed, const PaintInvalidationState* paintInvalidationState) |
| 108 { | 108 { |
| 109 transformState.applyTransform(object->localToParentTransform()); | 109 transformState.applyTransform(object->localToParentTransform()); |
| 110 | 110 |
| 111 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain
tInvalidationContainer)) { | 111 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain
tInvalidationContainer)) { |
| 112 // |svgTransform| contains localToBorderBoxTransform mentioned below. | 112 // |svgTransform| contains localToBorderBoxTransform mentioned below. |
| 113 transformState.applyTransform(paintInvalidationState->svgTransform()); | 113 transformState.applyTransform(paintInvalidationState->svgTransform()); |
| 114 transformState.move(paintInvalidationState->paintOffset()); | 114 transformState.move(paintInvalidationState->paintOffset()); |
| 115 return; | 115 return; |
| 116 } | 116 } |
| 117 | 117 |
| 118 LayoutObject* parent = object->parent(); | 118 LayoutObject* parent = object->parent(); |
| 119 | 119 |
| 120 // At the SVG/HTML boundary (aka LayoutSVGRoot), we apply the localToBorderB
oxTransform | 120 // At the SVG/HTML boundary (aka LayoutSVGRoot), we apply the localToBorderB
oxTransform |
| 121 // to map an element from SVG viewport coordinates to CSS box coordinates. | 121 // to map an element from SVG viewport coordinates to CSS box coordinates. |
| 122 // LayoutSVGRoot's mapLocalToContainer method expects CSS box coordinates. | 122 // LayoutSVGRoot's mapLocalToContainer method expects CSS box coordinates. |
| 123 if (parent->isSVGRoot()) | 123 if (parent->isSVGRoot()) |
| 124 transformState.applyTransform(toLayoutSVGRoot(parent)->localToBorderBoxT
ransform()); | 124 transformState.applyTransform(toLayoutSVGRoot(parent)->localToBorderBoxT
ransform()); |
| 125 | 125 |
| 126 MapCoordinatesFlags mode = UseTransforms; | 126 MapCoordinatesFlags mode = UseTransforms; |
| 127 parent->mapLocalToContainer(paintInvalidationContainer, transformState, mode
, wasFixed, paintInvalidationState); | 127 parent->mapLocalToContainer(paintInvalidationContainer, transformState, mode
, wasFixed, paintInvalidationState); |
| 128 } | 128 } |
| 129 | 129 |
| 130 const LayoutObject* SVGLayoutSupport::pushMappingToContainer(const LayoutObject*
object, const LayoutLayerModelObject* ancestorToStopAt, LayoutGeometryMap& geom
etryMap) | 130 const LayoutObject* SVGLayoutSupport::pushMappingToContainer(const LayoutObject*
object, const LayoutBoxModelObject* ancestorToStopAt, LayoutGeometryMap& geomet
ryMap) |
| 131 { | 131 { |
| 132 ASSERT_UNUSED(ancestorToStopAt, ancestorToStopAt != object); | 132 ASSERT_UNUSED(ancestorToStopAt, ancestorToStopAt != object); |
| 133 | 133 |
| 134 LayoutObject* parent = object->parent(); | 134 LayoutObject* parent = object->parent(); |
| 135 | 135 |
| 136 // At the SVG/HTML boundary (aka LayoutSVGRoot), we apply the localToBorderB
oxTransform | 136 // At the SVG/HTML boundary (aka LayoutSVGRoot), we apply the localToBorderB
oxTransform |
| 137 // to map an element from SVG viewport coordinates to CSS box coordinates. | 137 // to map an element from SVG viewport coordinates to CSS box coordinates. |
| 138 // LayoutSVGRoot's mapLocalToContainer method expects CSS box coordinates. | 138 // LayoutSVGRoot's mapLocalToContainer method expects CSS box coordinates. |
| 139 if (parent->isSVGRoot()) { | 139 if (parent->isSVGRoot()) { |
| 140 TransformationMatrix matrix(object->localToParentTransform()); | 140 TransformationMatrix matrix(object->localToParentTransform()); |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 | 510 |
| 511 layer = layer->parent(); | 511 layer = layer->parent(); |
| 512 } | 512 } |
| 513 | 513 |
| 514 ctm.scale(deviceScaleFactor); | 514 ctm.scale(deviceScaleFactor); |
| 515 | 515 |
| 516 return narrowPrecisionToFloat(sqrt((pow(ctm.xScale(), 2) + pow(ctm.yScale(),
2)) / 2)); | 516 return narrowPrecisionToFloat(sqrt((pow(ctm.xScale(), 2) + pow(ctm.yScale(),
2)) / 2)); |
| 517 } | 517 } |
| 518 | 518 |
| 519 } | 519 } |
| OLD | NEW |