File indexing completed on 2024-11-10 09:39:09
0001 /* 0002 * This file is part of the WebKit project. 0003 * 0004 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 0005 * 0006 * This library is free software; you can redistribute it and/or 0007 * modify it under the terms of the GNU Library General Public 0008 * License as published by the Free Software Foundation; either 0009 * version 2 of the License, or (at your option) any later version. 0010 * 0011 * This library is distributed in the hope that it will be useful, 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0014 * Library General Public License for more details. 0015 * 0016 * You should have received a copy of the GNU Library General Public License 0017 * along with this library; see the file COPYING.LIB. If not, write to 0018 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0019 * Boston, MA 02110-1301, USA. 0020 * 0021 */ 0022 0023 #include "wtf/Platform.h" 0024 0025 #if ENABLE(SVG) 0026 #include "RenderSVGGradientStop.h" 0027 0028 #include "SVGGradientElement.h" 0029 #include "SVGNames.h" 0030 #include "SVGStopElement.h" 0031 0032 namespace WebCore 0033 { 0034 0035 using namespace SVGNames; 0036 0037 RenderSVGGradientStop::RenderSVGGradientStop(SVGStopElement *element) 0038 : RenderObject(element) 0039 { 0040 } 0041 0042 RenderSVGGradientStop::~RenderSVGGradientStop() 0043 { 0044 } 0045 0046 void RenderSVGGradientStop::setStyle(RenderStyle *style) 0047 { 0048 RenderObject::setStyle(style); 0049 0050 // <stop> elements should only be allowed to make renderers under gradient elements 0051 // but I can imagine a few cases we might not be catching, so let's not crash if our parent isn't a gradient. 0052 if (SVGGradientElement *gradient = gradientElement()) { 0053 if (SVGResource *resource = gradient->canvasResource()) { 0054 resource->invalidate(); 0055 } 0056 } 0057 } 0058 0059 void RenderSVGGradientStop::layout() 0060 { 0061 setNeedsLayout(false); 0062 } 0063 0064 SVGGradientElement *RenderSVGGradientStop::gradientElement() const 0065 { 0066 Node *parentNode = element()->parent(); 0067 if (parentNode->hasTagName(linearGradientTag) || parentNode->hasTagName(radialGradientTag)) { 0068 return static_cast<SVGGradientElement *>(parentNode); 0069 } 0070 return nullptr; 0071 } 0072 0073 } 0074 0075 #endif // ENABLE(SVG)