Home | History | Annotate | Download | only in svg
      1 /**
      2  * Copyright (C) 2007 Rob Buis <buis (at) kde.org>
      3  * Copyright (C) 2007 Nikolas Zimmermann <zimmermann (at) kde.org>
      4  * Copyright (C) 2007 Eric Seidel <eric (at) webkit.org>
      5  * Copyright (C) 2009 Google, Inc.  All rights reserved.
      6  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
      7  *
      8  * This library is free software; you can redistribute it and/or
      9  * modify it under the terms of the GNU Library General Public
     10  * License as published by the Free Software Foundation; either
     11  * version 2 of the License, or (at your option) any later version.
     12  *
     13  * This library is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     16  * Library General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU Library General Public License
     19  * along with this library; see the file COPYING.LIB.  If not, write to
     20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     21  * Boston, MA 02110-1301, USA.
     22  */
     23 
     24 #ifndef SVGRenderSupport_h
     25 #define SVGRenderSupport_h
     26 
     27 #if ENABLE(SVG)
     28 #include "PaintInfo.h"
     29 
     30 namespace WebCore {
     31 
     32 class FloatPoint;
     33 class FloatRect;
     34 class ImageBuffer;
     35 class RenderBoxModelObject;
     36 class RenderObject;
     37 class RenderStyle;
     38 class RenderSVGRoot;
     39 class TransformState;
     40 
     41 // SVGRendererSupport is a helper class sharing code between all SVG renderers.
     42 class SVGRenderSupport {
     43 public:
     44     // Used by all SVG renderers who apply clip/filter/etc. resources to the renderer content
     45     static bool prepareToRenderSVGContent(RenderObject*, PaintInfo&);
     46     static void finishRenderSVGContent(RenderObject*, PaintInfo&, GraphicsContext* savedContext);
     47 
     48     // Shares child layouting code between RenderSVGRoot/RenderSVG(Hidden)Container
     49     static void layoutChildren(RenderObject*, bool selfNeedsLayout);
     50 
     51     // Helper function determining wheter overflow is hidden
     52     static bool isOverflowHidden(const RenderObject*);
     53 
     54     // Calculates the repaintRect in combination with filter, clipper and masker in local coordinates.
     55     static void intersectRepaintRectWithResources(const RenderObject*, FloatRect&);
     56 
     57     // Determines whether the passed point lies in a clipping area
     58     static bool pointInClippingArea(RenderObject*, const FloatPoint&);
     59 
     60     static void computeContainerBoundingBoxes(const RenderObject* container, FloatRect& objectBoundingBox, FloatRect& strokeBoundingBox, FloatRect& repaintBoundingBox);
     61     static bool paintInfoIntersectsRepaintRect(const FloatRect& localRepaintRect, const AffineTransform& localTransform, const PaintInfo&);
     62 
     63     // Important functions used by nearly all SVG renderers centralizing coordinate transformations / repaint rect calculations
     64     static IntRect clippedOverflowRectForRepaint(RenderObject*, RenderBoxModelObject* repaintContainer);
     65     static void computeRectForRepaint(RenderObject*, RenderBoxModelObject* repaintContainer, IntRect&, bool fixed);
     66     static void mapLocalToContainer(const RenderObject*, RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&);
     67 
     68     // Shared between SVG renderers and resources.
     69     static void applyStrokeStyleToContext(GraphicsContext*, const RenderStyle*, const RenderObject*);
     70 
     71     // FIXME: These methods do not belong here.
     72     static const RenderSVGRoot* findTreeRootObject(const RenderObject*);
     73 
     74 private:
     75     // This class is not constructable.
     76     SVGRenderSupport();
     77     ~SVGRenderSupport();
     78 };
     79 
     80 } // namespace WebCore
     81 
     82 #endif // ENABLE(SVG)
     83 #endif // SVGRenderSupport_h
     84