summaryrefslogtreecommitdiffstats
path: root/chalk/ui/kis_canvas_painter.h
blob: 00a197fd99a57b0c4fced9d9e763e8a8f6540945 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
/*
 *  Copyright (c) 2005 Adrian Page <adrian@pagenet.plus.com>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#ifndef KIS_CANVAS_PAINTER_H_
#define KIS_CANVAS_PAINTER_H_

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <tqpainter.h>

#include "kis_global.h"

class KisCanvas;
class KisCanvasWidget;

class KisCanvasWidgetPainter {
public:
    KisCanvasWidgetPainter();
    virtual ~KisCanvasWidgetPainter();

    virtual bool begin(KisCanvasWidget *canvasWidget, bool unclipped = false) = 0;
    virtual bool end();

    virtual void save();
    virtual void restore();

    virtual TQFontMetrics fontMetrics() const;
    virtual TQFontInfo fontInfo() const;

    virtual const TQFont& font() const;
    virtual void setFont(const TQFont&);
    virtual const TQPen& pen() const;
    virtual void setPen(const TQPen&);
    virtual void setPen(TQt::PenStyle);
    virtual void setPen(const TQColor&);
    virtual const TQBrush&brush() const;
    virtual void setBrush(const TQBrush&);
    virtual void setBrush(TQt::BrushStyle);
    virtual void setBrush(const TQColor&);
    virtual TQPoint pos() const;

    virtual const TQColor&backgroundColor() const;
    virtual void setBackgroundColor(const TQColor&);
    virtual TQt::BGMode backgroundMode() const;
    virtual void setBackgroundMode(TQt::BGMode);
    virtual TQt::RasterOp rasterOp()	const;
    virtual void setRasterOp(TQt::RasterOp);
    virtual const TQPoint&brushOrigin() const;
    virtual void setBrushOrigin(int x, int y);
    virtual void setBrushOrigin(const TQPoint&);

    virtual bool hasViewXForm() const;
    virtual bool hasWorldXForm() const;

    virtual void setViewXForm(bool);
    virtual TQRect window() const;
    virtual void setWindow(const TQRect&);
    virtual void setWindow(int x, int y, int w, int h);
    virtual TQRect viewport() const;
    virtual void setViewport(const TQRect&);
    virtual void setViewport(int x, int y, int w, int h);

    virtual void setWorldXForm(bool);
    virtual const TQWMatrix&worldMatrix() const;
    virtual void setWorldMatrix(const TQWMatrix&, bool combine=FALSE);

    virtual void saveWorldMatrix();
    virtual void restoreWorldMatrix();

    virtual void scale(double sx, double sy);
    virtual void shear(double sh, double sv);
    virtual void rotate(double a);

    virtual void translate(double dx, double dy);
    virtual void resetXForm();
    virtual double translationX() const;
    virtual double translationY() const;

    virtual TQPoint xForm(const TQPoint&) const;
    virtual TQRect xForm(const TQRect&)	const;
    virtual TQPointArray xForm(const TQPointArray&) const;
    virtual TQPointArray xForm(const TQPointArray&, int index, int npoints) const;
    virtual TQPoint xFormDev(const TQPoint&) const;
    virtual TQRect xFormDev(const TQRect&)  const;
    virtual TQPointArray xFormDev(const TQPointArray&) const;
    virtual TQPointArray xFormDev(const TQPointArray&, int index, int npoints) const;

    virtual void setClipping(bool);
    virtual bool hasClipping() const;
    virtual TQRegion clipRegion(TQPainter::CoordinateMode = TQPainter::CoordDevice) const;
    virtual void setClipRect(const TQRect&, TQPainter::CoordinateMode = TQPainter::CoordDevice);
    virtual void setClipRect(int x, int y, int w, int h, TQPainter::CoordinateMode = TQPainter::CoordDevice);
    virtual void setClipRegion(const TQRegion&, TQPainter::CoordinateMode = TQPainter::CoordDevice);

    virtual void drawPoint(int x, int y);
    virtual void drawPoint(const TQPoint&);
    virtual void drawPoints(const TQPointArray& a, int index=0, int npoints=-1);
    virtual void moveTo(int x, int y);
    virtual void moveTo(const TQPoint&);
    virtual void lineTo(int x, int y);
    virtual void lineTo(const TQPoint&);
    virtual void drawLine(int x1, int y1, int x2, int y2);
    virtual void drawLine(const TQPoint&, const TQPoint&);
    virtual void drawRect(int x, int y, int w, int h);
    virtual void drawRect(const TQRect&);
    virtual void drawWinFocusRect(int x, int y, int w, int h);
    virtual void drawWinFocusRect(int x, int y, int w, int h, const TQColor&bgColor);
    virtual void drawWinFocusRect(const TQRect&);
    virtual void drawWinFocusRect(const TQRect&, const TQColor&bgColor);
    virtual void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
    virtual void drawRoundRect(const TQRect&, int = 25, int = 25);
    virtual void drawEllipse(int x, int y, int w, int h);
    virtual void drawEllipse(const TQRect&);
    virtual void drawArc(int x, int y, int w, int h, int a, int alen);
    virtual void drawArc(const TQRect&, int a, int alen);
    virtual void drawPie(int x, int y, int w, int h, int a, int alen);
    virtual void drawPie(const TQRect&, int a, int alen);
    virtual void drawChord(int x, int y, int w, int h, int a, int alen);
    virtual void drawChord(const TQRect&, int a, int alen);
    virtual void drawLineSegments(const TQPointArray&, int index=0, int nlines=-1);
    virtual void drawPolyline(const TQPointArray&, int index=0, int npoints=-1);
    virtual void drawPolygon(const TQPointArray&, bool winding=FALSE, int index=0, int npoints=-1);
    virtual void drawConvexPolygon(const TQPointArray&, int index=0, int npoints=-1);
    virtual void drawCubicBezier(const TQPointArray&, int index=0);
    virtual void drawPixmap(int x, int y, const TQPixmap&, int sx=0, int sy=0, int sw=-1, int sh=-1);
    virtual void drawPixmap(const TQPoint&, const TQPixmap&, const TQRect&sr);
    virtual void drawPixmap(const TQPoint&, const TQPixmap&);
    virtual void drawPixmap(const TQRect&, const TQPixmap&);
    virtual void drawImage(int x, int y, const TQImage&, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0);
    virtual void drawImage(const TQPoint&, const TQImage&, const TQRect&sr, int conversionFlags = 0);
    virtual void drawImage(const TQPoint&, const TQImage&, int conversion_flags = 0);
    virtual void drawImage(const TQRect&, const TQImage&);
    virtual void drawTiledPixmap(int x, int y, int w, int h, const TQPixmap&, int sx=0, int sy=0);
    virtual void drawTiledPixmap(const TQRect&, const TQPixmap&, const TQPoint&);
    virtual void drawTiledPixmap(const TQRect&, const TQPixmap&);
    //virtual void drawPicture(const TQPicture&);
    //virtual void drawPicture(int x, int y, const TQPicture&);
    //virtual void drawPicture(const TQPoint&, const TQPicture&);

    virtual void fillRect(int x, int y, int w, int h, const TQBrush&);
    virtual void fillRect(const TQRect&, const TQBrush&);
    virtual void eraseRect(int x, int y, int w, int h);
    virtual void eraseRect(const TQRect&);

    virtual void drawText(int x, int y, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);
    virtual void drawText(const TQPoint&, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);

    virtual void drawText(int x, int y, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);
    virtual void drawText(const TQPoint&p, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);

    virtual void drawText(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);
    virtual void drawText(const TQRect&, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);

    virtual void drawTextItem(int x, int y, const TQTextItem&ti, int textflags = 0);
    virtual void drawTextItem(const TQPoint& p, const TQTextItem&ti, int textflags = 0);

    virtual TQRect boundingRect(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQTextParag **intern=0);
    virtual TQRect boundingRect(const TQRect&, int flags, const TQString&, int len = -1, TQTextParag **intern=0);

    virtual int	tabStops() const;
    virtual void setTabStops(int);
    virtual int	*tabArray() const;
    virtual void setTabArray(int *);

protected:
    TQFont m_defaultFont;
    TQPen m_defaultPen;
    TQBrush m_defaultBrush;
    TQColor m_defaultColor;
    TQPoint m_defaultBrushOrigin;
    TQWMatrix m_defaultWorldMatrix;
};

class KisCanvasPainter {
public:
    KisCanvasPainter();
    KisCanvasPainter(KisCanvas *canvas);
    KisCanvasPainter(const TQPaintDevice *paintDevice);

    ~KisCanvasPainter();

    bool begin(KisCanvas *canvas, bool unclipped = false);
    bool begin(const TQPaintDevice *paintDevice, bool unclipped = false);

    bool end();

    void save();
    void restore();

    TQFontMetrics fontMetrics() const;
    TQFontInfo fontInfo() const;

    const TQFont& font() const;
    void setFont(const TQFont&);
    const TQPen& pen() const;
    void setPen(const TQPen&);
    void setPen(TQt::PenStyle);
    void setPen(const TQColor&);
    const TQBrush&brush() const;
    void setBrush(const TQBrush&);
    void setBrush(TQt::BrushStyle);
    void setBrush(const TQColor&);
    TQPoint pos() const;

    const TQColor&backgroundColor() const;
    void setBackgroundColor(const TQColor&);
    TQt::BGMode backgroundMode() const;
    void setBackgroundMode(TQt::BGMode);
    TQt::RasterOp rasterOp()	const;
    void setRasterOp(TQt::RasterOp);
    const TQPoint&brushOrigin() const;
    void setBrushOrigin(int x, int y);
    void setBrushOrigin(const TQPoint&);

    bool hasViewXForm() const;
    bool hasWorldXForm() const;

    void setViewXForm(bool);
    TQRect window() const;
    void setWindow(const TQRect&);
    void setWindow(int x, int y, int w, int h);
    TQRect viewport() const;
    void setViewport(const TQRect&);
    void setViewport(int x, int y, int w, int h);

    void setWorldXForm(bool);
    const TQWMatrix&worldMatrix() const;
    void setWorldMatrix(const TQWMatrix&, bool combine=FALSE);

    void saveWorldMatrix();
    void restoreWorldMatrix();

    void scale(double sx, double sy);
    void shear(double sh, double sv);
    void rotate(double a);

    void translate(double dx, double dy);
    void resetXForm();
    double translationX() const;
    double translationY() const;

    TQPoint xForm(const TQPoint&) const;
    TQRect xForm(const TQRect&)	const;
    TQPointArray xForm(const TQPointArray&) const;
    TQPointArray xForm(const TQPointArray&, int index, int npoints) const;
    TQPoint xFormDev(const TQPoint&) const;
    TQRect xFormDev(const TQRect&)  const;
    TQPointArray xFormDev(const TQPointArray&) const;
    TQPointArray xFormDev(const TQPointArray&, int index, int npoints) const;

    void setClipping(bool);
    bool hasClipping() const;
    TQRegion clipRegion(TQPainter::CoordinateMode = TQPainter::CoordDevice) const;
    void setClipRect(const TQRect&, TQPainter::CoordinateMode = TQPainter::CoordDevice);
    void setClipRect(int x, int y, int w, int h, TQPainter::CoordinateMode = TQPainter::CoordDevice);
    void setClipRegion(const TQRegion&, TQPainter::CoordinateMode = TQPainter::CoordDevice);

    void drawPoint(int x, int y);
    void drawPoint(const TQPoint&);
    void drawPoints(const TQPointArray& a, int index=0, int npoints=-1);
    void moveTo(int x, int y);
    void moveTo(const TQPoint&);
    void lineTo(int x, int y);
    void lineTo(const TQPoint&);
    void drawLine(int x1, int y1, int x2, int y2);
    void drawLine(const TQPoint&, const TQPoint&);
    void drawRect(int x, int y, int w, int h);
    void drawRect(const TQRect&);
    void drawWinFocusRect(int x, int y, int w, int h);
    void drawWinFocusRect(int x, int y, int w, int h, const TQColor&bgColor);
    void drawWinFocusRect(const TQRect&);
    void drawWinFocusRect(const TQRect&, const TQColor&bgColor);
    void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
    void drawRoundRect(const TQRect&, int = 25, int = 25);
    void drawEllipse(int x, int y, int w, int h);
    void drawEllipse(const TQRect&);
    void drawArc(int x, int y, int w, int h, int a, int alen);
    void drawArc(const TQRect&, int a, int alen);
    void drawPie(int x, int y, int w, int h, int a, int alen);
    void drawPie(const TQRect&, int a, int alen);
    void drawChord(int x, int y, int w, int h, int a, int alen);
    void drawChord(const TQRect&, int a, int alen);
    void drawLineSegments(const TQPointArray&, int index=0, int nlines=-1);
    void drawPolyline(const TQPointArray&, int index=0, int npoints=-1);
    void drawPolygon(const TQPointArray&, bool winding=FALSE, int index=0, int npoints=-1);
    void drawConvexPolygon(const TQPointArray&, int index=0, int npoints=-1);
    void drawCubicBezier(const TQPointArray&, int index=0);
    void drawPixmap(int x, int y, const TQPixmap&, int sx=0, int sy=0, int sw=-1, int sh=-1);
    void drawPixmap(const TQPoint&, const TQPixmap&, const TQRect&sr);
    void drawPixmap(const TQPoint&, const TQPixmap&);
    void drawPixmap(const TQRect&, const TQPixmap&);
    void drawImage(int x, int y, const TQImage&, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0);
    void drawImage(const TQPoint&, const TQImage&, const TQRect&sr, int conversionFlags = 0);
    void drawImage(const TQPoint&, const TQImage&, int conversion_flags = 0);
    void drawImage(const TQRect&, const TQImage&);
    void drawTiledPixmap(int x, int y, int w, int h, const TQPixmap&, int sx=0, int sy=0);
    void drawTiledPixmap(const TQRect&, const TQPixmap&, const TQPoint&);
    void drawTiledPixmap(const TQRect&, const TQPixmap&);
    //void drawPicture(const TQPicture&);
    //void drawPicture(int x, int y, const TQPicture&);
    //void drawPicture(const TQPoint&, const TQPicture&);

    void fillRect(int x, int y, int w, int h, const TQBrush&);
    void fillRect(const TQRect&, const TQBrush&);
    void eraseRect(int x, int y, int w, int h);
    void eraseRect(const TQRect&);

    void drawText(int x, int y, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);
    void drawText(const TQPoint&, const TQString&, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto);

    void drawText(int x, int y, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);
    void drawText(const TQPoint&p, const TQString&, int pos, int len, TQPainter::TextDirection dir = TQPainter::Auto);

    void drawText(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);
    void drawText(const TQRect&, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0);

    void drawTextItem(int x, int y, const TQTextItem&ti, int textflags = 0);
    void drawTextItem(const TQPoint& p, const TQTextItem&ti, int textflags = 0);

    TQRect boundingRect(int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQTextParag **intern=0);
    TQRect boundingRect(const TQRect&, int flags, const TQString&, int len = -1, TQTextParag **intern=0);

    int	tabStops() const;
    void setTabStops(int);
    int	*tabArray() const;
    void setTabArray(int *);

protected:
    KisCanvasWidgetPainter *m_canvasWidgetPainter;
    TQFont m_defaultFont;
    TQPen m_defaultPen;
    TQBrush m_defaultBrush;
    TQColor m_defaultColor;
    TQPoint m_defaultBrushOrigin;
    TQWMatrix m_defaultWorldMatrix;
};

#endif // KIS_CANVAS_PAINTER_H_