chalk

kis_canvas_painter.h
1/*
2 * Copyright (c) 2005 Adrian Page <adrian@pagenet.plus.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18
19#ifndef KIS_CANVAS_PAINTER_H_
20#define KIS_CANVAS_PAINTER_H_
21
22#ifdef HAVE_CONFIG_H
23#include <config.h>
24#endif
25
26#include <tqpainter.h>
27
28#include "kis_global.h"
29
30class KisCanvas;
31class KisCanvasWidget;
32
33class KisCanvasWidgetPainter {
34public:
35 KisCanvasWidgetPainter();
36 virtual ~KisCanvasWidgetPainter();
37
38 virtual bool begin(KisCanvasWidget *canvasWidget, bool unclipped = false) = 0;
39 virtual bool end();
40
41 virtual void save();
42 virtual void restore();
43
44 virtual TQFontMetrics fontMetrics() const;
45 virtual TQFontInfo fontInfo() const;
46
47 virtual const TQFont& font() const;
48 virtual void setFont(const TQFont&);
49 virtual const TQPen& pen() const;
50 virtual void setPen(const TQPen&);
51 virtual void setPen(TQt::PenStyle);
52 virtual void setPen(const TQColor&);
53 virtual const TQBrush&brush() const;
54 virtual void setBrush(const TQBrush&);
55 virtual void setBrush(TQt::BrushStyle);
56 virtual void setBrush(const TQColor&);
57 virtual TQPoint pos() const;
58
59 virtual const TQColor&backgroundColor() const;
60 virtual void setBackgroundColor(const TQColor&);
61 virtual TQt::BGMode backgroundMode() const;
62 virtual void setBackgroundMode(TQt::BGMode);
63 virtual TQt::RasterOp rasterOp() const;
64 virtual void setRasterOp(TQt::RasterOp);
65 virtual const TQPoint&brushOrigin() const;
66 virtual void setBrushOrigin(int x, int y);
67 virtual void setBrushOrigin(const TQPoint&);
68
69 virtual bool hasViewXForm() const;
70 virtual bool hasWorldXForm() const;
71
72 virtual void setViewXForm(bool);
73 virtual TQRect window() const;
74 virtual void setWindow(const TQRect&);
75 virtual void setWindow(int x, int y, int w, int h);
76 virtual TQRect viewport() const;
77 virtual void setViewport(const TQRect&);
78 virtual void setViewport(int x, int y, int w, int h);
79
80 virtual void setWorldXForm(bool);
81 virtual const TQWMatrix&worldMatrix() const;
82 virtual void setWorldMatrix(const TQWMatrix&, bool combine=false);
83
84 virtual void saveWorldMatrix();
85 virtual void restoreWorldMatrix();
86
87 virtual void scale(double sx, double sy);
88 virtual void shear(double sh, double sv);
89 virtual void rotate(double a);
90
91 virtual void translate(double dx, double dy);
92 virtual void resetXForm();
93 virtual double translationX() const;
94 virtual double translationY() const;
95
96 virtual TQPoint xForm(const TQPoint&) const;
97 virtual TQRect xForm(const TQRect&) const;
98 virtual TQPointArray xForm(const TQPointArray&) const;
99 virtual TQPointArray xForm(const TQPointArray&, int index, int npoints) const;
100 virtual TQPoint xFormDev(const TQPoint&) const;
101 virtual TQRect xFormDev(const TQRect&) const;
102 virtual TQPointArray xFormDev(const TQPointArray&) const;
103 virtual TQPointArray xFormDev(const TQPointArray&, int index, int npoints) const;
104
105 virtual void setClipping(bool);
106 virtual bool hasClipping() const;
107 virtual TQRegion clipRegion(TQPainter::CoordinateMode = TQPainter::CoordDevice) const;
108 virtual void setClipRect(const TQRect&, TQPainter::CoordinateMode = TQPainter::CoordDevice);
109 virtual void setClipRect(int x, int y, int w, int h, TQPainter::CoordinateMode = TQPainter::CoordDevice);
110 virtual void setClipRegion(const TQRegion&, TQPainter::CoordinateMode = TQPainter::CoordDevice);
111
112 virtual void drawPoint(int x, int y);
113 virtual void drawPoint(const TQPoint&);
114 virtual void drawPoints(const TQPointArray& a, int index=0, int npoints=-1);
115 virtual void moveTo(int x, int y);
116 virtual void moveTo(const TQPoint&);
117 virtual void lineTo(int x, int y);
118 virtual void lineTo(const TQPoint&);
119 virtual void drawLine(int x1, int y1, int x2, int y2);
120 virtual void drawLine(const TQPoint&, const TQPoint&);
121 virtual void drawRect(int x, int y, int w, int h);
122 virtual void drawRect(const TQRect&);
123 virtual void drawWinFocusRect(int x, int y, int w, int h);
124 virtual void drawWinFocusRect(int x, int y, int w, int h, const TQColor&bgColor);
125 virtual void drawWinFocusRect(const TQRect&);
126 virtual void drawWinFocusRect(const TQRect&, const TQColor&bgColor);
127 virtual void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
128 virtual void drawRoundRect(const TQRect&, int = 25, int = 25);
129 virtual void drawEllipse(int x, int y, int w, int h);
130 virtual void drawEllipse(const TQRect&);
131 virtual void drawArc(int x, int y, int w, int h, int a, int alen);
132 virtual void drawArc(const TQRect&, int a, int alen);
133 virtual void drawPie(int x, int y, int w, int h, int a, int alen);
134 virtual void drawPie(const TQRect&, int a, int alen);
135 virtual void drawChord(int x, int y, int w, int h, int a, int alen);
136 virtual void drawChord(const TQRect&, int a, int alen);
137 virtual void drawLineSegments(const TQPointArray&, int index=0, int nlines=-1);
138 virtual void drawPolyline(const TQPointArray&, int index=0, int npoints=-1);
139 virtual void drawPolygon(const TQPointArray&, bool winding=false, int index=0, int npoints=-1);
140 virtual void drawConvexPolygon(const TQPointArray&, int index=0, int npoints=-1);
141 virtual void drawCubicBezier(const TQPointArray&, int index=0);
142 virtual void drawPixmap(int x, int y, const TQPixmap&, int sx=0, int sy=0, int sw=-1, int sh=-1);
143 virtual void drawPixmap(const TQPoint&, const TQPixmap&, const TQRect&sr);
144 virtual void drawPixmap(const TQPoint&, const TQPixmap&);
145 virtual void drawPixmap(const TQRect&, const TQPixmap&);
146 virtual void drawImage(int x, int y, const TQImage&, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0);
147 virtual void drawImage(const TQPoint&, const TQImage&, const TQRect&sr, int conversionFlags = 0);
148 virtual void drawImage(const TQPoint&, const TQImage&, int conversion_flags = 0);
149 virtual void drawImage(const TQRect&, const TQImage&);
150 virtual void drawTiledPixmap(int x, int y, int w, int h, const TQPixmap&, int sx=0, int sy=0);
151 virtual void drawTiledPixmap(const TQRect&, const TQPixmap&, const TQPoint&);
152 virtual void drawTiledPixmap(const TQRect&, const TQPixmap&);
153 //virtual void drawPicture(const TQPicture&);
154 //virtual void drawPicture(int x, int y, const TQPicture&);
155 //virtual void drawPicture(const TQPoint&, const TQPicture&);
156
157 virtual void fillRect(int x, int y, int w, int h, const TQBrush&);
158 virtual void fillRect(const TQRect&, const TQBrush&);
159 virtual void eraseRect(int x, int y, int w, int h);
160 virtual void eraseRect(const TQRect&);
161
162 virtual void drawText(int x, int y, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);
163 virtual void drawText(const TQPoint&, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);
164
165 virtual void drawText(int x, int y, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);
166 virtual void drawText(const TQPoint&p, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);
167
168 virtual void drawText(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);
169 virtual void drawText(const TQRect&, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);
170
171 virtual void drawTextItem(int x, int y, const TQTextItem&ti, int textflags = 0);
172 virtual void drawTextItem(const TQPoint& p, const TQTextItem&ti, int textflags = 0);
173
174 virtual TQRect boundingRect(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQTextParag **intern=0);
175 virtual TQRect boundingRect(const TQRect&, int flags, const TQString&, int len = -1, TQTextParag **intern=0);
176
177 virtual int tabStops() const;
178 virtual void setTabStops(int);
179 virtual int *tabArray() const;
180 virtual void setTabArray(int *);
181
182protected:
183 TQFont m_defaultFont;
184 TQPen m_defaultPen;
185 TQBrush m_defaultBrush;
186 TQColor m_defaultColor;
187 TQPoint m_defaultBrushOrigin;
188 TQWMatrix m_defaultWorldMatrix;
189};
190
191class KisCanvasPainter {
192public:
193 KisCanvasPainter();
194 KisCanvasPainter(KisCanvas *canvas);
195 KisCanvasPainter(const TQPaintDevice *paintDevice);
196
197 ~KisCanvasPainter();
198
199 bool begin(KisCanvas *canvas, bool unclipped = false);
200 bool begin(const TQPaintDevice *paintDevice, bool unclipped = false);
201
202 bool end();
203
204 void save();
205 void restore();
206
207 TQFontMetrics fontMetrics() const;
208 TQFontInfo fontInfo() const;
209
210 const TQFont& font() const;
211 void setFont(const TQFont&);
212 const TQPen& pen() const;
213 void setPen(const TQPen&);
214 void setPen(TQt::PenStyle);
215 void setPen(const TQColor&);
216 const TQBrush&brush() const;
217 void setBrush(const TQBrush&);
218 void setBrush(TQt::BrushStyle);
219 void setBrush(const TQColor&);
220 TQPoint pos() const;
221
222 const TQColor&backgroundColor() const;
223 void setBackgroundColor(const TQColor&);
224 TQt::BGMode backgroundMode() const;
225 void setBackgroundMode(TQt::BGMode);
226 TQt::RasterOp rasterOp() const;
227 void setRasterOp(TQt::RasterOp);
228 const TQPoint&brushOrigin() const;
229 void setBrushOrigin(int x, int y);
230 void setBrushOrigin(const TQPoint&);
231
232 bool hasViewXForm() const;
233 bool hasWorldXForm() const;
234
235 void setViewXForm(bool);
236 TQRect window() const;
237 void setWindow(const TQRect&);
238 void setWindow(int x, int y, int w, int h);
239 TQRect viewport() const;
240 void setViewport(const TQRect&);
241 void setViewport(int x, int y, int w, int h);
242
243 void setWorldXForm(bool);
244 const TQWMatrix&worldMatrix() const;
245 void setWorldMatrix(const TQWMatrix&, bool combine=false);
246
247 void saveWorldMatrix();
248 void restoreWorldMatrix();
249
250 void scale(double sx, double sy);
251 void shear(double sh, double sv);
252 void rotate(double a);
253
254 void translate(double dx, double dy);
255 void resetXForm();
256 double translationX() const;
257 double translationY() const;
258
259 TQPoint xForm(const TQPoint&) const;
260 TQRect xForm(const TQRect&) const;
261 TQPointArray xForm(const TQPointArray&) const;
262 TQPointArray xForm(const TQPointArray&, int index, int npoints) const;
263 TQPoint xFormDev(const TQPoint&) const;
264 TQRect xFormDev(const TQRect&) const;
265 TQPointArray xFormDev(const TQPointArray&) const;
266 TQPointArray xFormDev(const TQPointArray&, int index, int npoints) const;
267
268 void setClipping(bool);
269 bool hasClipping() const;
270 TQRegion clipRegion(TQPainter::CoordinateMode = TQPainter::CoordDevice) const;
271 void setClipRect(const TQRect&, TQPainter::CoordinateMode = TQPainter::CoordDevice);
272 void setClipRect(int x, int y, int w, int h, TQPainter::CoordinateMode = TQPainter::CoordDevice);
273 void setClipRegion(const TQRegion&, TQPainter::CoordinateMode = TQPainter::CoordDevice);
274
275 void drawPoint(int x, int y);
276 void drawPoint(const TQPoint&);
277 void drawPoints(const TQPointArray& a, int index=0, int npoints=-1);
278 void moveTo(int x, int y);
279 void moveTo(const TQPoint&);
280 void lineTo(int x, int y);
281 void lineTo(const TQPoint&);
282 void drawLine(int x1, int y1, int x2, int y2);
283 void drawLine(const TQPoint&, const TQPoint&);
284 void drawRect(int x, int y, int w, int h);
285 void drawRect(const TQRect&);
286 void drawWinFocusRect(int x, int y, int w, int h);
287 void drawWinFocusRect(int x, int y, int w, int h, const TQColor&bgColor);
288 void drawWinFocusRect(const TQRect&);
289 void drawWinFocusRect(const TQRect&, const TQColor&bgColor);
290 void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
291 void drawRoundRect(const TQRect&, int = 25, int = 25);
292 void drawEllipse(int x, int y, int w, int h);
293 void drawEllipse(const TQRect&);
294 void drawArc(int x, int y, int w, int h, int a, int alen);
295 void drawArc(const TQRect&, int a, int alen);
296 void drawPie(int x, int y, int w, int h, int a, int alen);
297 void drawPie(const TQRect&, int a, int alen);
298 void drawChord(int x, int y, int w, int h, int a, int alen);
299 void drawChord(const TQRect&, int a, int alen);
300 void drawLineSegments(const TQPointArray&, int index=0, int nlines=-1);
301 void drawPolyline(const TQPointArray&, int index=0, int npoints=-1);
302 void drawPolygon(const TQPointArray&, bool winding=false, int index=0, int npoints=-1);
303 void drawConvexPolygon(const TQPointArray&, int index=0, int npoints=-1);
304 void drawCubicBezier(const TQPointArray&, int index=0);
305 void drawPixmap(int x, int y, const TQPixmap&, int sx=0, int sy=0, int sw=-1, int sh=-1);
306 void drawPixmap(const TQPoint&, const TQPixmap&, const TQRect&sr);
307 void drawPixmap(const TQPoint&, const TQPixmap&);
308 void drawPixmap(const TQRect&, const TQPixmap&);
309 void drawImage(int x, int y, const TQImage&, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0);
310 void drawImage(const TQPoint&, const TQImage&, const TQRect&sr, int conversionFlags = 0);
311 void drawImage(const TQPoint&, const TQImage&, int conversion_flags = 0);
312 void drawImage(const TQRect&, const TQImage&);
313 void drawTiledPixmap(int x, int y, int w, int h, const TQPixmap&, int sx=0, int sy=0);
314 void drawTiledPixmap(const TQRect&, const TQPixmap&, const TQPoint&);
315 void drawTiledPixmap(const TQRect&, const TQPixmap&);
316 //void drawPicture(const TQPicture&);
317 //void drawPicture(int x, int y, const TQPicture&);
318 //void drawPicture(const TQPoint&, const TQPicture&);
319
320 void fillRect(int x, int y, int w, int h, const TQBrush&);
321 void fillRect(const TQRect&, const TQBrush&);
322 void eraseRect(int x, int y, int w, int h);
323 void eraseRect(const TQRect&);
324
325 void drawText(int x, int y, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);
326 void drawText(const TQPoint&, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);
327
328 void drawText(int x, int y, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);
329 void drawText(const TQPoint&p, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);
330
331 void drawText(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);
332 void drawText(const TQRect&, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);
333
334 void drawTextItem(int x, int y, const TQTextItem&ti, int textflags = 0);
335 void drawTextItem(const TQPoint& p, const TQTextItem&ti, int textflags = 0);
336
337 TQRect boundingRect(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQTextParag **intern=0);
338 TQRect boundingRect(const TQRect&, int flags, const TQString&, int len = -1, TQTextParag **intern=0);
339
340 int tabStops() const;
341 void setTabStops(int);
342 int *tabArray() const;
343 void setTabArray(int *);
344
345protected:
346 KisCanvasWidgetPainter *m_canvasWidgetPainter;
347 TQFont m_defaultFont;
348 TQPen m_defaultPen;
349 TQBrush m_defaultBrush;
350 TQColor m_defaultColor;
351 TQPoint m_defaultBrushOrigin;
352 TQWMatrix m_defaultWorldMatrix;
353};
354
355#endif // KIS_CANVAS_PAINTER_H_
356