18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org>
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2006, 2009 Apple Inc. All rights reserved.
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2007 Rob Buis <buis@kde.org>
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2009 Google, Inc.
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * This library is free software; you can redistribute it and/or
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modify it under the terms of the GNU Library General Public
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * License as published by the Free Software Foundation; either
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * version 2 of the License, or (at your option) any later version.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * This library is distributed in the hope that it will be useful,
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Library General Public License for more details.
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * You should have received a copy of the GNU Library General Public License
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Boston, MA 02110-1301, USA.
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RenderSVGImage_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RenderSVGImage_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"
305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "RenderSVGModelObject.h"
31d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "SVGPreserveAspectRatio.h"
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "SVGRenderSupport.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenclass RenderImageResource;
37692e5dbf12901edacf14812a6fae25462920af42Steve Blockclass SVGImageElement;
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
395ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenclass RenderSVGImage : public RenderSVGModelObject {
40692e5dbf12901edacf14812a6fae25462920af42Steve Blockpublic:
41692e5dbf12901edacf14812a6fae25462920af42Steve Block    RenderSVGImage(SVGImageElement*);
425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual ~RenderSVGImage();
435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; }
45a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual void updateFromElement();
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    RenderImageResource* imageResource() { return m_imageResource.get(); }
485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    const RenderImageResource* imageResource() const { return m_imageResource.get(); }
495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
50692e5dbf12901edacf14812a6fae25462920af42Steve Blockprivate:
51692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual const char* renderName() const { return "RenderSVGImage"; }
52692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual bool isSVGImage() const { return true; }
535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
54692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual const AffineTransform& localToParentTransform() const { return m_localTransform; }
555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual FloatRect objectBoundingBox() const { return m_objectBoundingBox; }
57a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual FloatRect strokeBoundingBox() const { return m_objectBoundingBox; }
58a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual FloatRect repaintRectInLocalCoordinates() const { return m_repaintBoundingBox; }
595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
60692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual void addFocusRingRects(Vector<IntRect>&, int tx, int ty);
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
62692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
635ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
64692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual void layout();
65692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual void paint(PaintInfo&, int parentX, int parentY);
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
67692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual bool requiresLayer() const { return false; }
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
69692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction);
705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
71692e5dbf12901edacf14812a6fae25462920af42Steve Block    virtual AffineTransform localTransform() const { return m_localTransform; }
72692e5dbf12901edacf14812a6fae25462920af42Steve Block
73a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    bool m_updateCachedRepaintRect : 1;
74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool m_needsTransformUpdate : 1;
75692e5dbf12901edacf14812a6fae25462920af42Steve Block    AffineTransform m_localTransform;
76a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    FloatRect m_objectBoundingBox;
77a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    FloatRect m_repaintBoundingBox;
785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    OwnPtr<RenderImageResource> m_imageResource;
79692e5dbf12901edacf14812a6fae25462920af42Steve Block};
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
81f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickinline RenderSVGImage* toRenderSVGImage(RenderObject* object)
82f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
83f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    ASSERT(!object || object->isSVGImage());
84f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return static_cast<RenderSVGImage*>(object);
85f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
86f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
87f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickinline const RenderSVGImage* toRenderSVGImage(const RenderObject* object)
88f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
89f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    ASSERT(!object || object->isSVGImage());
90f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return static_cast<const RenderSVGImage*>(object);
91f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
92f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
93f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick// This will catch anyone doing an unnecessary cast.
94f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid toRenderSVGImage(const RenderSVGImage*);
95f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG)
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RenderSVGImage_h
100