@@ -685,6 +685,9 @@ def do_nothing(*args, **kwargs):
685
685
self .Bind (wx .EVT_MIDDLE_DCLICK , self ._onMiddleButtonDClick )
686
686
self .Bind (wx .EVT_MIDDLE_UP , self ._onMiddleButtonUp )
687
687
688
+ self .Bind (wx .EVT_MOUSE_CAPTURE_CHANGED , self ._onCaptureLost )
689
+ self .Bind (wx .EVT_MOUSE_CAPTURE_LOST , self ._onCaptureLost )
690
+
688
691
if wx .VERSION_STRING < "2.9" :
689
692
# only needed in 2.8 to reduce flicker
690
693
self .SetBackgroundStyle (wx .BG_STYLE_CUSTOM )
@@ -1023,20 +1026,31 @@ def _onKeyUp(self, evt):
1023
1026
evt .Skip ()
1024
1027
FigureCanvasBase .key_release_event (self , key , guiEvent = evt )
1025
1028
1029
+ def _set_capture (self , capture = True ):
1030
+ """control wx mouse capture """
1031
+ if self .HasCapture ():
1032
+ self .ReleaseMouse ()
1033
+ if capture :
1034
+ self .CaptureMouse ()
1035
+
1036
+ def _onCaptureLost (self , evt ):
1037
+ """Capture changed or lost"""
1038
+ self ._set_capture (False )
1039
+
1026
1040
def _onRightButtonDown (self , evt ):
1027
1041
"""Start measuring on an axis."""
1028
1042
x = evt .GetX ()
1029
1043
y = self .figure .bbox .height - evt .GetY ()
1030
1044
evt .Skip ()
1031
- self .CaptureMouse ( )
1045
+ self ._set_capture ( True )
1032
1046
FigureCanvasBase .button_press_event (self , x , y , 3 , guiEvent = evt )
1033
1047
1034
1048
def _onRightButtonDClick (self , evt ):
1035
1049
"""Start measuring on an axis."""
1036
1050
x = evt .GetX ()
1037
1051
y = self .figure .bbox .height - evt .GetY ()
1038
1052
evt .Skip ()
1039
- self .CaptureMouse ( )
1053
+ self ._set_capture ( True )
1040
1054
FigureCanvasBase .button_press_event (self , x , y , 3 ,
1041
1055
dblclick = True , guiEvent = evt )
1042
1056
@@ -1045,24 +1059,23 @@ def _onRightButtonUp(self, evt):
1045
1059
x = evt .GetX ()
1046
1060
y = self .figure .bbox .height - evt .GetY ()
1047
1061
evt .Skip ()
1048
- if self .HasCapture ():
1049
- self .ReleaseMouse ()
1062
+ self ._set_capture (False )
1050
1063
FigureCanvasBase .button_release_event (self , x , y , 3 , guiEvent = evt )
1051
1064
1052
1065
def _onLeftButtonDown (self , evt ):
1053
1066
"""Start measuring on an axis."""
1054
1067
x = evt .GetX ()
1055
1068
y = self .figure .bbox .height - evt .GetY ()
1056
1069
evt .Skip ()
1057
- self .CaptureMouse ( )
1070
+ self ._set_capture ( True )
1058
1071
FigureCanvasBase .button_press_event (self , x , y , 1 , guiEvent = evt )
1059
1072
1060
1073
def _onLeftButtonDClick (self , evt ):
1061
1074
"""Start measuring on an axis."""
1062
1075
x = evt .GetX ()
1063
1076
y = self .figure .bbox .height - evt .GetY ()
1064
1077
evt .Skip ()
1065
- self .CaptureMouse ( )
1078
+ self ._set_capture ( True )
1066
1079
FigureCanvasBase .button_press_event (self , x , y , 1 ,
1067
1080
dblclick = True , guiEvent = evt )
1068
1081
@@ -1072,8 +1085,7 @@ def _onLeftButtonUp(self, evt):
1072
1085
y = self .figure .bbox .height - evt .GetY ()
1073
1086
# print 'release button', 1
1074
1087
evt .Skip ()
1075
- if self .HasCapture ():
1076
- self .ReleaseMouse ()
1088
+ self ._set_capture (False )
1077
1089
FigureCanvasBase .button_release_event (self , x , y , 1 , guiEvent = evt )
1078
1090
1079
1091
# Add middle button events
@@ -1082,15 +1094,15 @@ def _onMiddleButtonDown(self, evt):
1082
1094
x = evt .GetX ()
1083
1095
y = self .figure .bbox .height - evt .GetY ()
1084
1096
evt .Skip ()
1085
- self .CaptureMouse ( )
1097
+ self ._set_capture ( True )
1086
1098
FigureCanvasBase .button_press_event (self , x , y , 2 , guiEvent = evt )
1087
1099
1088
1100
def _onMiddleButtonDClick (self , evt ):
1089
1101
"""Start measuring on an axis."""
1090
1102
x = evt .GetX ()
1091
1103
y = self .figure .bbox .height - evt .GetY ()
1092
1104
evt .Skip ()
1093
- self .CaptureMouse ( )
1105
+ self ._set_capture ( True )
1094
1106
FigureCanvasBase .button_press_event (self , x , y , 2 ,
1095
1107
dblclick = True , guiEvent = evt )
1096
1108
@@ -1100,8 +1112,7 @@ def _onMiddleButtonUp(self, evt):
1100
1112
y = self .figure .bbox .height - evt .GetY ()
1101
1113
# print 'release button', 1
1102
1114
evt .Skip ()
1103
- if self .HasCapture ():
1104
- self .ReleaseMouse ()
1115
+ self ._set_capture (False )
1105
1116
FigureCanvasBase .button_release_event (self , x , y , 2 , guiEvent = evt )
1106
1117
1107
1118
def _onMouseWheel (self , evt ):
0 commit comments