15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2004, 2005, 2010 Rob Buis <buis@kde.org> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) Research In Motion Limited 2010. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Based on khtml code by: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 2002-2003 Dirk Mueller (mueller@kde.org) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Copyright (C) 2002 Apple Computer, Inc. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) This library is free software; you can redistribute it and/or 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) modify it under the terms of the GNU Library General Public 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) License as published by the Free Software Foundation; either 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) version 2 of the License, or (at your option) any later version. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) This library is distributed in the hope that it will be useful, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) but WITHOUT ANY WARRANTY; without even the implied warranty of 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Library General Public License for more details. 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) You should have received a copy of the GNU Library General Public License 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) along with this library; see the file COPYING.LIB. If not, write to 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Boston, MA 02110-1301, USA. 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/SVGRenderStyle.h" 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SVGRenderStyle::SVGRenderStyle() 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static SVGRenderStyle* defaultStyle = new SVGRenderStyle(CreateDefault); 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = defaultStyle->fill; 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stroke = defaultStyle->stroke; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stops = defaultStyle->stops; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) misc = defaultStyle->misc; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inheritedResources = defaultStyle->inheritedResources; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resources = defaultStyle->resources; 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setBitDefaults(); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SVGRenderStyle::SVGRenderStyle(CreateDefaultType) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setBitDefaults(); 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill.init(); 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stroke.init(); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stops.init(); 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) misc.init(); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inheritedResources.init(); 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resources.init(); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SVGRenderStyle::SVGRenderStyle(const SVGRenderStyle& other) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : RefCounted<SVGRenderStyle>() 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = other.fill; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stroke = other.stroke; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stops = other.stops; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) misc = other.misc; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inheritedResources = other.inheritedResources; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resources = other.resources; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) svg_inherited_flags = other.svg_inherited_flags; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) svg_noninherited_flags = other.svg_noninherited_flags; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SVGRenderStyle::~SVGRenderStyle() 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool SVGRenderStyle::operator==(const SVGRenderStyle& other) const 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fill == other.fill 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && stroke == other.stroke 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && stops == other.stops 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && misc == other.misc 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && inheritedResources == other.inheritedResources 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && resources == other.resources 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && svg_inherited_flags == other.svg_inherited_flags 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && svg_noninherited_flags == other.svg_noninherited_flags; 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool SVGRenderStyle::inheritedNotEqual(const SVGRenderStyle* other) const 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fill != other->fill 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || stroke != other->stroke 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || inheritedResources != other->inheritedResources 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags != other->svg_inherited_flags; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SVGRenderStyle::inheritFrom(const SVGRenderStyle* svgInheritParent) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!svgInheritParent) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fill = svgInheritParent->fill; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stroke = svgInheritParent->stroke; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inheritedResources = svgInheritParent->inheritedResources; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) svg_inherited_flags = svgInheritParent->svg_inherited_flags; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SVGRenderStyle::copyNonInheritedFrom(const SVGRenderStyle* other) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) svg_noninherited_flags = other->svg_noninherited_flags; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stops = other->stops; 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) misc = other->misc; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resources = other->resources; 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 118f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuStyleDifference SVGRenderStyle::diff(const SVGRenderStyle* other) const 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 120f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu StyleDifference styleDifference; 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 122e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (diffNeedsLayoutAndPaintInvalidation(other)) { 123f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu styleDifference.setNeedsFullLayout(); 124e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) styleDifference.setNeedsPaintInvalidationObject(); 125e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } else if (diffNeedsPaintInvalidation(other)) { 126e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) styleDifference.setNeedsPaintInvalidationObject(); 127d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 128f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 129f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return styleDifference; 130f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 131f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 132e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)bool SVGRenderStyle::diffNeedsLayoutAndPaintInvalidation(const SVGRenderStyle* other) const 133f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{ 134e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // If resources change, we need a relayout, as the presence of resources influences the paint invalidation rect. 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resources != other->resources) 136f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If markers change, we need a relayout, as marker boundaries are cached in RenderSVGPath. 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inheritedResources != other->inheritedResources) 140f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // All text related properties influence layout. 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (svg_inherited_flags._textAnchor != other->svg_inherited_flags._textAnchor 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._writingMode != other->svg_inherited_flags._writingMode 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._glyphOrientationHorizontal != other->svg_inherited_flags._glyphOrientationHorizontal 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._glyphOrientationVertical != other->svg_inherited_flags._glyphOrientationVertical 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_noninherited_flags.f._alignmentBaseline != other->svg_noninherited_flags.f._alignmentBaseline 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_noninherited_flags.f._dominantBaseline != other->svg_noninherited_flags.f._dominantBaseline 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_noninherited_flags.f._baselineShift != other->svg_noninherited_flags.f._baselineShift) 150f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Text related properties influence layout. 153323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (misc->baselineShiftValue != other->misc->baselineShiftValue) 154f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These properties affect the cached stroke bounding box rects. 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (svg_inherited_flags._capStyle != other->svg_inherited_flags._capStyle 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._joinStyle != other->svg_inherited_flags._joinStyle) 159f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 160f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 161f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu // vector-effect changes require a re-layout. 162f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (svg_noninherited_flags.f._vectorEffect != other->svg_noninherited_flags.f._vectorEffect) 163f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Some stroke properties, requires relayouts, as the cached stroke boundaries need to be recalculated. 166323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (stroke.get() != other->stroke.get()) { 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (stroke->width != other->stroke->width 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || stroke->paintType != other->stroke->paintType 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || stroke->paintColor != other->stroke->paintColor 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || stroke->paintUri != other->stroke->paintUri 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || stroke->miterLimit != other->stroke->miterLimit 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || stroke->dashArray != other->stroke->dashArray 173e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) || stroke->dashOffset != other->stroke->dashOffset 174e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) || stroke->visitedLinkPaintColor != other->stroke->visitedLinkPaintColor 175e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) || stroke->visitedLinkPaintUri != other->stroke->visitedLinkPaintUri 176e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) || stroke->visitedLinkPaintType != other->stroke->visitedLinkPaintType) 177f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 180f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return false; 181f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 182521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 183e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)bool SVGRenderStyle::diffNeedsPaintInvalidation(const SVGRenderStyle* other) const 184f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{ 185f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (stroke->opacity != other->stroke->opacity) 186f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 188e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // Painting related properties only need paint invalidation. 189323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (misc.get() != other->misc.get()) { 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (misc->floodColor != other->misc->floodColor 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || misc->floodOpacity != other->misc->floodOpacity 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || misc->lightingColor != other->misc->lightingColor) 193f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 196e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // If fill changes, we just need to issue paint invalidations. Fill boundaries are not influenced by this, only by the Path, that RenderSVGPath contains. 197323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (fill.get() != other->fill.get()) { 198323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (fill->paintType != other->fill->paintType 199323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) || fill->paintColor != other->fill->paintColor 200323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) || fill->paintUri != other->fill->paintUri 201323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) || fill->opacity != other->fill->opacity) 202323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return true; 203323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 205e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // If gradient stops change, we just need to issue paint invalidations. Style updates are already handled through RenderSVGGradientSTop. 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (stops != other->stops) 207f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 209e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // Changes of these flags only cause paint invalidations. 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (svg_inherited_flags._colorRendering != other->svg_inherited_flags._colorRendering 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._shapeRendering != other->svg_inherited_flags._shapeRendering 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._clipRule != other->svg_inherited_flags._clipRule 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._fillRule != other->svg_inherited_flags._fillRule 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || svg_inherited_flags._colorInterpolation != other->svg_inherited_flags._colorInterpolation 21551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) || svg_inherited_flags._colorInterpolationFilters != other->svg_inherited_flags._colorInterpolationFilters 21651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) || svg_inherited_flags._paintOrder != other->svg_inherited_flags._paintOrder) 217f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (svg_noninherited_flags.f.bufferedRendering != other->svg_noninherited_flags.f.bufferedRendering) 220f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 22153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (svg_noninherited_flags.f.maskType != other->svg_noninherited_flags.f.maskType) 223f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return true; 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 225f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return false; 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 228e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)EPaintOrderType SVGRenderStyle::paintOrderType(unsigned index) const 229e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 230e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) ASSERT(index < ((1 << kPaintOrderBitwidth)-1)); 231e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) unsigned pt = (paintOrder() >> (kPaintOrderBitwidth*index)) & ((1u << kPaintOrderBitwidth) - 1); 232e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) return (EPaintOrderType)pt; 233e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 234e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 236