-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcanvas.py
68 lines (55 loc) · 2.43 KB
/
canvas.py
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
from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QImage, QPainter, QPen
from PyQt5.QtCore import Qt, QPoint
import qt_touchup_lib as qtl
class Window():
def __init__(self, x, y):
self.top, self.bottom = y, y
self.left, self.right = x, x
def update(self, x, y):
if self.top > y: self.top = y
elif self.bottom < y: self.bottom = y
if self.left > x: self.left = x
elif self.right < x: self.right = x
def export(self):
return (self.left, self.top, self.right, self.bottom)
class Canvas(QWidget):
def __init__(self, img, w, h, r, parent=None):
super(Canvas, self).__init__(parent)
self.parent = parent
self.setFixedSize(w, h)
self.img, self.w, self.h, self.r = img, w, h, r
self.reset_mask()
self.clip_w = lambda x: qtl.clip(x, 0, self.w - 1)
self.clip_h = lambda x: qtl.clip(x, 0, self.h - 1)
self.stroke_window = None
def reset_mask(self):
self.qmask = qtl.get_trans_qimage(self.w, self.h, QImage.Format_Alpha8)
self.mask = qtl.get_mask_from_qimg(self.qmask)
self.mask_display = qtl.get_trans_qimage(self.w, self.h)
self.update()
def paintEvent(self, event):
painter = QPainter(self)
painter.drawImage(QPoint(0, 0), self.img)
painter.drawImage(QPoint(0, 0), self.mask_display)
def mouseMoveEvent(self, event):
if Qt.LeftButton:
painter = QPainter(self.mask_display)
painter.setPen(QPen(Qt.gray, self.r, Qt.SolidLine))
painter.drawLine(self.prev_point, event.pos())
painter1 = QPainter(self.qmask)
painter1.setPen(QPen(Qt.gray, self.r, Qt.SolidLine))
painter1.drawLine(self.prev_point, event.pos())
self.prev_point = event.pos()
self.update()
self.stroke_window.update( self.clip_w(event.pos().x()),
self.clip_h(event.pos().y()))
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.is_clicked, self.prev_point = True, event.pos()
self.stroke_window = Window(event.pos().x(), event.pos().y())
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.mask = qtl.get_mask_from_qimg(self.qmask)
self.parent.parent.add_new_window(self.stroke_window.export())
self.is_clicked = False