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