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