]> Shamusworld >> Repos - architektonas/blob - src/drawingview.h
Layer handling code mostly done; still need to handle layer locking.
[architektonas] / src / drawingview.h
1 #ifndef __DRAWINGVIEW_H__
2 #define __DRAWINGVIEW_H__
3
4 #include <QtWidgets>
5 #include <stdint.h>
6 #include "structs.h"
7
8 enum { ToolMouseDown, ToolMouseMove, ToolMouseUp, ToolKeyDown, ToolKeyUp, ToolCleanup };
9
10 class Painter;
11
12 class DrawingView: public QWidget
13 {
14         Q_OBJECT
15
16         public:
17                 DrawingView(QWidget * parent = NULL);
18
19         public:
20                 void SetGridSize(uint32_t);
21                 void UpdateGridBackground(void);
22                 Point SnapPointToGrid(Point);
23                 void RenderObjects(Painter *, std::vector<void *> &, int);
24                 void AddHoveredToSelection(void);
25                 void GetSelection(std::vector<void *> &);
26                 void GetHovered(std::vector<void *> &);
27                 void ToolHandler(int, Point);
28                 void ToolDraw(Painter *);
29                 void LineHandler(int, Point);
30                 void CircleHandler(int, Point);
31                 void ArcHandler(int, Point);
32                 void RotateHandler(int, Point);
33                 void MirrorHandler(int, Point);
34                 void CheckObjectBounds(void);
35                 bool HitTestObjects(Point);
36                 void HandleObjectMovement(Point);
37
38         public slots:
39                 void SetCurrentLayer(int);
40                 void DeleteCurrentLayer(int);
41                 void HandleLayerToggle(void);
42                 void HandleLayerSwap(int, int);
43
44         protected:
45                 void paintEvent(QPaintEvent * event);
46                 void resizeEvent(QResizeEvent * event);
47                 void mousePressEvent(QMouseEvent * event);
48                 void mouseMoveEvent(QMouseEvent * event);
49                 void mouseReleaseEvent(QMouseEvent * event);
50                 void wheelEvent(QWheelEvent * event);
51                 void keyPressEvent(QKeyEvent * event);
52                 void keyReleaseEvent(QKeyEvent * event);
53
54         private:
55                 QPoint GetAdjustedMousePosition(QMouseEvent * event);
56                 QPoint GetAdjustedClientPosition(int x, int y);
57
58         public:
59                 bool useAntialiasing;
60                 uint32_t numSelected;
61                 uint32_t numHovered;
62                 bool shiftDown;
63                 bool ctrlDown;
64
65         private:
66                 QPixmap gridBackground;
67                 double scale;                                                   // Window scaling factor
68                 int32_t offsetX, offsetY;                               // Window offsets
69         public:
70                 Container document;
71                 uint32_t gridPixels;                                    // Grid size in pixels
72         private:
73                 bool collided;
74                 bool scrollDrag;
75                 Vector oldPoint;
76                 QString informativeText;
77
78         public:
79                 std::vector<void *> select;
80                 std::vector<void *> hover;
81                 std::vector<void *> toolObjects;
82                 std::vector<Object> toolScratch;
83                 Point toolPoint[32];
84                 Point intersectionPoint;
85                 bool hoveringIntersection;
86
87 //      public:
88 //              static Container document;
89 };
90
91 #endif  // __DRAWINGVIEW_H__
92