18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2004, 2005 Rob Buis <buis@kde.org> 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2005 Eric Seidel <eric@webkit.org> 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2006 Apple Computer, Inc 65f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2009 Google, Inc. 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project This library is free software; you can redistribute it and/or 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project modify it under the terms of the GNU Library General Public 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project License as published by the Free Software Foundation; either 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version 2 of the License, or (at your option) any later version. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project This library is distributed in the hope that it will be useful, 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project but WITHOUT ANY WARRANTY; without even the implied warranty of 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Library General Public License for more details. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project You should have received a copy of the GNU Library General Public License 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project aint with this library; see the file COPYING.LIB. If not, write to 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Boston, MA 02110-1301, USA. 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RenderPath_h 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RenderPath_h 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) 288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#include "AffineTransform.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FloatRect.h" 305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "RenderSVGModelObject.h" 31d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "SVGMarkerLayoutInfo.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass FloatPoint; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderSVGContainer; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass SVGStyledTransformableElement; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianclass RenderPath : public RenderSVGModelObject { 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RenderPath(SVGStyledTransformableElement*); 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43d0825bca7fe65beaee391d30da42e937db621564Steve Block const Path& path() const { return m_path; } 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate: 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Hit-detection seperated for the fill and the stroke 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool fillContains(const FloatPoint&, bool requiresFill = true) const; 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool strokeContains(const FloatPoint&, bool requiresStroke = true) const; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual FloatRect objectBoundingBox() const; 51d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual FloatRect strokeBoundingBox() const; 52d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual FloatRect markerBoundingBox() const; 535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual FloatRect repaintRectInLocalCoordinates() const; 545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block virtual const AffineTransform& localToParentTransform() const; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void setPath(const Path&); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isRenderPath() const { return true; } 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual const char* renderName() const { return "RenderPath"; } 615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void layout(); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void paint(PaintInfo&, int parentX, int parentY); 64d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void addFocusRingRects(Vector<IntRect>&, int tx, int ty); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 68d0825bca7fe65beaee391d30da42e937db621564Steve Block void calculateMarkerBoundsIfNeeded() const; 695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block virtual AffineTransform localTransform() const; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mutable Path m_path; 745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian mutable FloatRect m_cachedLocalFillBBox; 75d0825bca7fe65beaee391d30da42e937db621564Steve Block mutable FloatRect m_cachedLocalStrokeBBox; 765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian mutable FloatRect m_cachedLocalRepaintRect; 77d0825bca7fe65beaee391d30da42e937db621564Steve Block mutable FloatRect m_cachedLocalMarkerBBox; 78d0825bca7fe65beaee391d30da42e937db621564Steve Block mutable SVGMarkerLayoutInfo m_markerLayoutInfo; 798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block AffineTransform m_localTransform; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochinline RenderPath* toRenderPath(RenderObject* object) 830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(!object || object->isRenderPath()); 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<RenderPath*>(object); 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochinline const RenderPath* toRenderPath(const RenderObject* object) 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(!object || object->isRenderPath()); 910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<const RenderPath*>(object); 920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will catch anyone doing an unnecessary cast. 950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid toRenderPath(const RenderPath*); 960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG) 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 101