30003c88a7b75a8fd4820f420333caec170d93b1
[WebKit-https.git] / WebCore / kcanvas / KCanvasResources.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 KCanvasResources_H
24 #define KCanvasResources_H
25
26 #include <qstring.h>
27 #include <q3valuelist.h>
28
29 #include <kcanvas/RenderPath.h>
30 #include <kcanvas/KCanvasPath.h>
31 #include <kcanvas/KCanvasResourceListener.h>
32
33 class QTextStream;
34
35 // Enumerations
36 typedef enum
37 {
38     // Painting mode
39     RS_CLIPPER = 0,
40     RS_MARKER = 1,
41     RS_IMAGE = 2,
42     RS_FILTER = 3
43 } KCResourceType;
44
45 class KCanvasMatrix;
46 class KRenderingPaintServer;
47
48 class KCanvasResource
49 {
50 public:
51     KCanvasResource();
52     virtual ~KCanvasResource();
53
54     virtual void invalidate();
55     void addClient(RenderPath *item);
56
57     const KCanvasItemList &clients() const;
58     
59     QString idInRegistry() const;
60     void setIdInRegistry(const QString& newId);
61     
62     virtual bool isPaintServer() const { return false; }
63     virtual bool isFilter() const { return false; }
64     virtual bool isClipper() const { return false; }
65     virtual bool isMarker() const { return false; }
66     
67     virtual QTextStream& externalRepresentation(QTextStream &) const; 
68 private:
69     KCanvasItemList m_clients;
70     QString registryId;
71 };
72
73 class KCanvasClipper : public KCanvasResource
74 {
75 public:
76     KCanvasClipper();
77     virtual ~KCanvasClipper();
78     
79     virtual bool isClipper() const { return true; }
80
81     void resetClipData();
82     void addClipData(KCanvasPath *path, KCWindRule rule, bool bboxUnits);
83
84     KCClipDataList clipData() const;
85
86     QTextStream& externalRepresentation(QTextStream &) const; 
87 protected:
88     KCClipDataList m_clipData;
89 };
90
91 class KCanvasMarker : public KCanvasResource
92 {
93 public:
94     KCanvasMarker(khtml::RenderObject *marker = 0);
95     virtual ~KCanvasMarker();
96     
97     virtual bool isMarker() const { return true; }
98
99     void setMarker(khtml::RenderObject *marker);
100     
101     void setRef(double refX, double refY);
102     double refX() const;    
103     double refY() const;
104     
105     void setAngle(float angle);
106     void setAutoAngle();
107     float angle() const;
108
109     void setUseStrokeWidth(bool useStrokeWidth = true);
110     bool useStrokeWidth() const;
111
112     void setScale(float scaleX, float scaleY);
113     float scaleX() const;
114     float scaleY() const;
115
116      // Draw onto the canvas
117     void draw(const QRectF &rect, double x, double y, double strokeWidth = 1., double angle = 0.0);
118
119     QTextStream& externalRepresentation(QTextStream &) const; 
120 private:
121     double m_refX, m_refY;
122     float m_angle, m_scaleX, m_scaleY;
123     khtml::RenderObject *m_marker;
124     bool m_useStrokeWidth;
125 };
126
127 QTextStream &operator<<(QTextStream &ts, const KCanvasResource &r);
128
129 KCanvasResource *getResourceById(KDOM::DocumentImpl *document, const KDOM::DOMString &id);
130 KCanvasMarker *getMarkerById(KDOM::DocumentImpl *document, const KDOM::DOMString &id);
131 KCanvasClipper *getClipperById(KDOM::DocumentImpl *document, const KDOM::DOMString &id);
132 KRenderingPaintServer *getPaintServerById(KDOM::DocumentImpl *document, const KDOM::DOMString &id);
133
134 #endif
135
136 // vim:ts=4:noet