Skip to content

Commit 182c4cc

Browse files
committed
fixed brush finctionality
1 parent 24574ee commit 182c4cc

File tree

1 file changed

+34
-13
lines changed

1 file changed

+34
-13
lines changed

pyidi/selection/main_window.py

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,30 @@ def __init__(self, parent_gui, *args, **kwargs):
1313

1414
def mouseClickEvent(self, ev):
1515
if self.parent_gui.mode == "manual" and self.parent_gui.method_buttons["Brush"].isChecked():
16-
ev.accept() # Prevent normal event
17-
self.parent_gui.handle_brush_start(ev)
16+
if self.parent_gui.ctrl_held:
17+
ev.accept()
18+
self.parent_gui.handle_brush_start(ev)
19+
else:
20+
ev.ignore()
21+
else:
22+
super().mouseClickEvent(ev)
1823

1924
def mouseDragEvent(self, ev, axis=None):
2025
if self.parent_gui.mode == "manual" and self.parent_gui.method_buttons["Brush"].isChecked():
21-
ev.accept()
22-
if ev.isStart():
23-
self.parent_gui._painting = True
24-
self.parent_gui._brush_path = []
25-
elif ev.isFinish():
26-
self.parent_gui._painting = False
27-
self.parent_gui.handle_brush_end(ev)
28-
else:
29-
self.parent_gui.handle_brush_move(ev)
26+
if self.parent_gui.ctrl_held:
27+
ev.accept()
28+
if ev.isStart():
29+
self.parent_gui._painting = True
30+
self.parent_gui._brush_path = []
31+
self.parent_gui.handle_brush_start(ev)
32+
elif ev.isFinish():
33+
self.parent_gui._painting = False
34+
self.parent_gui.handle_brush_end(ev)
35+
else:
36+
self.parent_gui.handle_brush_move(ev)
37+
return
38+
# fallback: pan
39+
super().mouseDragEvent(ev, axis)
3040

3141
class SelectionGUI(QtWidgets.QMainWindow):
3242
def __init__(self, video):
@@ -41,6 +51,8 @@ def __init__(self, video):
4151

4252
self._paint_mask = None # Same shape as the image
4353
self._paint_radius = 10 # pixels
54+
self.ctrl_held = False
55+
self.installEventFilter(self)
4456

4557
self.selected_points = []
4658
self.manual_points = []
@@ -126,6 +138,15 @@ def __init__(self, video):
126138
if app is not None:
127139
app.exec()
128140

141+
def eventFilter(self, source, event):
142+
if event.type() == QtCore.QEvent.Type.KeyPress:
143+
if event.key() == QtCore.Qt.Key.Key_Control:
144+
self.ctrl_held = True
145+
elif event.type() == QtCore.QEvent.Type.KeyRelease:
146+
if event.key() == QtCore.Qt.Key.Key_Control:
147+
self.ctrl_held = False
148+
return super().eventFilter(source, event)
149+
129150
def create_help_button(self, tooltip_text: str) -> QtWidgets.QToolButton:
130151
"""Create a small '?' help button with a tooltip."""
131152
button = QtWidgets.QToolButton()
@@ -405,8 +426,8 @@ def method_selected(self, id: int):
405426
is_grid = method_name == "Grid"
406427
is_brush = method_name == "Brush"
407428

408-
# Disable panning
409-
self.view.setMouseEnabled(not is_brush, not is_brush)
429+
# Always enable mouse; painting is now conditional on Ctrl
430+
self.view.setMouseEnabled(True, True)
410431

411432
show_spacing = is_along or is_grid
412433

0 commit comments

Comments
 (0)