Swiftray  1.0
canvas.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QtQuick>
4 #include <QQuickWidget>
6 #include <canvas/controls/grid.h>
8 #include <canvas/controls/line.h>
10 #include <canvas/controls/oval.h>
13 #include <canvas/controls/rect.h>
15 #include <canvas/controls/text.h>
18 #include <document.h>
19 #include <clipboard.h>
20 #include <shape/shape.h>
21 #include <parser/svgpp-parser.h>
23 
24 /*The canvas should be designed to handle multiple documents,
25  carefully choose what properties you want to put in the canvas,
26  and what properties you want to put in the document. */
27 class Canvas : public QQuickPaintedItem {
28 Q_OBJECT
29  QML_ELEMENT
30 
31 public:
32  enum class Mode {
33  Selecting,
34  Moving,
37  Rotating,
45  };
46 
47  Canvas(QQuickItem *parent = 0);
48 
49  ~Canvas();
50 
51  void paint(QPainter *painter) override;
52 
53  void loop();
54 
55  void loadSVG(QByteArray &data);
56 
57  void keyPressEvent(QKeyEvent *e) override;
58 
59  void keyReleaseEvent(QKeyEvent *e) override;
60 
61  void mousePressEvent(QMouseEvent *e) override;
62 
63  void mouseMoveEvent(QMouseEvent *e) override;
64 
65  void mouseReleaseEvent(QMouseEvent *e) override;
66 
67  void mouseDoubleClickEvent(QMouseEvent *e) override;
68 
69  void wheelEvent(QWheelEvent *e) override;
70 
71  bool event(QEvent *e) override;
72 
73  Document &document();
74 
75  Controls::Transform &transformControl() { return ctrl_transform_; }
76 
78 
79  Mode mode() const;
80 
81  const QFont &font() const;
82 
83  CanvasTextEdit *textInput() const;
84 
85  // Graphics should be drawn in lower quality is this return true
86  bool isVolatile() const;
87 
88  // Setters
90 
91  void setMode(Mode mode);
92 
93 public slots:
94 
95  void editCut();
96 
97  void editCopy();
98 
99  void editPaste();
100 
101  void editDelete();
102 
103  void editUndo();
104 
105  void editRedo();
106 
107  void editSelectAll();
108 
109  void editGroup();
110 
111  void editUngroup();
112 
113  void editDrawRect();
114 
115  void editDrawPolygon();
116 
117  void editDrawOval();
118 
119  void editDrawLine();
120 
121  void editDrawPath();
122 
123  void editDrawText();
124 
125  void editUnion();
126 
127  void editSubtract();
128 
129  void editIntersect();
130 
131  void editDifference();
132 
133  void editHFlip();
134 
135  void editVFlip();
136 
137  void editAlignHLeft();
138 
139  void editAlignHCenter();
140 
141  void editAlignHRight();
142 
143  void editAlignVTop();
144 
145  void editAlignVCenter();
146 
147  void editAlignVBottom();
148 
149  void addEmptyLayer();
150 
151  void importImage(QImage &image);
152 
153  void setActiveLayer(LayerPtr &layer);
154 
155  void setLayerOrder(QList<LayerPtr> &order);
156 
157  void resize();
158 
159  void setFont(const QFont &font);
160 
161  void emitAllChanges();
162 
163  shared_ptr<PreviewGenerator> exportGcode();
164 
165  void setLineHeight(float line_height);
166 
167  void backToSelectMode();
168 
169  void setWidget(QQuickWidget *widget);
170 
171  void save(QDataStream &out);
172 
173 
174 private:
175  // Basic attributes
176  unique_ptr<Document> doc_;
177  Mode mode_;
178  QFont font_;
179  Clipboard clipboard_;
180  Parser::SVGPPParser svgpp_parser_;
181 
182  // Control components
183  Controls::Transform ctrl_transform_;
184  Controls::Select ctrl_select_;
185  Controls::Grid ctrl_grid_;
186  Controls::Ruler ctrl_ruler_;
187  Controls::Line ctrl_line_;
188  Controls::Oval ctrl_oval_;
189  Controls::PathDraw ctrl_path_draw_;
190  Controls::PathEdit ctrl_path_edit_;
191  Controls::Rect ctrl_rect_;
192  Controls::Text ctrl_text_;
193  Controls::Polygon ctrl_polygon_;
194  QList<Controls::CanvasControl *> ctrls_;
195 
196 
197  // Display attributes
198  QPoint widget_offset_;
199  QElapsedTimer volatility_timer;
200 
201  // Monitor attributes
202  QElapsedTimer fps_timer;
203  int fps_count;
204  float fps;
205  QTimer *timer;
206  QThread *mem_thread_;
207 
208  QQuickWidget *widget_;
209 
210  const QColor backgroundColor();
211 
212  QPointF getTopLeftScrollBoundary();
213 
214  QPointF getBottomRightScrollBoundary();
215 
216  friend class MainWindow;
217 
218 protected:
220 
221 signals:
222 
224 
225  void layerChanged();
226 
227  void modeChanged();
228 
229  void undoCalled();
230 
231  void redoCalled();
232 
233  void transformChanged(qreal x, qreal y, qreal r, qreal w, qreal h);
234 
235  void cursorChanged(Qt::CursorShape cursor);
236 };
Definition: canvas.h:27
Canvas(QQuickItem *parent=0)
Definition: canvas.cpp:16
void selectionsChanged()
void editAlignHCenter()
Definition: canvas.cpp:686
void editAlignVBottom()
Definition: canvas.cpp:730
void editAlignVTop()
Definition: canvas.cpp:708
void loop()
Definition: canvas.cpp:266
CanvasTextEdit * text_input_
Definition: canvas.h:219
bool event(QEvent *e) override
Definition: canvas.cpp:270
CanvasTextEdit * textInput() const
Definition: canvas.cpp:745
void editIntersect()
Definition: canvas.cpp:485
void editAlignVCenter()
Definition: canvas.cpp:719
void editDrawOval()
Definition: canvas.cpp:391
void editVFlip()
Definition: canvas.cpp:670
~Canvas()
Definition: canvas.cpp:72
void layerChanged()
Mode mode() const
Definition: canvas.cpp:646
Controls::Transform & transformControl()
Definition: canvas.h:75
void mouseMoveEvent(QMouseEvent *e) override
Definition: canvas.cpp:174
void modeChanged()
void editAlignHLeft()
Definition: canvas.cpp:675
void setFont(const QFont &font)
Definition: canvas.cpp:576
Document & document()
Definition: canvas.cpp:637
void editPaste()
Definition: canvas.cpp:344
void addEmptyLayer()
Definition: canvas.cpp:521
void mouseDoubleClickEvent(QMouseEvent *e) override
Definition: canvas.cpp:190
void editCopy()
Definition: canvas.cpp:338
void setWidget(QQuickWidget *widget)
Definition: canvas.cpp:741
void loadSVG(QByteArray &data)
Definition: canvas.cpp:77
void undoCalled()
void setLineHeight(float line_height)
Definition: canvas.cpp:593
void mousePressEvent(QMouseEvent *e) override
Definition: canvas.cpp:149
Mode
Definition: canvas.h:32
void editSelectAll()
Definition: canvas.cpp:427
void editDrawLine()
Definition: canvas.cpp:400
void editUngroup()
Definition: canvas.cpp:444
void editHFlip()
Definition: canvas.cpp:665
void cursorChanged(Qt::CursorShape cursor)
void editRedo()
Definition: canvas.cpp:370
void backToSelectMode()
Definition: canvas.cpp:619
void editDelete()
Definition: canvas.cpp:350
void editDrawPolygon()
Definition: canvas.cpp:386
void editDrawText()
Definition: canvas.cpp:418
const QFont & font() const
Definition: canvas.cpp:663
void emitAllChanges()
Definition: canvas.cpp:653
void wheelEvent(QWheelEvent *e) override
Definition: canvas.cpp:244
void editGroup()
Definition: canvas.cpp:439
void setMode(Mode mode)
Definition: canvas.cpp:648
void editDifference()
Definition: canvas.cpp:501
void resize()
Definition: canvas.cpp:531
void keyPressEvent(QKeyEvent *e) override
Definition: canvas.cpp:127
bool isVolatile() const
Definition: canvas.cpp:658
void paint(QPainter *painter) override
Definition: canvas.cpp:93
Clipboard & clipboard()
Definition: canvas.cpp:615
void editDrawPath()
Definition: canvas.cpp:409
void editCut()
Definition: canvas.cpp:332
void importImage(QImage &image)
Definition: canvas.cpp:546
void transformChanged(qreal x, qreal y, qreal r, qreal w, qreal h)
void redoCalled()
void editAlignHRight()
Definition: canvas.cpp:697
void editUndo()
Definition: canvas.cpp:360
void editUnion()
Definition: canvas.cpp:449
void editDrawRect()
Definition: canvas.cpp:377
void setActiveLayer(LayerPtr &layer)
Definition: canvas.cpp:563
void editSubtract()
Definition: canvas.cpp:470
void keyReleaseEvent(QKeyEvent *e) override
Definition: canvas.cpp:145
void save(QDataStream &out)
Definition: canvas.cpp:749
void setLayerOrder(QList< LayerPtr > &order)
Definition: canvas.cpp:568
shared_ptr< PreviewGenerator > exportGcode()
Definition: canvas.cpp:608
void setDocument(Document *document)
Definition: canvas.cpp:639
void mouseReleaseEvent(QMouseEvent *e) override
Definition: canvas.cpp:181
Definition: canvas-text-edit.h:5
Definition: clipboard.h:7
Definition: grid.h:8
Definition: line.h:8
Definition: oval.h:8
Definition: path-draw.h:10
Definition: path-edit.h:9
Definition: polygon.h:10
Definition: rect.h:8
Definition: ruler.h:8
Definition: select.h:8
Definition: text.h:9
Definition: transform.h:13
Document state store for layers, shapes, document specfic settings and current view state.
Definition: document.h:19
Definition: mainwindow.h:25
Definition: svgpp-parser.h:13
shared_ptr< Layer > LayerPtr
Definition: layer.h:127