1 /* 2 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20 #ifndef RenderSVGResource_h 21 #define RenderSVGResource_h 22 23 #if ENABLE(SVG) 24 #include "RenderStyleConstants.h" 25 #include "SVGDocumentExtensions.h" 26 27 namespace WebCore { 28 29 enum RenderSVGResourceType { 30 MaskerResourceType, 31 MarkerResourceType, 32 PatternResourceType, 33 LinearGradientResourceType, 34 RadialGradientResourceType, 35 SolidColorResourceType, 36 FilterResourceType, 37 ClipperResourceType 38 }; 39 40 enum RenderSVGResourceMode { 41 ApplyToDefaultMode = 1 << 0, // used for all resources except gradient/pattern 42 ApplyToFillMode = 1 << 1, 43 ApplyToStrokeMode = 1 << 2, 44 ApplyToTextMode = 1 << 3 // used in combination with ApplyTo{Fill|Stroke}Mode 45 }; 46 47 class Color; 48 class FloatRect; 49 class GraphicsContext; 50 class Path; 51 class RenderObject; 52 class RenderStyle; 53 class RenderSVGResourceSolidColor; 54 55 class RenderSVGResource { 56 public: 57 RenderSVGResource() { } 58 virtual ~RenderSVGResource() { } 59 60 virtual void removeAllClientsFromCache(bool markForInvalidation = true) = 0; 61 virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true) = 0; 62 63 virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode) = 0; 64 virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short, const Path*) { } 65 virtual FloatRect resourceBoundingBox(RenderObject*) = 0; 66 67 virtual RenderSVGResourceType resourceType() const = 0; 68 69 template<class Renderer> 70 Renderer* cast() 71 { 72 if (Renderer::s_resourceType == resourceType()) 73 return static_cast<Renderer*>(this); 74 75 return 0; 76 } 77 78 // Helper utilities used in the render tree to access resources used for painting shapes/text (gradients & patterns & solid colors only) 79 static RenderSVGResource* fillPaintingResource(RenderObject*, const RenderStyle*, Color& fallbackColor); 80 static RenderSVGResource* strokePaintingResource(RenderObject*, const RenderStyle*, Color& fallbackColor); 81 static RenderSVGResourceSolidColor* sharedSolidPaintingResource(); 82 83 static void markForLayoutAndParentResourceInvalidation(RenderObject*, bool needsLayout = true); 84 }; 85 86 } 87 88 #endif 89 #endif 90