1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This library is free software; you can redistribute it and/or 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * modify it under the terms of the GNU Library General Public 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * License as published by the Free Software Foundation; either 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * version 2 of the License, or (at your option) any later version. 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This library is distributed in the hope that it will be useful, 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * but WITHOUT ANY WARRANTY; without even the implied warranty of 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Library General Public License for more details. 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * You should have received a copy of the GNU Library General Public License 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * along with this library; see the file COPYING.LIB. If not, write to 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Boston, MA 02110-1301, USA. 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef RenderSVGResourceMarker_h 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define RenderSVGResourceMarker_h 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(SVG) 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FloatRect.h" 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "RenderObject.h" 2621939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "RenderSVGResourceContainer.h" 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SVGMarkerElement.h" 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SVGStyledElement.h" 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/HashSet.h> 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace WebCore { 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass AffineTransform; 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3621939df44de1705786c545cd1bf519d47250322dBen Murdochclass RenderSVGResourceMarker : public RenderSVGResourceContainer { 37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic: 3821939df44de1705786c545cd1bf519d47250322dBen Murdoch RenderSVGResourceMarker(SVGMarkerElement*); 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual ~RenderSVGResourceMarker(); 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual const char* renderName() const { return "RenderSVGResourceMarker"; } 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 43f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick virtual void removeAllClientsFromCache(bool markForInvalidation = true); 44f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true); 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 46ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void draw(PaintInfo&, const AffineTransform&); 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Calculates marker boundaries, mapped to the target element's coordinate space 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block FloatRect markerBoundaries(const AffineTransform& markerTransformation) const; 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void applyViewportClip(PaintInfo&); 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void layout(); 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void calcViewport(); 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual const AffineTransform& localToParentTransform() const; 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block AffineTransform markerTransformation(const FloatPoint& origin, float angle, float strokeWidth) const; 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5821939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short) { return false; } 59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); } 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block FloatPoint referencePoint() const; 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float angle() const; 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block SVGMarkerElement::SVGMarkerUnitsType markerUnits() const { return static_cast<SVGMarkerElement::SVGMarkerUnitsType>(static_cast<SVGMarkerElement*>(node())->markerUnits()); } 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual RenderSVGResourceType resourceType() const { return s_resourceType; } 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static RenderSVGResourceType s_resourceType; 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprivate: 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Generates a transformation matrix usable to render marker content. Handles scaling the marker content 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // acording to SVGs markerUnits="strokeWidth" concept, when a strokeWidth value != -1 is passed in. 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block AffineTransform markerContentTransformation(const AffineTransform& contentTransformation, const FloatPoint& origin, float strokeWidth = -1) const; 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block AffineTransform viewportTransform() const; 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mutable AffineTransform m_localToParentTransform; 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block FloatRect m_viewport; 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 83