aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/items/context2d/qsgcontext2d_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/items/context2d/qsgcontext2d_p.h')
-rw-r--r--src/declarative/items/context2d/qsgcontext2d_p.h335
1 files changed, 59 insertions, 276 deletions
diff --git a/src/declarative/items/context2d/qsgcontext2d_p.h b/src/declarative/items/context2d/qsgcontext2d_p.h
index f8fc9b75a2..830a185a31 100644
--- a/src/declarative/items/context2d/qsgcontext2d_p.h
+++ b/src/declarative/items/context2d/qsgcontext2d_p.h
@@ -45,324 +45,73 @@
#include <QtDeclarative/qdeclarative.h>
#include <QtDeclarative/qdeclarativecomponent.h>
-#include "qsgtexturematerial.h"
-
#include <QtGui/qpainter.h>
#include <QtGui/qpainterpath.h>
-#include <QtGui/qpixmap.h>
#include <QtCore/qstring.h>
#include <QtCore/qstack.h>
-#include <QtCore/qmetatype.h>
-#include <QtCore/qcoreevent.h>
-#include <QtCore/qvariant.h>
-#include <QtDeclarative/qjsvalue.h>
#include <private/qv8engine_p.h>
-#include <QMutex>
-#include <QWaitCondition>
-#include "qsgimage_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Declarative)
-
-QColor colorFromString(const QString &name);
-class QSGCanvasGradient : public QObject
-{
- Q_OBJECT
-public:
- QSGCanvasGradient(const QGradient &gradient) : m_gradient(gradient) {}
-public slots:
- QGradient value() { return m_gradient; }
- void addColorStop(float pos, const QString &color) { m_gradient.setColorAt(pos, colorFromString(color));}
-public:
- QGradient m_gradient;
-};
+#define QSGCONTEXT2D_DEBUG //enable this for just DEBUG purpose!
-Q_DECLARE_METATYPE(QSGCanvasGradient*)
+#ifdef QSGCONTEXT2D_DEBUG
+#include <QElapsedTimer>
+#endif
+QT_BEGIN_HEADER
-class QSGCanvasPath : QObject
-{
- Q_OBJECT
-public:
- QSGCanvasPath(const QPainterPath& path, QObject* parent = 0) : QObject(parent), m_path(path) {}
+QT_BEGIN_NAMESPACE
- QPainterPath m_path;
-};
-Q_DECLARE_METATYPE(QSGCanvasPath*)
+QT_MODULE(Declarative)
-class QSGContext2DWorkerAgent;
-class QSGContext2DPrivate;
class QSGCanvasItem;
-class QSGContext2D : public QObject
-{
- Q_OBJECT
- // compositing
- 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(QColor strokeColor READ strokeColor WRITE setStrokeColor)
- Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor)
- // line caps/joins
- 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)
- // shadows
- 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(QString shadowColor READ shadowColor WRITE setShadowColor)
- // fonts
- Q_PROPERTY(QString font READ font WRITE setFont)
- Q_PROPERTY(QString textBaseline READ textBaseline WRITE setTextBaseline)
- Q_PROPERTY(QString textAlign READ textAlign WRITE setTextAlign)
+class QSGContext2DCommandBuffer;
+class QDeclarativePixmap;
- Q_PROPERTY(QSGCanvasPath* path READ path WRITE setPath)
- Q_ENUMS(PaintCommand)
+class QSGContext2D
+{
public:
enum TextBaseLineType { Alphabetic=0, Top, Middle, Bottom, Hanging};
enum TextAlignType { Start=0, End, Left, Right, Center};
enum PaintCommand {
Invalid = 0,
- Save,
- Restore,
- //matrix operations
UpdateMatrix,
- Scale,
- Rotate,
- Translate,
- Transform,
- SetTransform,
-
ClearRect,
FillRect,
-
- //path operations
- UpdatePath,
- BeginPath,
- ClosePath,
- MoveTo,
- LineTo,
- QuadraticCurveTo,
- BezierCurveTo,
- ArcTo,
- Rect,
- Arc,
+ StrokeRect,
Fill,
Stroke,
Clip,
- StrokeRect,
-
- //brushes and pens
UpdateBrush,
- UpdatePen,
GlobalAlpha,
GlobalCompositeOperation,
StrokeStyle,
FillStyle,
- StrokeColor,
- FillColor,
LineWidth,
LineCap,
LineJoin,
MiterLimit,
-
- //shadows
- UpdateShadow,
ShadowOffsetX,
ShadowOffsetY,
ShadowBlur,
ShadowColor,
-
- //font&text
Font,
TextBaseline,
TextAlign,
FillText,
StrokeText,
-
- //image
- DrawImage1,
- DrawImage2,
- DrawImage3,
- GetImageData,
- PutImageData
+ DrawImage,
+ GetImageData
};
- QSGContext2D(QObject *parent = 0);
- QSGContext2D(QSGContext2D *ctx2d, QSGContext2DWorkerAgent* agentData);
- ~QSGContext2D();
-
- QSGCanvasItem* canvas() const;
-
- void setSize(int width, int height);
- void setSize(const QSize &size);
- QSize size() const;
-
- void clear();
- void reset();
- QPaintDevice* paintDevice();
- const QImage& toImage() const;
- bool requireCachedImage() const;
- void setCachedImage(const QImage& image);
- // compositing
- qreal globalAlpha() const; // (default 1.0)
- QString globalCompositeOperation() const; // (default over)
- QVariant strokeStyle() const; // (default black)
- QVariant fillStyle() const; // (default black)
- QColor strokeColor() const; // (default black)
- QColor fillColor() const; // (default black)
-
- void setGlobalAlpha(qreal alpha);
- void setGlobalCompositeOperation(const QString &op);
- void setStrokeStyle(const QVariant &style);
- void setFillStyle(const QVariant &style);
- void setStrokeColor(const QColor& color);
- void setFillColor(const QColor& color);
-
- // line caps/joins
- qreal lineWidth() const; // (default 1)
- QString lineCap() const; // "butt", "round", "square" (default "butt")
- QString lineJoin() const; // "round", "bevel", "miter" (default "miter")
- qreal miterLimit() const; // (default 10)
-
- void setLineWidth(qreal w);
- void setLineCap(const QString &s);
- void setLineJoin(const QString &s);
- void setMiterLimit(qreal m);
-
- void setFont(const QString &font);
- QString font() const;
- void setTextBaseline(const QString &font);
- QString textBaseline() const;
- void setTextAlign(const QString &font);
- QString textAlign() const;
-
-
- // shadows
- qreal shadowOffsetX() const; // (default 0)
- qreal shadowOffsetY() const; // (default 0)
- qreal shadowBlur() const; // (default 0)
- QString shadowColor() const; // (default black)
-
- void setShadowOffsetX(qreal x);
- void setShadowOffsetY(qreal y);
- void setShadowBlur(qreal b);
- void setShadowColor(const QString &str);
-
- QSGCanvasPath* path();
- void setPath(QSGCanvasPath* path);
-public slots:
- void save(); // push state on state stack
- void restore(); // pop state stack and restore state
-
- // QTextMetrics measureText(const QString& text);
-
- void fillText(const QString &text, qreal x, qreal y);
- void strokeText(const QString &text, qreal x, qreal y);
-
- 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);
-
- QSGCanvasGradient *createLinearGradient(qreal x0, qreal y0,
- qreal x1, qreal y1);
- QSGCanvasGradient *createRadialGradient(qreal x0, qreal y0,
- qreal r0, qreal x1,
- qreal y1, qreal r1);
-
- // rects
- 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);
-
- // path API
- 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;
-
- //path string parser
- //implement the W3C SVG path spec:
- //http://www.w3.org/TR/SVG/paths.html
- void setPathString(const QString& path);
- QSGCanvasPath* createPath(const QString& pathString);
-
- QSGImage *createImage(const QString &url);
-
- void drawImage(const QString& imgUrl, qreal dx, qreal dy);
- void drawImage(const QString& imgUrl, qreal dx, qreal dy, qreal dw, qreal dh);
- void drawImage(const QString& imgUrl, qreal sx, qreal sy, qreal sw, qreal sh, qreal dx, qreal dy, qreal dw, qreal dh);
-
- // pixel manipulation
- QList<int> getImageData(qreal sx, qreal sy, qreal sw, qreal sh);
- void putImageData(const QVariant& imageData, qreal x, qreal y, qreal w, qreal h);
-
- void paint(QPainter* painter);
- void sync();
- void processCommands(const QJSValue& commands);
-signals:
- void changed();
- void painted();
-public:
- bool isDirty() const;
- v8::Handle<v8::Object> v8value() const;
- QV8Engine* v8Engine() const;
- void setV8Engine(QV8Engine *eng);
-
- bool valid() const;
- void setValid(bool valid);
- void setTileRect(const QRectF& region);
- void addref();
- void release();
-
- struct VariantRef
- {
- VariantRef() : a(0) {}
- VariantRef(const VariantRef &r) : a(r.a) { if (a) a->addref(); }
- VariantRef(QSGContext2D *_a) : a(_a) { if (a) a->addref(); }
- ~VariantRef() { if (a) a->release(); }
-
- VariantRef &operator=(const VariantRef &o) {
- if (o.a) o.a->addref();
- if (a) a->release(); a = o.a;
- return *this;
- }
- QSGContext2D *a;
- };
- struct Sync : public QEvent {
- Sync() : QEvent(QEvent::User) {}
- QSGContext2DWorkerAgent *data;
- };
struct State {
- QMatrix matrix;
+ QTransform matrix;
QPainterPath clipPath;
QBrush strokeStyle;
QBrush fillStyle;
+ Qt::FillRule fillRule;
qreal globalAlpha;
qreal lineWidth;
Qt::PenCapStyle lineCap;
@@ -376,24 +125,58 @@ public:
QFont font;
QSGContext2D::TextAlignType textAlign;
QSGContext2D::TextBaseLineType textBaseline;
- QPen pen;
};
- QMatrix worldMatrix() const;
+ QSGContext2D(QSGCanvasItem* item);
+ ~QSGContext2D();
+
+ inline QSGCanvasItem* canvas() const {return m_canvas;}
+ inline QSGContext2DCommandBuffer* buffer() const {return m_buffer;}
+
+ v8::Handle<v8::Object> v8value() const;
+ void setV8Engine(QV8Engine *eng);
+ void popState();
+ void pushState();
+ void reset();
+
+ // path API
+ 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 roundedRect(qreal x, qreal y,qreal w, qreal h, qreal xr, qreal yr);
+ void ellipse(qreal x, qreal y,qreal w, qreal h);
+ void text(const QString& str, qreal x, qreal y);
+ void arc(qreal x, qreal y, qreal radius,
+ qreal startAngle, qreal endAngle,
+ bool anticlockwise, bool transform=true);
+ void addArcTo(const QPointF& p1, const QPointF& p2, float radius);
-protected:
- virtual bool event(QEvent *);
+ bool isPointInPath(qreal x, qreal y) const;
-private:
- void processCommand(const QJSValue& command);
+ QPainterPath createTextGlyphs(qreal x, qreal y, const QString& text);
+ QImage createImage(const QUrl& url);
- Q_DECLARE_PRIVATE(QSGContext2D)
+ State state;
+ QStack<QSGContext2D::State> m_stateStack;
+ QSGCanvasItem* m_canvas;
+ QSGContext2DCommandBuffer* m_buffer;
+ QPainterPath m_path;
+ v8::Local<v8::Value> m_fillStyle;
+ v8::Local<v8::Value> m_strokeStyle;
+ v8::Handle<v8::Value> m_v8path;
+ QString m_fontString;
+ QV8Engine *m_v8engine;
+ v8::Persistent<v8::Object> m_v8value;
};
QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QSGContext2D::VariantRef)
QML_DECLARE_TYPE(QSGContext2D)
QT_END_HEADER