aboutsummaryrefslogtreecommitdiff
path: root/stfgraphicsitem.cc
diff options
context:
space:
mode:
Diffstat (limited to 'stfgraphicsitem.cc')
-rw-r--r--stfgraphicsitem.cc67
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;
+}