@@ -1368,6 +1368,7 @@ def notify_axes_change(fig):
1368
1368
1369
1369
def show (self ):
1370
1370
self .frame .Show ()
1371
+ self .canvas .draw ()
1371
1372
1372
1373
def destroy (self , * args ):
1373
1374
DEBUG_MSG ("destroy()" , 1 , self )
@@ -1572,6 +1573,8 @@ def __init__(self, canvas):
1572
1573
self .canvas = canvas
1573
1574
self ._idle = True
1574
1575
self .statbar = None
1576
+ self .prevZoomRect = None
1577
+ self .RetinaFix = 'wxMac' in wx .PlatformInfo
1575
1578
1576
1579
def get_canvas (self , frame , fig ):
1577
1580
return FigureCanvasWx (frame , - 1 , fig )
@@ -1673,16 +1676,42 @@ def dynamic_update(self):
1673
1676
1674
1677
def press (self , event ):
1675
1678
if self ._active == 'ZOOM' :
1676
- self .wxoverlay = wx .Overlay ()
1679
+ if not self .RetinaFix :
1680
+ self .wxoverlay = wx .Overlay ()
1681
+ else :
1682
+ self .savedRetinaImage = self .canvas .copy_from_bbox (self .canvas .figure .gca ().bbox )
1683
+ self .zoomStartX = event .xdata
1684
+ self .zoomStartY = event .ydata
1677
1685
1678
1686
def release (self , event ):
1679
1687
if self ._active == 'ZOOM' :
1680
1688
# When the mouse is released we reset the overlay and it
1681
1689
# restores the former content to the window.
1682
- self .wxoverlay .Reset ()
1683
- del self .wxoverlay
1690
+ if not self .RetinaFix :
1691
+ self .wxoverlay .Reset ()
1692
+ del self .wxoverlay
1693
+ else :
1694
+ del self .savedRetinaImage
1695
+ if self .prevZoomRect :
1696
+ self .prevZoomRect .pop (0 ).remove ()
1697
+ self .prevZoomRect = None
1684
1698
1685
1699
def draw_rubberband (self , event , x0 , y0 , x1 , y1 ):
1700
+ if self .RetinaFix :
1701
+ # wx.DCOverlay does not work properly on Macs with Retina displays
1702
+ # for Macs, use the following code instead.
1703
+ rubberBandColor = '#C0C0FF' # or load from config?
1704
+ if self .prevZoomRect :
1705
+ self .prevZoomRect .pop (0 ).remove ()
1706
+ self .canvas .restore_region (self .savedRetinaImage )
1707
+ X0 ,X1 ,Y0 ,Y1 = self .zoomStartX ,event .xdata ,self .zoomStartY ,event .ydata
1708
+ lineX = (X0 , X0 , X1 , X1 , X0 )
1709
+ lineY = (Y0 , Y1 , Y1 , Y0 , Y0 )
1710
+ self .prevZoomRect = self .canvas .figure .gca ().plot (lineX ,lineY ,'-' ,color = rubberBandColor )
1711
+ self .canvas .figure .gca ().draw_artist (self .prevZoomRect [0 ])
1712
+ self .canvas .blit (self .canvas .figure .gca ().bbox )
1713
+ return
1714
+
1686
1715
# Use an Overlay to draw a rubberband-like bounding box.
1687
1716
1688
1717
dc = wx .ClientDC (self .canvas )
0 commit comments