18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> 3545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 2004, 2005, 2010 Rob Buis <buis@kde.org> 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Copyright (C) Research In Motion Limited 2010. All rights reserved. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Based on khtml code by: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Copyright (C) 2002-2003 Dirk Mueller (mueller@kde.org) 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Copyright (C) 2002 Apple Computer, Inc. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project This library is free software; you can redistribute it and/or 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project modify it under the terms of the GNU Library General Public 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project License as published by the Free Software Foundation; either 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version 2 of the License, or (at your option) any later version. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project This library is distributed in the hope that it will be useful, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project but WITHOUT ANY WARRANTY; without even the implied warranty of 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Library General Public License for more details. 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project You should have received a copy of the GNU Library General Public License 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project along with this library; see the file COPYING.LIB. If not, write to 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Boston, MA 02110-1301, USA. 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGRenderStyle.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSPrimitiveValue.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSValueList.h" 35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "IntRect.h" 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "NodeRenderStyle.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGStyledElement.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39d0825bca7fe65beaee391d30da42e937db621564Steve Blockusing namespace std; 40d0825bca7fe65beaee391d30da42e937db621564Steve Block 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSVGRenderStyle::SVGRenderStyle() 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static SVGRenderStyle* defaultStyle = new SVGRenderStyle(CreateDefault); 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fill = defaultStyle->fill; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stroke = defaultStyle->stroke; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text = defaultStyle->text; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stops = defaultStyle->stops; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project misc = defaultStyle->misc; 52cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block shadowSVG = defaultStyle->shadowSVG; 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block inheritedResources = defaultStyle->inheritedResources; 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block resources = defaultStyle->resources; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setBitDefaults(); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSVGRenderStyle::SVGRenderStyle(CreateDefaultType) 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setBitDefaults(); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fill.init(); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stroke.init(); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text.init(); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stops.init(); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project misc.init(); 68cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block shadowSVG.init(); 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block inheritedResources.init(); 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block resources.init(); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSVGRenderStyle::SVGRenderStyle(const SVGRenderStyle& other) 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : RefCounted<SVGRenderStyle>() 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fill = other.fill; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stroke = other.stroke; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text = other.text; 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stops = other.stops; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project misc = other.misc; 81cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block shadowSVG = other.shadowSVG; 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block inheritedResources = other.inheritedResources; 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block resources = other.resources; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project svg_inherited_flags = other.svg_inherited_flags; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project svg_noninherited_flags = other.svg_noninherited_flags; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSVGRenderStyle::~SVGRenderStyle() 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool SVGRenderStyle::operator==(const SVGRenderStyle& other) const 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return fill == other.fill 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && stroke == other.stroke 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && text == other.text 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && stops == other.stops 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && misc == other.misc 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && shadowSVG == other.shadowSVG 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && inheritedResources == other.inheritedResources 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && resources == other.resources 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && svg_inherited_flags == other.svg_inherited_flags 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && svg_noninherited_flags == other.svg_noninherited_flags; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool SVGRenderStyle::inheritedNotEqual(const SVGRenderStyle* other) const 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return fill != other->fill 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block || stroke != other->stroke 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block || text != other->text 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block || inheritedResources != other->inheritedResources 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block || svg_inherited_flags != other->svg_inherited_flags; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid SVGRenderStyle::inheritFrom(const SVGRenderStyle* svgInheritParent) 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!svgInheritParent) 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fill = svgInheritParent->fill; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stroke = svgInheritParent->stroke; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text = svgInheritParent->text; 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block inheritedResources = svgInheritParent->inheritedResources; 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project svg_inherited_flags = svgInheritParent->svg_inherited_flags; 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 129ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve BlockStyleDifference SVGRenderStyle::diff(const SVGRenderStyle* other) const 130ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 131ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // NOTE: All comparisions that may return StyleDifferenceLayout have to go before those who return StyleDifferenceRepaint 132ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 133ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // If kerning changes, we need a relayout, to force SVGCharacterData to be recalculated in the SVGRootInlineBox. 134ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (text != other->text) 135ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceLayout; 136ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 137ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // If resources change, we need a relayout, as the presence of resources influences the repaint rect. 138ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (resources != other->resources) 139ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceLayout; 140ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 141a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If markers change, we need a relayout, as marker boundaries are cached in RenderSVGPath. 142ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (inheritedResources != other->inheritedResources) 143ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceLayout; 144ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 145ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // All text related properties influence layout. 146ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (svg_inherited_flags._textAnchor != other->svg_inherited_flags._textAnchor 147ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._writingMode != other->svg_inherited_flags._writingMode 148ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._glyphOrientationHorizontal != other->svg_inherited_flags._glyphOrientationHorizontal 149ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._glyphOrientationVertical != other->svg_inherited_flags._glyphOrientationVertical 150ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_noninherited_flags.f._alignmentBaseline != other->svg_noninherited_flags.f._alignmentBaseline 151ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_noninherited_flags.f._dominantBaseline != other->svg_noninherited_flags.f._dominantBaseline 152ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_noninherited_flags.f._baselineShift != other->svg_noninherited_flags.f._baselineShift) 153ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceLayout; 154ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 155ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Text related properties influence layout. 156ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool miscNotEqual = misc != other->misc; 157ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (miscNotEqual && misc->baselineShiftValue != other->misc->baselineShiftValue) 158ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceLayout; 159ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 160ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // These properties affect the cached stroke bounding box rects. 161ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (svg_inherited_flags._capStyle != other->svg_inherited_flags._capStyle 162ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._joinStyle != other->svg_inherited_flags._joinStyle) 163ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceLayout; 164ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 1655ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // Shadow changes require relayouts, as they affect the repaint rects. 1665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (shadowSVG != other->shadowSVG) 1675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return StyleDifferenceLayout; 1685ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 169ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Some stroke properties, requires relayouts, as the cached stroke boundaries need to be recalculated. 170ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (stroke != other->stroke) { 171ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (stroke->width != other->stroke->width 17254cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block || stroke->paint != other->stroke->paint 173ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || stroke->miterLimit != other->stroke->miterLimit 174ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || stroke->dashArray != other->stroke->dashArray 175ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || stroke->dashOffset != other->stroke->dashOffset) 176ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceLayout; 177ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 178db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // Only the stroke-opacity case remains, where we only need a repaint. 179db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block ASSERT(stroke->opacity != other->stroke->opacity); 180ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceRepaint; 181ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block } 182ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 183ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // NOTE: All comparisions below may only return StyleDifferenceRepaint 184ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 185ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Painting related properties only need repaints. 186ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (miscNotEqual) { 187ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (misc->floodColor != other->misc->floodColor 188ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || misc->floodOpacity != other->misc->floodOpacity 189ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || misc->lightingColor != other->misc->lightingColor) 190ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceRepaint; 191ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block } 192ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 193a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If fill changes, we just need to repaint. Fill boundaries are not influenced by this, only by the Path, that RenderSVGPath contains. 19454cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block if (fill != other->fill) 195ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceRepaint; 196ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 197ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // If gradient stops change, we just need to repaint. Style updates are already handled through RenderSVGGradientSTop. 198ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (stops != other->stops) 199ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceRepaint; 200ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 201ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Changes of these flags only cause repaints. 202ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (svg_inherited_flags._colorRendering != other->svg_inherited_flags._colorRendering 203ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._imageRendering != other->svg_inherited_flags._imageRendering 204ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._shapeRendering != other->svg_inherited_flags._shapeRendering 205ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._clipRule != other->svg_inherited_flags._clipRule 206ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._fillRule != other->svg_inherited_flags._fillRule 207ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._colorInterpolation != other->svg_inherited_flags._colorInterpolation 208ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block || svg_inherited_flags._colorInterpolationFilters != other->svg_inherited_flags._colorInterpolationFilters) 209ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceRepaint; 210ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 211ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // FIXME: vector-effect is not taken into account in the layout-phase. Once this is fixed, we should relayout here. 212ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (svg_noninherited_flags.f._vectorEffect != other->svg_noninherited_flags.f._vectorEffect) 213ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceRepaint; 214ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 215ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return StyleDifferenceEqual; 216ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 217ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG) 221