@@ -694,6 +694,9 @@ def do_nothing(*args, **kwargs):
694
694
self .Bind (wx .EVT_MIDDLE_DCLICK , self ._onMiddleButtonDClick )
695
695
self .Bind (wx .EVT_MIDDLE_UP , self ._onMiddleButtonUp )
696
696
697
+ self .Bind (wx .EVT_MOUSE_CAPTURE_CHANGED , self ._onCaptureLost )
698
+ self .Bind (wx .EVT_MOUSE_CAPTURE_LOST , self ._onCaptureLost )
699
+
697
700
if wx .VERSION_STRING < "2.9" :
698
701
# only needed in 2.8 to reduce flicker
699
702
self .SetBackgroundStyle (wx .BG_STYLE_CUSTOM )
@@ -1031,20 +1034,31 @@ def _onKeyUp(self, evt):
1031
1034
evt .Skip ()
1032
1035
FigureCanvasBase .key_release_event (self , key , guiEvent = evt )
1033
1036
1037
+ def _set_capture (self , capture = True ):
1038
+ """control wx mouse capture """
1039
+ if self .HasCapture ():
1040
+ self .ReleaseMouse ()
1041
+ if capture :
1042
+ self .CaptureMouse ()
1043
+
1044
+ def _onCaptureLost (self , evt ):
1045
+ """Capture changed or lost"""
1046
+ self ._set_capture (False )
1047
+
1034
1048
def _onRightButtonDown (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 , guiEvent = evt )
1041
1055
1042
1056
def _onRightButtonDClick (self , evt ):
1043
1057
"""Start measuring on an axis."""
1044
1058
x = evt .GetX ()
1045
1059
y = self .figure .bbox .height - evt .GetY ()
1046
1060
evt .Skip ()
1047
- self .CaptureMouse ( )
1061
+ self ._set_capture ( True )
1048
1062
FigureCanvasBase .button_press_event (self , x , y , 3 ,
1049
1063
dblclick = True , guiEvent = evt )
1050
1064
@@ -1053,24 +1067,23 @@ def _onRightButtonUp(self, evt):
1053
1067
x = evt .GetX ()
1054
1068
y = self .figure .bbox .height - evt .GetY ()
1055
1069
evt .Skip ()
1056
- if self .HasCapture ():
1057
- self .ReleaseMouse ()
1070
+ self ._set_capture (False )
1058
1071
FigureCanvasBase .button_release_event (self , x , y , 3 , guiEvent = evt )
1059
1072
1060
1073
def _onLeftButtonDown (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 , guiEvent = evt )
1067
1080
1068
1081
def _onLeftButtonDClick (self , evt ):
1069
1082
"""Start measuring on an axis."""
1070
1083
x = evt .GetX ()
1071
1084
y = self .figure .bbox .height - evt .GetY ()
1072
1085
evt .Skip ()
1073
- self .CaptureMouse ( )
1086
+ self ._set_capture ( True )
1074
1087
FigureCanvasBase .button_press_event (self , x , y , 1 ,
1075
1088
dblclick = True , guiEvent = evt )
1076
1089
@@ -1080,8 +1093,7 @@ def _onLeftButtonUp(self, evt):
1080
1093
y = self .figure .bbox .height - evt .GetY ()
1081
1094
# print 'release button', 1
1082
1095
evt .Skip ()
1083
- if self .HasCapture ():
1084
- self .ReleaseMouse ()
1096
+ self ._set_capture (False )
1085
1097
FigureCanvasBase .button_release_event (self , x , y , 1 , guiEvent = evt )
1086
1098
1087
1099
# Add middle button events
@@ -1090,15 +1102,15 @@ def _onMiddleButtonDown(self, evt):
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 , guiEvent = evt )
1095
1107
1096
1108
def _onMiddleButtonDClick (self , evt ):
1097
1109
"""Start measuring on an axis."""
1098
1110
x = evt .GetX ()
1099
1111
y = self .figure .bbox .height - evt .GetY ()
1100
1112
evt .Skip ()
1101
- self .CaptureMouse ( )
1113
+ self ._set_capture ( True )
1102
1114
FigureCanvasBase .button_press_event (self , x , y , 2 ,
1103
1115
dblclick = True , guiEvent = evt )
1104
1116
@@ -1108,8 +1120,7 @@ def _onMiddleButtonUp(self, evt):
1108
1120
y = self .figure .bbox .height - evt .GetY ()
1109
1121
# print 'release button', 1
1110
1122
evt .Skip ()
1111
- if self .HasCapture ():
1112
- self .ReleaseMouse ()
1123
+ self ._set_capture (False )
1113
1124
FigureCanvasBase .button_release_event (self , x , y , 2 , guiEvent = evt )
1114
1125
1115
1126
def _onMouseWheel (self , evt ):
0 commit comments