18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org>
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2009 Google, Inc.
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2009 Apple Inc. All rights reserved.
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * This library is free software; you can redistribute it and/or
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modify it under the terms of the GNU Library General Public
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * License as published by the Free Software Foundation; either
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * version 2 of the License, or (at your option) any later version.
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * This library is distributed in the hope that it will be useful,
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Library General Public License for more details.
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * You should have received a copy of the GNU Library General Public License
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Boston, MA 02110-1301, USA.
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RenderSVGViewportContainer_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RenderSVGViewportContainer_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSVGContainer.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian// This is used for non-root <svg> elements and <marker> elements, neither of which are SVGTransformable
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian// thus we inherit from RenderSVGContainer instead of RenderSVGTransformableContainer
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderSVGViewportContainer : public RenderSVGContainer {
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
35a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    explicit RenderSVGViewportContainer(SVGStyledElement*);
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate:
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual bool isSVGContainer() const { return true; }
396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    virtual bool isSVGViewportContainer() const { return true; }
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual const char* renderName() const { return "RenderSVGViewportContainer"; }
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    AffineTransform viewportTransform() const;
438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    virtual const AffineTransform& localToParentTransform() const;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual void calcViewport();
465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual void applyViewportClip(PaintInfo&);
485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual bool pointIsInsideViewportClip(const FloatPoint& pointInParent);
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FloatRect m_viewport;
518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    mutable AffineTransform m_localToParentTransform;
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochinline RenderSVGViewportContainer* toRenderSVGViewportContainer(RenderObject* object)
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(!object || !strcmp(object->renderName(), "RenderSVGViewportContainer"));
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return static_cast<RenderSVGViewportContainer*>(object);
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will catch anyone doing an unnecessary cast.
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid toRenderSVGViewportContainer(const RenderSVGViewportContainer*);
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG)
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RenderSVGViewportContainer_h
67