krita

kis_canvas_painter.h

00001 /*
00002  *  Copyright (c) 2005 Adrian Page <adrian@pagenet.plus.com>
00003  *
00004  *  This program is free software; you can redistribute it and/or modify
00005  *  it under the terms of the GNU General Public License as published by
00006  *  the Free Software Foundation; either version 2 of the License, or
00007  *  (at your option) any later version.
00008  *
00009  *  This program is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *  GNU General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU General Public License
00015  *  along with this program; if not, write to the Free Software
00016  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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     //virtual void drawPicture(const QPicture&);
00154     //virtual void drawPicture(int x, int y, const QPicture&);
00155     //virtual void drawPicture(const QPoint&, const QPicture&);
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     //void drawPicture(const QPicture&);
00317     //void drawPicture(int x, int y, const QPicture&);
00318     //void drawPicture(const QPoint&, const QPicture&);
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 
KDE Home | KDE Accessibility Home | Description of Access Keys