8000 add code that zooms properly on a Mac with a Retina display; the adde… · matplotlib/matplotlib@7487b23 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7487b23

Browse files
committed
add code that zooms properly on a Mac with a Retina display; the added self.canvas.draw() call in the FigureManagerWx.show() method comes from the Canopy dist
1 parent ca892ea commit 7487b23

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

lib/matplotlib/backends/backend_wx.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,7 @@ def notify_axes_change(fig):
13681368

13691369
def show(self):
13701370
self.frame.Show()
1371+
self.canvas.draw()
13711372

13721373
def destroy(self, *args):
13731374
DEBUG_MSG("destroy()", 1, self)
@@ -1572,6 +1573,8 @@ def __init__(self, canvas):
15721573
self.canvas = canvas
15731574
self._idle = True
15741575
self.statbar = None
1576+
self.prevZoomRect = None
1577+
self.RetinaFix = 'wxMac' in wx.PlatformInfo
15751578

15761579
def get_canvas(self, frame, fig):
15771580
return FigureCanvasWx(frame, -1, fig)
@@ -1673,16 +1676,42 @@ def dynamic_update(self):
16731676

16741677
def press(self, event):
16751678
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
16771685

16781686
def release(self, event):
16791687
if self._active == 'ZOOM':
16801688
# When the mouse is released we reset the overlay and it
16811689
# 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
16841698

16851699
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+
16861715
# Use an Overlay to draw a rubberband-like bounding box.
16871716

16881717
dc = wx.ClientDC(self.canvas)

0 commit comments

Comments
 (0)
0