| OLD | NEW |
| 1 /* | 1 /* |
| 2 Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> | 2 Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 2004, 2005, 2010 Rob Buis <buis@kde.org> | 3 2004, 2005, 2010 Rob Buis <buis@kde.org> |
| 4 Copyright (C) Research In Motion Limited 2010. All rights reserved. | 4 Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 5 | 5 |
| 6 Based on khtml code by: | 6 Based on khtml code by: |
| 7 Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) | 7 Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 8 Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) | 8 Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) |
| 9 Copyright (C) 2002-2003 Dirk Mueller (mueller@kde.org) | 9 Copyright (C) 2002-2003 Dirk Mueller (mueller@kde.org) |
| 10 Copyright (C) 2002 Apple Computer, Inc. | 10 Copyright (C) 2002 Apple Computer, Inc. |
| 11 | 11 |
| 12 This library is free software; you can redistribute it and/or | 12 This library is free software; you can redistribute it and/or |
| 13 modify it under the terms of the GNU Library General Public | 13 modify it under the terms of the GNU Library General Public |
| 14 License as published by the Free Software Foundation; either | 14 License as published by the Free Software Foundation; either |
| 15 version 2 of the License, or (at your option) any later version. | 15 version 2 of the License, or (at your option) any later version. |
| 16 | 16 |
| 17 This library is distributed in the hope that it will be useful, | 17 This library is distributed in the hope that it will be useful, |
| 18 but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 20 Library General Public License for more details. | 20 Library General Public License for more details. |
| 21 | 21 |
| 22 You should have received a copy of the GNU Library General Public License | 22 You should have received a copy of the GNU Library General Public License |
| 23 along with this library; see the file COPYING.LIB. If not, write to | 23 along with this library; see the file COPYING.LIB. If not, write to |
| 24 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 24 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 25 Boston, MA 02110-1301, USA. | 25 Boston, MA 02110-1301, USA. |
| 26 */ | 26 */ |
| 27 | 27 |
| 28 #include "config.h" | 28 #include "config.h" |
| 29 | 29 |
| 30 #include "core/layout/style/SVGLayoutStyle.h" | 30 #include "core/layout/style/SVGComputedStyle.h" |
| 31 | 31 |
| 32 namespace blink { | 32 namespace blink { |
| 33 | 33 |
| 34 SVGLayoutStyle::SVGLayoutStyle() | 34 SVGComputedStyle::SVGComputedStyle() |
| 35 { | 35 { |
| 36 static SVGLayoutStyle* initialStyle = new SVGLayoutStyle(CreateInitial); | 36 static SVGComputedStyle* initialStyle = new SVGComputedStyle(CreateInitial); |
| 37 | 37 |
| 38 fill = initialStyle->fill; | 38 fill = initialStyle->fill; |
| 39 stroke = initialStyle->stroke; | 39 stroke = initialStyle->stroke; |
| 40 stops = initialStyle->stops; | 40 stops = initialStyle->stops; |
| 41 misc = initialStyle->misc; | 41 misc = initialStyle->misc; |
| 42 inheritedResources = initialStyle->inheritedResources; | 42 inheritedResources = initialStyle->inheritedResources; |
| 43 layout = initialStyle->layout; | 43 layout = initialStyle->layout; |
| 44 resources = initialStyle->resources; | 44 resources = initialStyle->resources; |
| 45 | 45 |
| 46 setBitDefaults(); | 46 setBitDefaults(); |
| 47 } | 47 } |
| 48 | 48 |
| 49 SVGLayoutStyle::SVGLayoutStyle(CreateInitialType) | 49 SVGComputedStyle::SVGComputedStyle(CreateInitialType) |
| 50 { | 50 { |
| 51 setBitDefaults(); | 51 setBitDefaults(); |
| 52 | 52 |
| 53 fill.init(); | 53 fill.init(); |
| 54 stroke.init(); | 54 stroke.init(); |
| 55 stops.init(); | 55 stops.init(); |
| 56 misc.init(); | 56 misc.init(); |
| 57 inheritedResources.init(); | 57 inheritedResources.init(); |
| 58 layout.init(); | 58 layout.init(); |
| 59 resources.init(); | 59 resources.init(); |
| 60 } | 60 } |
| 61 | 61 |
| 62 SVGLayoutStyle::SVGLayoutStyle(const SVGLayoutStyle& other) | 62 SVGComputedStyle::SVGComputedStyle(const SVGComputedStyle& other) |
| 63 : RefCounted<SVGLayoutStyle>() | 63 : RefCounted<SVGComputedStyle>() |
| 64 { | 64 { |
| 65 fill = other.fill; | 65 fill = other.fill; |
| 66 stroke = other.stroke; | 66 stroke = other.stroke; |
| 67 stops = other.stops; | 67 stops = other.stops; |
| 68 misc = other.misc; | 68 misc = other.misc; |
| 69 inheritedResources = other.inheritedResources; | 69 inheritedResources = other.inheritedResources; |
| 70 layout = other.layout; | 70 layout = other.layout; |
| 71 resources = other.resources; | 71 resources = other.resources; |
| 72 | 72 |
| 73 svg_inherited_flags = other.svg_inherited_flags; | 73 svg_inherited_flags = other.svg_inherited_flags; |
| 74 svg_noninherited_flags = other.svg_noninherited_flags; | 74 svg_noninherited_flags = other.svg_noninherited_flags; |
| 75 } | 75 } |
| 76 | 76 |
| 77 SVGLayoutStyle::~SVGLayoutStyle() | 77 SVGComputedStyle::~SVGComputedStyle() |
| 78 { | 78 { |
| 79 } | 79 } |
| 80 | 80 |
| 81 bool SVGLayoutStyle::operator==(const SVGLayoutStyle& other) const | 81 bool SVGComputedStyle::operator==(const SVGComputedStyle& other) const |
| 82 { | 82 { |
| 83 return fill == other.fill | 83 return fill == other.fill |
| 84 && stroke == other.stroke | 84 && stroke == other.stroke |
| 85 && stops == other.stops | 85 && stops == other.stops |
| 86 && misc == other.misc | 86 && misc == other.misc |
| 87 && inheritedResources == other.inheritedResources | 87 && inheritedResources == other.inheritedResources |
| 88 && layout == other.layout | 88 && layout == other.layout |
| 89 && resources == other.resources | 89 && resources == other.resources |
| 90 && svg_inherited_flags == other.svg_inherited_flags | 90 && svg_inherited_flags == other.svg_inherited_flags |
| 91 && svg_noninherited_flags == other.svg_noninherited_flags; | 91 && svg_noninherited_flags == other.svg_noninherited_flags; |
| 92 } | 92 } |
| 93 | 93 |
| 94 bool SVGLayoutStyle::inheritedNotEqual(const SVGLayoutStyle* other) const | 94 bool SVGComputedStyle::inheritedNotEqual(const SVGComputedStyle* other) const |
| 95 { | 95 { |
| 96 return fill != other->fill | 96 return fill != other->fill |
| 97 || stroke != other->stroke | 97 || stroke != other->stroke |
| 98 || inheritedResources != other->inheritedResources | 98 || inheritedResources != other->inheritedResources |
| 99 || svg_inherited_flags != other->svg_inherited_flags; | 99 || svg_inherited_flags != other->svg_inherited_flags; |
| 100 } | 100 } |
| 101 | 101 |
| 102 void SVGLayoutStyle::inheritFrom(const SVGLayoutStyle* svgInheritParent) | 102 void SVGComputedStyle::inheritFrom(const SVGComputedStyle* svgInheritParent) |
| 103 { | 103 { |
| 104 if (!svgInheritParent) | 104 if (!svgInheritParent) |
| 105 return; | 105 return; |
| 106 | 106 |
| 107 fill = svgInheritParent->fill; | 107 fill = svgInheritParent->fill; |
| 108 stroke = svgInheritParent->stroke; | 108 stroke = svgInheritParent->stroke; |
| 109 inheritedResources = svgInheritParent->inheritedResources; | 109 inheritedResources = svgInheritParent->inheritedResources; |
| 110 | 110 |
| 111 svg_inherited_flags = svgInheritParent->svg_inherited_flags; | 111 svg_inherited_flags = svgInheritParent->svg_inherited_flags; |
| 112 } | 112 } |
| 113 | 113 |
| 114 void SVGLayoutStyle::copyNonInheritedFromCached(const SVGLayoutStyle* other) | 114 void SVGComputedStyle::copyNonInheritedFromCached(const SVGComputedStyle* other) |
| 115 { | 115 { |
| 116 svg_noninherited_flags = other->svg_noninherited_flags; | 116 svg_noninherited_flags = other->svg_noninherited_flags; |
| 117 stops = other->stops; | 117 stops = other->stops; |
| 118 misc = other->misc; | 118 misc = other->misc; |
| 119 layout = other->layout; | 119 layout = other->layout; |
| 120 resources = other->resources; | 120 resources = other->resources; |
| 121 } | 121 } |
| 122 | 122 |
| 123 PassRefPtr<SVGDashArray> SVGLayoutStyle::initialStrokeDashArray() | 123 PassRefPtr<SVGDashArray> SVGComputedStyle::initialStrokeDashArray() |
| 124 { | 124 { |
| 125 DEFINE_STATIC_REF(SVGDashArray, initialDashArray, SVGDashArray::create()); | 125 DEFINE_STATIC_REF(SVGDashArray, initialDashArray, SVGDashArray::create()); |
| 126 return initialDashArray; | 126 return initialDashArray; |
| 127 } | 127 } |
| 128 | 128 |
| 129 StyleDifference SVGLayoutStyle::diff(const SVGLayoutStyle* other) const | 129 StyleDifference SVGComputedStyle::diff(const SVGComputedStyle* other) const |
| 130 { | 130 { |
| 131 StyleDifference styleDifference; | 131 StyleDifference styleDifference; |
| 132 | 132 |
| 133 if (diffNeedsLayoutAndPaintInvalidation(other)) { | 133 if (diffNeedsLayoutAndPaintInvalidation(other)) { |
| 134 styleDifference.setNeedsFullLayout(); | 134 styleDifference.setNeedsFullLayout(); |
| 135 styleDifference.setNeedsPaintInvalidationObject(); | 135 styleDifference.setNeedsPaintInvalidationObject(); |
| 136 } else if (diffNeedsPaintInvalidation(other)) { | 136 } else if (diffNeedsPaintInvalidation(other)) { |
| 137 styleDifference.setNeedsPaintInvalidationObject(); | 137 styleDifference.setNeedsPaintInvalidationObject(); |
| 138 } | 138 } |
| 139 | 139 |
| 140 return styleDifference; | 140 return styleDifference; |
| 141 } | 141 } |
| 142 | 142 |
| 143 bool SVGLayoutStyle::diffNeedsLayoutAndPaintInvalidation(const SVGLayoutStyle* o
ther) const | 143 bool SVGComputedStyle::diffNeedsLayoutAndPaintInvalidation(const SVGComputedStyl
e* other) const |
| 144 { | 144 { |
| 145 // If resources change, we need a relayout, as the presence of resources inf
luences the paint invalidation rect. | 145 // If resources change, we need a relayout, as the presence of resources inf
luences the paint invalidation rect. |
| 146 if (resources != other->resources) | 146 if (resources != other->resources) |
| 147 return true; | 147 return true; |
| 148 | 148 |
| 149 // If markers change, we need a relayout, as marker boundaries are cached in
LayoutSVGPath. | 149 // If markers change, we need a relayout, as marker boundaries are cached in
LayoutSVGPath. |
| 150 if (inheritedResources != other->inheritedResources) | 150 if (inheritedResources != other->inheritedResources) |
| 151 return true; | 151 return true; |
| 152 | 152 |
| 153 // All text related properties influence layout. | 153 // All text related properties influence layout. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 || layout->rx != other->layout->rx | 196 || layout->rx != other->layout->rx |
| 197 || layout->ry != other->layout->ry | 197 || layout->ry != other->layout->ry |
| 198 || layout->cx != other->layout->cx | 198 || layout->cx != other->layout->cx |
| 199 || layout->cy != other->layout->cy) | 199 || layout->cy != other->layout->cy) |
| 200 return true; | 200 return true; |
| 201 } | 201 } |
| 202 | 202 |
| 203 return false; | 203 return false; |
| 204 } | 204 } |
| 205 | 205 |
| 206 bool SVGLayoutStyle::diffNeedsPaintInvalidation(const SVGLayoutStyle* other) con
st | 206 bool SVGComputedStyle::diffNeedsPaintInvalidation(const SVGComputedStyle* other)
const |
| 207 { | 207 { |
| 208 if (stroke->opacity != other->stroke->opacity) | 208 if (stroke->opacity != other->stroke->opacity) |
| 209 return true; | 209 return true; |
| 210 | 210 |
| 211 // Painting related properties only need paint invalidation. | 211 // Painting related properties only need paint invalidation. |
| 212 if (misc.get() != other->misc.get()) { | 212 if (misc.get() != other->misc.get()) { |
| 213 if (misc->floodColor != other->misc->floodColor | 213 if (misc->floodColor != other->misc->floodColor |
| 214 || misc->floodOpacity != other->misc->floodOpacity | 214 || misc->floodOpacity != other->misc->floodOpacity |
| 215 || misc->lightingColor != other->misc->lightingColor) | 215 || misc->lightingColor != other->misc->lightingColor) |
| 216 return true; | 216 return true; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 241 | 241 |
| 242 if (svg_noninherited_flags.f.bufferedRendering != other->svg_noninherited_fl
ags.f.bufferedRendering) | 242 if (svg_noninherited_flags.f.bufferedRendering != other->svg_noninherited_fl
ags.f.bufferedRendering) |
| 243 return true; | 243 return true; |
| 244 | 244 |
| 245 if (svg_noninherited_flags.f.maskType != other->svg_noninherited_flags.f.mas
kType) | 245 if (svg_noninherited_flags.f.maskType != other->svg_noninherited_flags.f.mas
kType) |
| 246 return true; | 246 return true; |
| 247 | 247 |
| 248 return false; | 248 return false; |
| 249 } | 249 } |
| 250 | 250 |
| 251 EPaintOrderType SVGLayoutStyle::paintOrderType(unsigned index) const | 251 EPaintOrderType SVGComputedStyle::paintOrderType(unsigned index) const |
| 252 { | 252 { |
| 253 ASSERT(index < ((1 << kPaintOrderBitwidth)-1)); | 253 ASSERT(index < ((1 << kPaintOrderBitwidth)-1)); |
| 254 unsigned pt = (paintOrder() >> (kPaintOrderBitwidth*index)) & ((1u << kPaint
OrderBitwidth) - 1); | 254 unsigned pt = (paintOrder() >> (kPaintOrderBitwidth*index)) & ((1u << kPaint
OrderBitwidth) - 1); |
| 255 return (EPaintOrderType)pt; | 255 return (EPaintOrderType)pt; |
| 256 } | 256 } |
| 257 | 257 |
| 258 } | 258 } |
| OLD | NEW |