00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef KIS_OPENGL_CANVAS_PAINTER_H_
00020 #define KIS_OPENGL_CANVAS_PAINTER_H_
00021
00022 #ifdef HAVE_CONFIG_H
00023 #include <config.h>
00024 #endif
00025
00026 #ifdef HAVE_GL
00027
00028 #include <qwidget.h>
00029 #include <qgl.h>
00030 #include <qpainter.h>
00031
00032 #include "kis_global.h"
00033 #include "kis_canvas_painter.h"
00034
00035 class KisOpenGLCanvasPainter : public KisCanvasWidgetPainter {
00036 public:
00037 KisOpenGLCanvasPainter();
00038 KisOpenGLCanvasPainter(QGLWidget *widget);
00039
00040 virtual ~KisOpenGLCanvasPainter();
00041
00042 virtual bool begin(KisCanvasWidget *canvasWidget, bool unclipped = false);
00043
00044
00045
00046 virtual bool end();
00047
00048 virtual void save();
00049 virtual void restore();
00050
00051 virtual QFontMetrics fontMetrics() const;
00052 virtual QFontInfo fontInfo() const;
00053
00054 virtual const QFont& font() const;
00055 virtual void setFont(const QFont&);
00056 virtual const QPen& pen() const;
00057 virtual void setPen(const QPen&);
00058 virtual void setPen(Qt::PenStyle);
00059 virtual void setPen(const QColor&);
00060 virtual const QBrush&brush() const;
00061 virtual void setBrush(const QBrush&);
00062 virtual void setBrush(Qt::BrushStyle);
00063 virtual void setBrush(const QColor&);
00064 virtual QPoint pos() const;
00065
00066 virtual const QColor& backgroundColor() const;
00067 virtual void setBackgroundColor(const QColor&);
00068 virtual Qt::BGMode backgroundMode() const;
00069 virtual void setBackgroundMode(Qt::BGMode);
00070 virtual Qt::RasterOp rasterOp() const;
00071 virtual void setRasterOp(Qt::RasterOp);
00072 virtual const QPoint& brushOrigin() const;
00073 virtual void setBrushOrigin(int x, int y);
00074 virtual void setBrushOrigin(const QPoint&);
00075
00076 virtual bool hasViewXForm() const;
00077 virtual bool hasWorldXForm() const;
00078
00079 virtual void setViewXForm(bool);
00080 virtual QRect window() const;
00081 virtual void setWindow(const QRect&);
00082 virtual void setWindow(int x, int y, int w, int h);
00083 virtual QRect viewport() const;
00084 virtual void setViewport(const QRect&);
00085 virtual void setViewport(int x, int y, int w, int h);
00086
00087 virtual void setWorldXForm(bool);
00088 virtual const QWMatrix&worldMatrix() const;
00089 virtual void setWorldMatrix(const QWMatrix&, bool combine=FALSE);
00090
00091 virtual void saveWorldMatrix();
00092 virtual void restoreWorldMatrix();
00093
00094 virtual void scale(double sx, double sy);
00095 virtual void shear(double sh, double sv);
00096 virtual void rotate(double a);
00097
00098 virtual void translate(double dx, double dy);
00099 virtual void resetXForm();
00100 virtual double translationX() const;
00101 virtual double translationY() const;
00102
00103 virtual QPoint xForm(const QPoint&) const;
00104 virtual QRect xForm(const QRect&) const;
00105 virtual QPointArray xForm(const QPointArray&) const;
00106 virtual QPointArray xForm(const QPointArray&, int index, int npoints) const;
00107 virtual QPoint xFormDev(const QPoint&) const;
00108 virtual QRect xFormDev(const QRect&) const;
00109 virtual QPointArray xFormDev(const QPointArray&) const;
00110 virtual QPointArray xFormDev(const QPointArray&, int index, int npoints) const;
00111
00112 virtual void setClipping(bool);
00113 virtual bool hasClipping() const;
00114 virtual QRegion clipRegion(QPainter::CoordinateMode = QPainter::CoordDevice) const;
00115 virtual void setClipRect(const QRect&, QPainter::CoordinateMode = QPainter::CoordDevice);
00116 virtual void setClipRect(int x, int y, int w, int h, QPainter::CoordinateMode = QPainter::CoordDevice);
00117 virtual void setClipRegion(const QRegion&, QPainter::CoordinateMode = QPainter::CoordDevice);
00118
00119 virtual void drawPoint(int x, int y);
00120 virtual void drawPoint(const QPoint&);
00121 virtual void drawPoints(const QPointArray& a, int index=0, int npoints=-1);
00122 virtual void moveTo(int x, int y);
00123 virtual void moveTo(const QPoint&);
00124 virtual void lineTo(int x, int y);
00125 virtual void lineTo(const QPoint&);
00126 virtual void drawLine(int x1, int y1, int x2, int y2);
00127 virtual void drawLine(const QPoint&, const QPoint&);
00128 virtual void drawRect(int x, int y, int w, int h);
00129 virtual void drawRect(const QRect&);
00130 virtual void drawWinFocusRect(int x, int y, int w, int h);
00131 virtual void drawWinFocusRect(int x, int y, int w, int h, const QColor&bgColor);
00132 virtual void drawWinFocusRect(const QRect&);
00133 virtual void drawWinFocusRect(const QRect&, const QColor&bgColor);
00134 virtual void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
00135 virtual void drawRoundRect(const QRect&, int = 25, int = 25);
00136 virtual void drawEllipse(int x, int y, int w, int h);
00137 virtual void drawEllipse(const QRect&);
00138 virtual void drawArc(int x, int y, int w, int h, int a, int alen);
00139 virtual void drawArc(const QRect&, int a, int alen);
00140 virtual void drawPie(int x, int y, int w, int h, int a, int alen);
00141 virtual void drawPie(const QRect&, int a, int alen);
00142 virtual void drawChord(int x, int y, int w, int h, int a, int alen);
00143 virtual void drawChord(const QRect&, int a, int alen);
00144 virtual void drawLineSegments(const QPointArray&, int index=0, int nlines=-1);
00145 virtual void drawPolyline(const QPointArray&, int index=0, int npoints=-1);
00146 virtual void drawPolygon(const QPointArray&, bool winding=FALSE, int index=0, int npoints=-1);
00147 virtual void drawConvexPolygon(const QPointArray&, int index=0, int npoints=-1);
00148 virtual void drawCubicBezier(const QPointArray&, int index=0);
00149 virtual void drawPixmap(int x, int y, const QPixmap&, int sx=0, int sy=0, int sw=-1, int sh=-1);
00150 virtual void drawPixmap(const QPoint&, const QPixmap&, const QRect&sr);
00151 virtual void drawPixmap(const QPoint&, const QPixmap&);
00152 virtual void drawPixmap(const QRect&, const QPixmap&);
00153 virtual void drawImage(int x, int y, const QImage&, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0);
00154 virtual void drawImage(const QPoint&, const QImage&, const QRect&sr, int conversionFlags = 0);
00155 virtual void drawImage(const QPoint&, const QImage&, int conversion_flags = 0);
00156 virtual void drawImage(const QRect&, const QImage&);
00157 virtual void drawTiledPixmap(int x, int y, int w, int h, const QPixmap&, int sx=0, int sy=0);
00158 virtual void drawTiledPixmap(const QRect&, const QPixmap&, const QPoint&);
00159 virtual void drawTiledPixmap(const QRect&, const QPixmap&);
00160
00161
00162
00163
00164 virtual void fillRect(int x, int y, int w, int h, const QBrush&);
00165 virtual void fillRect(const QRect&, const QBrush&);
00166 virtual void eraseRect(int x, int y, int w, int h);
00167 virtual void eraseRect(const QRect&);
00168
00169 virtual void drawText(int x, int y, const QString&, int len = -1, QPainter::TextDirection dir = QPainter::Auto);
00170 virtual void drawText(const QPoint&, const QString&, int len = -1, QPainter::TextDirection dir = QPainter::Auto);
00171
00172 virtual void drawText(int x, int y, const QString&, int pos, int len, QPainter::TextDirection dir = QPainter::Auto);
00173 virtual void drawText(const QPoint&p, const QString&, int pos, int len, QPainter::TextDirection dir = QPainter::Auto);
00174
00175 virtual void drawText(int x, int y, int w, int h, int flags, const QString&, int len = -1, QRect *br=0, QTextParag **intern=0);
00176 virtual void drawText(const QRect&, int flags, const QString&, int len = -1, QRect *br=0, QTextParag **intern=0);
00177
00178 virtual void drawTextItem(int x, int y, const QTextItem&ti, int textflags = 0);
00179 virtual void drawTextItem(const QPoint& p, const QTextItem&ti, int textflags = 0);
00180
00181 virtual QRect boundingRect(int x, int y, int w, int h, int flags, const QString&, int len = -1, QTextParag **intern=0);
00182 virtual QRect boundingRect(const QRect&, int flags, const QString&, int len = -1, QTextParag **intern=0);
00183
00184 virtual int tabStops() const;
00185 virtual void setTabStops(int);
00186 virtual int *tabArray() const;
00187 virtual void setTabArray(int *);
00188
00189 protected:
00190 void prepareForDrawing();
00191 void updateViewTransformation();
00192 void setPenStyle(Qt::PenStyle penStyle);
00193
00194 protected:
00195 QFont m_defaultFont;
00196 QPen m_defaultPen;
00197 QBrush m_defaultBrush;
00198 QColor m_defaultColor;
00199 QPoint m_defaultBrushOrigin;
00200 QWMatrix m_defaultWorldMatrix;
00201 QRect m_window;
00202 QRect m_viewport;
00203 bool m_active;
00204
00205 protected:
00206 QGLWidget *m_widget;
00207 };
00208
00209 #endif // HAVE_GL
00210
00211 #endif // KIS_OPENGL_CANVAS_PAINTER_H_
00212