@@ -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
3141class 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