context2d.h Example File
script/context2d/context2d.h
#ifndef CONTEXT2D_H
#define CONTEXT2D_H
#include "domimage.h"
#include <QPainter>
#include <QString>
#include <QStack>
#include <QMetaType>
#include <QExplicitlySharedDataPointer>
#include <qscriptengine.h>
class CanvasGradientData;
typedef QExplicitlySharedDataPointer<CanvasGradientData> CanvasGradient;
class CanvasGradientData: public QSharedData
{
public:
CanvasGradientData(const QGradient &g)
: gradient(g) {}
const QGradient &qgradient() const
{
return gradient;
}
static void setup(QScriptEngine *e);
private:
static QScriptValue addColorStop(QScriptContext *, QScriptEngine *);
public:
QGradient gradient;
};
Q_DECLARE_METATYPE(CanvasGradient)
class ImageData {
};
class QContext2DCanvas;
class Context2D : public QObject
{
Q_OBJECT
Q_PROPERTY(qreal globalAlpha READ globalAlpha WRITE setGlobalAlpha)
Q_PROPERTY(QString globalCompositeOperation READ globalCompositeOperation WRITE setGlobalCompositeOperation)
Q_PROPERTY(QVariant strokeStyle READ strokeStyle WRITE setStrokeStyle)
Q_PROPERTY(QVariant fillStyle READ fillStyle WRITE setFillStyle)
Q_PROPERTY(qreal lineWidth READ lineWidth WRITE setLineWidth)
Q_PROPERTY(QString lineCap READ lineCap WRITE setLineCap)
Q_PROPERTY(QString lineJoin READ lineJoin WRITE setLineJoin)
Q_PROPERTY(qreal miterLimit READ miterLimit WRITE setMiterLimit)
Q_PROPERTY(qreal shadowOffsetX READ shadowOffsetX WRITE setShadowOffsetX)
Q_PROPERTY(qreal shadowOffsetY READ shadowOffsetY WRITE setShadowOffsetY)
Q_PROPERTY(qreal shadowBlur READ shadowBlur WRITE setShadowBlur)
Q_PROPERTY(QColor shadowColor READ shadowColor WRITE setShadowColor)
public:
Context2D(QContext2DCanvas *parent);
void setSize(int w, int h);
void begin();
const QImage &end();
void clear();
qreal globalAlpha() const;
QString globalCompositeOperation() const;
QVariant strokeStyle() const;
QVariant fillStyle() const;
void setGlobalAlpha(qreal alpha);
void setGlobalCompositeOperation(const QString &op);
void setStrokeStyle(const QVariant &style);
void setFillStyle(const QVariant &style);
qreal lineWidth() const;
QString lineCap() const;
QString lineJoin() const;
qreal miterLimit() const;
void setLineWidth(qreal w);
void setLineCap(const QString &s);
void setLineJoin(const QString &s);
void setMiterLimit(qreal m);
qreal shadowOffsetX() const;
qreal shadowOffsetY() const;
qreal shadowBlur() const;
QColor shadowColor() const;
void setShadowOffsetX(qreal x);
void setShadowOffsetY(qreal y);
void setShadowBlur(qreal b);
void setShadowColor(const QColor &c);
public slots:
void save();
void restore();
void scale(qreal x, qreal y);
void rotate(qreal angle);
void translate(qreal x, qreal y);
void transform(qreal m11, qreal m12, qreal m21, qreal m22,
qreal dx, qreal dy);
void setTransform(qreal m11, qreal m12, qreal m21, qreal m22,
qreal dx, qreal dy);
CanvasGradient createLinearGradient(qreal x0, qreal y0,
qreal x1, qreal y1);
CanvasGradient createRadialGradient(qreal x0, qreal y0,
qreal r0, qreal x1,
qreal y1, qreal r1);
void clearRect(qreal x, qreal y, qreal w, qreal h);
void fillRect(qreal x, qreal y, qreal w, qreal h);
void strokeRect(qreal x, qreal y, qreal w, qreal h);
void beginPath();
void closePath();
void moveTo(qreal x, qreal y);
void lineTo(qreal x, qreal y);
void quadraticCurveTo(qreal cpx, qreal cpy, qreal x, qreal y);
void bezierCurveTo(qreal cp1x, qreal cp1y,
qreal cp2x, qreal cp2y, qreal x, qreal y);
void arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius);
void rect(qreal x, qreal y, qreal w, qreal h);
void arc(qreal x, qreal y, qreal radius,
qreal startAngle, qreal endAngle,
bool anticlockwise);
void fill();
void stroke();
void clip();
bool isPointInPath(qreal x, qreal y) const;
void drawImage(DomImage *image, qreal dx, qreal dy);
void drawImage(DomImage *image, qreal dx, qreal dy,
qreal dw, qreal dh);
void drawImage(DomImage *image, qreal sx, qreal sy,
qreal sw, qreal sh, qreal dx, qreal dy,
qreal dw, qreal dh);
ImageData getImageData(qreal sx, qreal sy, qreal sw, qreal sh);
void putImageData(ImageData image, qreal dx, qreal dy);
private:
QImage m_cache;
QPainter m_painter;
QPainterPath m_path;
struct State {
State()
: creatingShape(false)
{}
QMatrix matrix;
bool creatingShape;
};
State m_state;
QStack<State> m_stateStack;
};
#endif