krita

kis_opengl_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_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     // If we don't have OpenGL, we use the base class's no-op methods.
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     //virtual void drawPicture(const QPicture&);
00161     //virtual void drawPicture(int x, int y, const QPicture&);
00162     //virtual void drawPicture(const QPoint&, const QPicture&);
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 
KDE Home | KDE Accessibility Home | Description of Access Keys