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