1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
from math import copysign
from PyQt5.QtCore import QObject
from PyQt5.QtGui import QCursor
class BaseTool(QObject):
name = "Tool"
cursor = QCursor()
iconPath = None
def __init__(self, parent=None):
super().__init__(parent)
def toolActivated(self):
pass
def toolDisabled(self):
pass
@property
def _glyph(self):
return self.parent().glyph()
# helper functions
def clampToOrigin(self, pos, origin):
deltaX = pos.x() - origin.x()
deltaY = pos.y() - origin.y()
# go into the first quadrant to simplify our study
aDeltaX = abs(deltaX)
aDeltaY = abs(deltaY)
if aDeltaY >= aDeltaX * 2:
pos.setX(origin.x())
elif aDeltaY > aDeltaX / 2:
avg = (aDeltaX + aDeltaY) / 2
pos.setX(origin.x() + copysign(avg, deltaX))
pos.setY(origin.y() + copysign(avg, deltaY))
else:
pos.setY(origin.y())
return pos
def magnetPos(self, pos):
widget = self.parent()
itemTuple = widget.itemAt(pos)
if itemTuple is not None:
itemUnderMouse, parent = itemTuple
if parent is not None:
pos.setX(itemUnderMouse.x)
pos.setY(itemUnderMouse.y)
return pos
# events
def keyPressEvent(self, event):
pass
def keyReleaseEvent(self, event):
pass
def mousePressEvent(self, event):
pass
def mouseMoveEvent(self, event):
pass
def mouseReleaseEvent(self, event):
pass
def mouseDoubleClickEvent(self, event):
pass
# custom painting
def paint(self, painter):
pass
|