MiRCARTCanvasBackend.py: only update device context brushes & pen if necessary.

This commit is contained in:
Lucio Andrés Illanes Albornoz 2018-01-09 21:37:58 +01:00
parent dbf6c76930
commit 2e014cd7ec
1 changed files with 22 additions and 3 deletions

View File

@ -28,6 +28,7 @@ import wx
class MiRCARTCanvasBackend(): class MiRCARTCanvasBackend():
"""XXX""" """XXX"""
_font = _brushes = _pens = None _font = _brushes = _pens = None
_lastBrush = _lastPen = None
canvasBitmap = cellSize = None canvasBitmap = cellSize = None
# {{{ _drawBrushPatch(self, eventDc, patch, tmpDc): XXX # {{{ _drawBrushPatch(self, eventDc, patch, tmpDc): XXX
@ -36,9 +37,9 @@ class MiRCARTCanvasBackend():
brushFg = self._brushes[patch[1][1]] brushFg = self._brushes[patch[1][1]]
brushBg = self._brushes[patch[1][0]] brushBg = self._brushes[patch[1][0]]
pen = self._pens[patch[1][1]] pen = self._pens[patch[1][1]]
for dc in (eventDc, tmpDc): self._setBrushDc(brushBg, brushFg, (eventDc, tmpDc), pen)
dc.SetBrush(brushFg); dc.SetBackground(brushBg); dc.SetPen(pen); eventDc.DrawRectangle(*absPoint, *self.cellSize)
dc.DrawRectangle(*absPoint, *self.cellSize) tmpDc.DrawRectangle(*absPoint, *self.cellSize)
# }}} # }}}
# {{{ _drawCharPatch(self, eventDc, patch, tmpDc): XXX # {{{ _drawCharPatch(self, eventDc, patch, tmpDc): XXX
def _drawCharPatch(self, eventDc, patch, tmpDc): def _drawCharPatch(self, eventDc, patch, tmpDc):
@ -65,6 +66,7 @@ class MiRCARTCanvasBackend():
for pen in self._pens or []: for pen in self._pens or []:
pen.Destroy() pen.Destroy()
self._pens = None self._pens = None
self._lastBrushBg = self._lastBrushFg = self._lastPen = None;
# }}} # }}}
# {{{ _initBrushesAndPens(self): XXX # {{{ _initBrushesAndPens(self): XXX
def _initBrushesAndPens(self): def _initBrushesAndPens(self):
@ -75,6 +77,22 @@ class MiRCARTCanvasBackend():
wx.Colour(MiRCARTColours[mircColour][0:4]), wx.BRUSHSTYLE_SOLID) wx.Colour(MiRCARTColours[mircColour][0:4]), wx.BRUSHSTYLE_SOLID)
self._pens[mircColour] = wx.Pen( \ self._pens[mircColour] = wx.Pen( \
wx.Colour(MiRCARTColours[mircColour][0:4]), 1) wx.Colour(MiRCARTColours[mircColour][0:4]), 1)
self._lastBrushBg = self._lastBrushFg = self._lastPen = None;
# }}}
# {{{ _setBrushDc(self, brushBg, brushFg, dcList, pen): XXX
def _setBrushDc(self, brushBg, brushFg, dcList, pen):
if self._lastBrushBg != brushBg:
for dc in dcList:
dc.SetBackground(brushBg)
self._lastBrushBg = brushBg
if self._lastBrushFg != brushFg:
for dc in dcList:
dc.SetBrush(brushFg)
self._lastBrushFg = brushFg
if self._lastPen != pen:
for dc in dcList:
dc.SetPen(pen)
self._lastPen = pen
# }}} # }}}
# {{{ _xlatePoint(self, relMapPoint): XXX # {{{ _xlatePoint(self, relMapPoint): XXX
def _xlatePoint(self, relMapPoint): def _xlatePoint(self, relMapPoint):
@ -102,6 +120,7 @@ class MiRCARTCanvasBackend():
def getDeviceContexts(self, parentWindow): def getDeviceContexts(self, parentWindow):
eventDc = wx.ClientDC(parentWindow); tmpDc = wx.MemoryDC(); eventDc = wx.ClientDC(parentWindow); tmpDc = wx.MemoryDC();
tmpDc.SelectObject(self.canvasBitmap) tmpDc.SelectObject(self.canvasBitmap)
self._lastBrushBg = self._lastBrushFg = self._lastPen = None;
return (eventDc, tmpDc) return (eventDc, tmpDc)
# }}} # }}}
# {{{ reset(self, canvasSize, cellSize): # {{{ reset(self, canvasSize, cellSize):