diff options
Diffstat (limited to 'stfgraphicsitem.cc')
-rw-r--r-- | stfgraphicsitem.cc | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/stfgraphicsitem.cc b/stfgraphicsitem.cc new file mode 100644 index 0000000..865a029 --- /dev/null +++ b/stfgraphicsitem.cc @@ -0,0 +1,67 @@ +#include <QtGui/QPainterPath> + +#include "stfreader.h" +#include "stfgraphicsitem.h" + +class StfToGraphicsPathItems : public StfReader::StrokeHandler { + QGraphicsItem *parent; + QPainterPath path; + QRectF bound; + +public: + StfToGraphicsPathItems(QGraphicsItem* parent) + : parent(parent), path(), bound(0.0, 0.0, 1.0, 1.0) { + } + + ~StfToGraphicsPathItems() { + } + + bool startStroke(const QPoint& p, int, quint64) { + path = QPainterPath(QPointF(p)); + return true; + } + + bool strokePoint(const QPoint& p, int, quint64) { + path.lineTo(QPointF(p)); + return true; + } + + bool endStroke() { + bound |= path.boundingRect(); + new QGraphicsPathItem(path, parent); + /* Parent will take the child down with him when deleted. */ + return true; + } + + const QRectF& boundingRect() { + return bound; + } +}; + +StfGraphicsItem::StfGraphicsItem(QIODevice *dev, QGraphicsItem *parent) : + QGraphicsItem(parent) +{ + setFlags(ItemHasNoContents); + + StfToGraphicsPathItems h(this); + StfReader r; + r.setStrokeHandler(&h); + if (r.parse(dev)) { + bbox = h.boundingRect(); + } +} + +QRectF StfGraphicsItem::boundingRect() const +{ + return bbox; +} + +void StfGraphicsItem::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) +{ + /* Intentionally empty; ItemHasNoContents; children will do the painting. */ +} + +int StfGraphicsItem::type() const +{ + return Type; +} |