Reviewed by Maciej.
[WebKit-https.git] / WebCore / kcanvas / device / KRenderingDevice.h
1 /*
2     Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4
5     This file is part of the KDE project
6
7     This library is free software; you can redistribute it and/or
8     modify it under the terms of the GNU Library General Public
9     License as published by the Free Software Foundation; either
10     version 2 of the License, or (at your option) any later version.
11
12     This library is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15     Library General Public License for more details.
16
17     You should have received a copy of the GNU Library General Public License
18     aint with this library; see the file COPYING.LIB.  If not, write to
19     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20     Boston, MA 02111-1307, USA.
21 */
22
23 #ifndef KRenderingDevice_H
24 #define KRenderingDevice_H
25
26 #ifdef SVG_SUPPORT
27
28 #include "SVGFilterEffect.h"
29 #include "SVGPaintServer.h"
30
31 namespace WebCore {
32
33 class AffineTransform;
34 class GraphicsContext;
35 class Path;
36
37 // aka where to draw
38 class KRenderingDeviceContext
39 {
40 public:
41     KRenderingDeviceContext() { }
42     virtual ~KRenderingDeviceContext() { }
43
44     virtual AffineTransform concatCTM(const AffineTransform&) = 0;
45     virtual AffineTransform ctm() const = 0;
46         
47     virtual void clearPath() = 0;
48     virtual void addPath(const Path&) = 0;
49
50     virtual GraphicsContext* createGraphicsContext() = 0;
51 };
52
53 class SVGResourceImage;
54 class SVGResourceFilterEffect;
55 class KRenderingDevice
56 {
57 public:
58     KRenderingDevice();
59     virtual ~KRenderingDevice();
60
61     // The rendering device will be directly inited
62     // after the canvas target, it may be overwritten.
63     virtual bool isBuffered() const = 0;
64
65     // Global rendering device context
66     KRenderingDeviceContext* currentContext() const;
67
68     virtual KRenderingDeviceContext* popContext();
69     virtual void pushContext(KRenderingDeviceContext*);
70     
71     virtual KRenderingDeviceContext* contextForImage(SVGResourceImage*) const = 0;
72
73     // Creation tools
74     virtual PassRefPtr<SVGResource> createResource(const SVGResourceType&) const = 0;
75     virtual SVGFilterEffect* createFilterEffect(const SVGFilterEffectType&) const = 0;
76     virtual PassRefPtr<SVGPaintServer> createPaintServer(const SVGPaintServerType&) const = 0;
77
78 private:
79     Vector<KRenderingDeviceContext*> m_contextStack;
80 };
81
82 KRenderingDevice* renderingDevice(); /* returns the single global rendering device */
83
84 }
85
86 #endif // SVG_SUPPORT
87 #endif
88
89 // vim:ts=4:noet