00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef KIS_CANVAS_PAINTER_H_
00020 #define KIS_CANVAS_PAINTER_H_
00021
00022 #ifdef HAVE_CONFIG_H
00023 #include <config.h>
00024 #endif
00025
00026 #include <qpainter.h>
00027
00028 #include "kis_global.h"
00029
00030 class KisCanvas;
00031 class KisCanvasWidget;
00032
00033 class KisCanvasWidgetPainter {
00034 public:
00035 KisCanvasWidgetPainter();
00036 virtual ~KisCanvasWidgetPainter();
00037
00038 virtual bool begin(KisCanvasWidget *canvasWidget, bool unclipped = false) = 0;
00039 virtual bool end();
00040
00041 virtual void save();
00042 virtual void restore();
00043
00044 virtual QFontMetrics fontMetrics() const;
00045 virtual QFontInfo fontInfo() const;
00046
00047 virtual const QFont& font() const;
00048 virtual void setFont(const QFont&);
00049 virtual const QPen& pen() const;
00050 virtual void setPen(const QPen&);
00051 virtual void setPen(Qt::PenStyle);
00052 virtual void setPen(const QColor&);
00053 virtual const QBrush&brush() const;
00054 virtual void setBrush(const QBrush&);
00055 virtual void setBrush(Qt::BrushStyle);
00056 virtual void setBrush(const QColor&);
00057 virtual QPoint pos() const;
00058
00059 virtual const QColor&backgroundColor() const;
00060 virtual void setBackgroundColor(const QColor&);
00061 virtual Qt::BGMode backgroundMode() const;
00062 virtual void setBackgroundMode(Qt::BGMode);
00063 virtual Qt::RasterOp rasterOp() const;
00064 virtual void setRasterOp(Qt::RasterOp);
00065 virtual const QPoint&brushOrigin() const;
00066 virtual void setBrushOrigin(int x, int y);
00067 virtual void setBrushOrigin(const QPoint&);
00068
00069 virtual bool hasViewXForm() const;
00070 virtual bool hasWorldXForm() const;
00071
00072 virtual void setViewXForm(bool);
00073 virtual QRect window() const;
00074 virtual void setWindow(const QRect&);
00075 virtual void setWindow(int x, int y, int w, int h);
00076 virtual QRect viewport() const;
00077 virtual void setViewport(const QRect&);
00078 virtual void setViewport(int x, int y, int w, int h);
00079
00080 virtual void setWorldXForm(bool);
00081 virtual const QWMatrix&worldMatrix() const;
00082 virtual void setWorldMatrix(const QWMatrix&, bool combine=FALSE);
00083
00084 virtual void saveWorldMatrix();
00085 virtual void restoreWorldMatrix();
00086
00087 virtual void scale(double sx, double sy);
00088 virtual void shear(double sh, double sv);
00089 virtual void rotate(double a);
00090
00091 virtual void translate(double dx, double dy);
00092 virtual void resetXForm();
00093 virtual double translationX() const;
00094 virtual double translationY() const;
00095
00096 virtual QPoint xForm(const QPoint&) const;
00097 virtual QRect xForm(const QRect&) const;
00098 virtual QPointArray xForm(const QPointArray&) const;
00099 virtual QPointArray xForm(const QPointArray&, int index, int npoints) const;
00100 virtual QPoint xFormDev(const QPoint&) const;
00101 virtual QRect xFormDev(const QRect&) const;
00102 virtual QPointArray xFormDev(const QPointArray&) const;
00103 virtual QPointArray xFormDev(const QPointArray&, int index, int npoints) const;
00104
00105 virtual void setClipping(bool);
00106 virtual bool hasClipping() const;
00107 virtual QRegion clipRegion(QPainter::CoordinateMode = QPainter::CoordDevice) const;
00108 virtual void setClipRect(const QRect&, QPainter::CoordinateMode = QPainter::CoordDevice);
00109 virtual void setClipRect(int x, int y, int w, int h, QPainter::CoordinateMode = QPainter::CoordDevice);
00110 virtual void setClipRegion(const QRegion&, QPainter::CoordinateMode = QPainter::CoordDevice);
00111
00112 virtual void drawPoint(int x, int y);
00113 virtual void drawPoint(const QPoint&);
00114 virtual void drawPoints(const QPointArray& a, int index=0, int npoints=-1);
00115 virtual void moveTo(int x, int y);
00116 virtual void moveTo(const QPoint&);
00117 virtual void lineTo(int x, int y);
00118 virtual void lineTo(const QPoint&);
00119 virtual void drawLine(int x1, int y1, int x2, int y2);
00120 virtual void drawLine(const QPoint&, const QPoint&);
00121 virtual void drawRect(int x, int y, int w, int h);
00122 virtual void drawRect(const QRect&);
00123 virtual void drawWinFocusRect(int x, int y, int w, int h);
00124 virtual void drawWinFocusRect(int x, int y, int w, int h, const QColor&bgColor);
00125 virtual void drawWinFocusRect(const QRect&);
00126 virtual void drawWinFocusRect(const QRect&, const QColor&bgColor);
00127 virtual void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
00128 virtual void drawRoundRect(const QRect&, int = 25, int = 25);
00129 virtual void drawEllipse(int x, int y, int w, int h);
00130 virtual void drawEllipse(const QRect&);
00131 virtual void drawArc(int x, int y, int w, int h, int a, int alen);
00132 virtual void drawArc(const QRect&, int a, int alen);
00133 virtual void drawPie(int x, int y, int w, int h, int a, int alen);
00134 virtual void drawPie(const QRect&, int a, int alen);
00135 virtual void drawChord(int x, int y, int w, int h, int a, int alen);
00136 virtual void drawChord(const QRect&, int a, int alen);
00137 virtual void drawLineSegments(const QPointArray&, int index=0, int nlines=-1);
00138 virtual void drawPolyline(const QPointArray&, int index=0, int npoints=-1);
00139 virtual void drawPolygon(const QPointArray&, bool winding=FALSE, int index=0, int npoints=-1);
00140 virtual void drawConvexPolygon(const QPointArray&, int index=0, int npoints=-1);
00141 virtual void drawCubicBezier(const QPointArray&, int index=0);
00142 virtual void drawPixmap(int x, int y, const QPixmap&, int sx=0, int sy=0, int sw=-1, int sh=-1);
00143 virtual void drawPixmap(const QPoint&, const QPixmap&, const QRect&sr);
00144 virtual void drawPixmap(const QPoint&, const QPixmap&);
00145 virtual void drawPixmap(const QRect&, const QPixmap&);
00146 virtual void drawImage(int x, int y, const QImage&, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0);
00147 virtual void drawImage(const QPoint&, const QImage&, const QRect&sr, int conversionFlags = 0);
00148 virtual void drawImage(const QPoint&, const QImage&, int conversion_flags = 0);
00149 virtual void drawImage(const QRect&, const QImage&);
00150 virtual void drawTiledPixmap(int x, int y, int w, int h, const QPixmap&, int sx=0, int sy=0);
00151 virtual void drawTiledPixmap(const QRect&, const QPixmap&, const QPoint&);
00152 virtual void drawTiledPixmap(const QRect&, const QPixmap&);
00153
00154
00155
00156
00157 virtual void fillRect(int x, int y, int w, int h, const QBrush&);
00158 virtual void fillRect(const QRect&, const QBrush&);
00159 virtual void eraseRect(int x, int y, int w, int h);
00160 virtual void eraseRect(const QRect&);
00161
00162 virtual void drawText(int x, int y, const QString&, int len = -1, QPainter::TextDirection dir = QPainter::Auto);
00163 virtual void drawText(const QPoint&, const QString&, int len = -1, QPainter::TextDirection dir = QPainter::Auto);
00164
00165 virtual void drawText(int x, int y, const QString&, int pos, int len, QPainter::TextDirection dir = QPainter::Auto);
00166 virtual void drawText(const QPoint&p, const QString&, int pos, int len, QPainter::TextDirection dir = QPainter::Auto);
00167
00168 virtual void drawText(int x, int y, int w, int h, int flags, const QString&, int len = -1, QRect *br=0, QTextParag **intern=0);
00169 virtual void drawText(const QRect&, int flags, const QString&, int len = -1, QRect *br=0, QTextParag **intern=0);
00170
00171 virtual void drawTextItem(int x, int y, const QTextItem&ti, int textflags = 0);
00172 virtual void drawTextItem(const QPoint& p, const QTextItem&ti, int textflags = 0);
00173
00174 virtual QRect boundingRect(int x, int y, int w, int h, int flags, const QString&, int len = -1, QTextParag **intern=0);
00175 virtual QRect boundingRect(const QRect&, int flags, const QString&, int len = -1, QTextParag **intern=0);
00176
00177 virtual int tabStops() const;
00178 virtual void setTabStops(int);
00179 virtual int *tabArray() const;
00180 virtual void setTabArray(int *);
00181
00182 protected:
00183 QFont m_defaultFont;
00184 QPen m_defaultPen;
00185 QBrush m_defaultBrush;
00186 QColor m_defaultColor;
00187 QPoint m_defaultBrushOrigin;
00188 QWMatrix m_defaultWorldMatrix;
00189 };
00190
00191 class KisCanvasPainter {
00192 public:
00193 KisCanvasPainter();
00194 KisCanvasPainter(KisCanvas *canvas);
00195 KisCanvasPainter(const QPaintDevice *paintDevice);
00196
00197 ~KisCanvasPainter();
00198
00199 bool begin(KisCanvas *canvas, bool unclipped = false);
00200 bool begin(const QPaintDevice *paintDevice, bool unclipped = false);
00201
00202 bool end();
00203
00204 void save();
00205 void restore();
00206
00207 QFontMetrics fontMetrics() const;
00208 QFontInfo fontInfo() const;
00209
00210 const QFont& font() const;
00211 void setFont(const QFont&);
00212 const QPen& pen() const;
00213 void setPen(const QPen&);
00214 void setPen(Qt::PenStyle);
00215 void setPen(const QColor&);
00216 const QBrush&brush() const;
00217 void setBrush(const QBrush&);
00218 void setBrush(Qt::BrushStyle);
00219 void setBrush(const QColor&);
00220 QPoint pos() const;
00221
00222 const QColor&backgroundColor() const;
00223 void setBackgroundColor(const QColor&);
00224 Qt::BGMode backgroundMode() const;
00225 void setBackgroundMode(Qt::BGMode);
00226 Qt::RasterOp rasterOp() const;
00227 void setRasterOp(Qt::RasterOp);
00228 const QPoint&brushOrigin() const;
00229 void setBrushOrigin(int x, int y);
00230 void setBrushOrigin(const QPoint&);
00231
00232 bool hasViewXForm() const;
00233 bool hasWorldXForm() const;
00234
00235 void setViewXForm(bool);
00236 QRect window() const;
00237 void setWindow(const QRect&);
00238 void setWindow(int x, int y, int w, int h);
00239 QRect viewport() const;
00240 void setViewport(const QRect&);
00241 void setViewport(int x, int y, int w, int h);
00242
00243 void setWorldXForm(bool);
00244 const QWMatrix&worldMatrix() const;
00245 void setWorldMatrix(const QWMatrix&, bool combine=FALSE);
00246
00247 void saveWorldMatrix();
00248 void restoreWorldMatrix();
00249
00250 void scale(double sx, double sy);
00251 void shear(double sh, double sv);
00252 void rotate(double a);
00253
00254 void translate(double dx, double dy);
00255 void resetXForm();
00256 double translationX() const;
00257 double translationY() const;
00258
00259 QPoint xForm(const QPoint&) const;
00260 QRect xForm(const QRect&) const;
00261 QPointArray xForm(const QPointArray&) const;
00262 QPointArray xForm(const QPointArray&, int index, int npoints) const;
00263 QPoint xFormDev(const QPoint&) const;
00264 QRect xFormDev(const QRect&) const;
00265 QPointArray xFormDev(const QPointArray&) const;
00266 QPointArray xFormDev(const QPointArray&, int index, int npoints) const;
00267
00268 void setClipping(bool);
00269 bool hasClipping() const;
00270 QRegion clipRegion(QPainter::CoordinateMode = QPainter::CoordDevice) const;
00271 void setClipRect(const QRect&, QPainter::CoordinateMode = QPainter::CoordDevice);
00272 void setClipRect(int x, int y, int w, int h, QPainter::CoordinateMode = QPainter::CoordDevice);
00273 void setClipRegion(const QRegion&, QPainter::CoordinateMode = QPainter::CoordDevice);
00274
00275 void drawPoint(int x, int y);
00276 void drawPoint(const QPoint&);
00277 void drawPoints(const QPointArray& a, int index=0, int npoints=-1);
00278 void moveTo(int x, int y);
00279 void moveTo(const QPoint&);
00280 void lineTo(int x, int y);
00281 void lineTo(const QPoint&);
00282 void drawLine(int x1, int y1, int x2, int y2);
00283 void drawLine(const QPoint&, const QPoint&);
00284 void drawRect(int x, int y, int w, int h);
00285 void drawRect(const QRect&);
00286 void drawWinFocusRect(int x, int y, int w, int h);
00287 void drawWinFocusRect(int x, int y, int w, int h, const QColor&bgColor);
00288 void drawWinFocusRect(const QRect&);
00289 void drawWinFocusRect(const QRect&, const QColor&bgColor);
00290 void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
00291 void drawRoundRect(const QRect&, int = 25, int = 25);
00292 void drawEllipse(int x, int y, int w, int h);
00293 void drawEllipse(const QRect&);
00294 void drawArc(int x, int y, int w, int h, int a, int alen);
00295 void drawArc(const QRect&, int a, int alen);
00296 void drawPie(int x, int y, int w, int h, int a, int alen);
00297 void drawPie(const QRect&, int a, int alen);
00298 void drawChord(int x, int y, int w, int h, int a, int alen);
00299 void drawChord(const QRect&, int a, int alen);
00300 void drawLineSegments(const QPointArray&, int index=0, int nlines=-1);
00301 void drawPolyline(const QPointArray&, int index=0, int npoints=-1);
00302 void drawPolygon(const QPointArray&, bool winding=FALSE, int index=0, int npoints=-1);
00303 void drawConvexPolygon(const QPointArray&, int index=0, int npoints=-1);
00304 void drawCubicBezier(const QPointArray&, int index=0);
00305 void drawPixmap(int x, int y, const QPixmap&, int sx=0, int sy=0, int sw=-1, int sh=-1);
00306 void drawPixmap(const QPoint&, const QPixmap&, const QRect&sr);
00307 void drawPixmap(const QPoint&, const QPixmap&);
00308 void drawPixmap(const QRect&, const QPixmap&);
00309 void drawImage(int x, int y, const QImage&, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0);
00310 void drawImage(const QPoint&, const QImage&, const QRect&sr, int conversionFlags = 0);
00311 void drawImage(const QPoint&, const QImage&, int conversion_flags = 0);
00312 void drawImage(const QRect&, const QImage&);
00313 void drawTiledPixmap(int x, int y, int w, int h, const QPixmap&, int sx=0, int sy=0);
00314 void drawTiledPixmap(const QRect&, const QPixmap&, const QPoint&);
00315 void drawTiledPixmap(const QRect&, const QPixmap&);
00316
00317
00318
00319
00320 void fillRect(int x, int y, int w, int h, const QBrush&);
00321 void fillRect(const QRect&, const QBrush&);
00322 void eraseRect(int x, int y, int w, int h);
00323 void eraseRect(const QRect&);
00324
00325 void drawText(int x, int y, const QString&, int len = -1, QPainter::TextDirection dir = QPainter::Auto);
00326 void drawText(const QPoint&, const QString&, int len = -1, QPainter::TextDirection dir = QPainter::Auto);
00327
00328 void drawText(int x, int y, const QString&, int pos, int len, QPainter::TextDirection dir = QPainter::Auto);
00329 void drawText(const QPoint&p, const QString&, int pos, int len, QPainter::TextDirection dir = QPainter::Auto);
00330
00331 void drawText(int x, int y, int w, int h, int flags, const QString&, int len = -1, QRect *br=0, QTextParag **intern=0);
00332 void drawText(const QRect&, int flags, const QString&, int len = -1, QRect *br=0, QTextParag **intern=0);
00333
00334 void drawTextItem(int x, int y, const QTextItem&ti, int textflags = 0);
00335 void drawTextItem(const QPoint& p, const QTextItem&ti, int textflags = 0);
00336
00337 QRect boundingRect(int x, int y, int w, int h, int flags, const QString&, int len = -1, QTextParag **intern=0);
00338 QRect boundingRect(const QRect&, int flags, const QString&, int len = -1, QTextParag **intern=0);
00339
00340 int tabStops() const;
00341 void setTabStops(int);
00342 int *tabArray() const;
00343 void setTabArray(int *);
00344
00345 protected:
00346 KisCanvasWidgetPainter *m_canvasWidgetPainter;
00347 QFont m_defaultFont;
00348 QPen m_defaultPen;
00349 QBrush m_defaultBrush;
00350 QColor m_defaultColor;
00351 QPoint m_defaultBrushOrigin;
00352 QWMatrix m_defaultWorldMatrix;
00353 };
00354
00355 #endif // KIS_CANVAS_PAINTER_H_
00356