#---------------------------------------------------------------------- # Name: compatdc.py # Purpose: Make wxPython 2.4 DC classes compatible with the 2.5 # DC classes # # Author: Robin Dunn # # Created: 21-Apr-2004 # RCS-ID: $Id$ # Copyright: (c) 2004 by Total Control Software # Licence: wxWindows license #---------------------------------------------------------------------- import wx def MakeDCCompatible(klass, full=False): """ Manipulate the DC class passed to this funciton such that it is more compatible with the DC classes used in wxPython 2.5. This should help with writing code that works with both versions. If full is True then in addition to creating the 'XY' versions of the methods, a 'point/size' version (which are the new defaults in 2.5) will also be created. """ if wx.VERSION >= (2,5): return # Nothing to do # first create XY methods from the current ones. klass.FloodFillXY = klass.FloodFill klass.GetPixelXY = klass.GetPixel klass.DrawLineXY = klass.DrawLine klass.CrossHairXY = klass.CrossHair klass.DrawArcXY = klass.DrawArc klass.DrawEllipticArcXY = klass.DrawEllipticArc klass.DrawPointXY = klass.DrawPoint klass.DrawRectangleXY = klass.DrawRectangle klass.DrawRoundedRectangleXY = klass.DrawRoundedRectangle klass.DrawCircleXY = klass.DrawCircle klass.DrawEllipseXY = klass.DrawEllipse klass.DrawIconXY = klass.DrawIcon klass.DrawBitmapXY = klass.DrawBitmap klass.DrawTextXY = klass.DrawText klass.DrawRotatedTextXY = klass.DrawRotatedText klass.BlitXY = klass.Blit # now, make some functions that we can use as new methods if full: def FloodFill(self, pt, col, style=wx.FLOOD_SURFACE): pt = wx.Point(*pt) return self.FloodFillXY(pt.x, pt.y, col, style) klass.FloodFill = FloodFill def GetPixel(self, pt): pt = wx.Point(*pt) return self.GetPixelXY(pt.x, pt.y) klass.GetPixel = GetPixel def DrawLine(self, pt1, pt2): pt1 = wx.Point(*pt1) pt2 = wx.Point(*pt2) return self.DrawLineXY(pt1.x, pt1.y, pt2.x, pt2.y) klass.DrawLine = DrawLine def CrossHair(self, pt): pt = wx.Point(*pt) return self.CrossHairXY(pt.x, pt.y) klass.CrossHair = CrossHair def DrawArc(self, pt1, pt2, centre): pt1 = wx.Point(*pt1) pt2 = wx.Point(*pt2) return self.DrawArcXY(pt1.x, pt1.y, pt2.x, pt2.y, centre.x, centre.y) klass.DrawArc = DrawArc def DrawEllipticArc(self, pt, sz, sa, ea): pt = wx.Point(*pt) sz = wx.Size(*sz) return self.DrawEllipticArcXY(pt.x, pt.y, sz.width, sz.height, sa, ea) klass.DrawEllipticArc = DrawEllipticArc def DrawPoint(self, pt): pt = wx.Point(*pt) return self.DrawPointXY(pt.x, pt.y) klass.DrawPoint = DrawPoint def DrawRectangle(self, pt, sz): pt = wx.Point(*pt) sz = wx.Size(*sz) return self.DrawRectangleXY(pt.x, pt.y, sz.width, sz.height) klass.DrawRectangle = DrawRectangle def DrawRoundedRectangle(self, pt, sz, radius): pt = wx.Point(*pt) sz = wx.Size(*sz) return self.DrawRoundedRectangleXY(pt.x, pt.y, sz.width, sz.height, radius) klass.DrawRoundedRectangle = DrawRoundedRectangle def DrawCircle(self, pt, radius): pt = wx.Point(*pt) return self.DrawCircleXY(pt.x, pt.y, radius) klass.DrawCircle = DrawCircle def DrawEllipse(self, pt, sz): pt = wx.Point(*pt) sz = wx.Size(*sz) return self.DrawEllipseXY(pt.x, pt.y, sz.width, sz.height) klass.DrawEllipse = DrawEllipse def DrawIcon(self, icon, pt): pt = wx.Point(*pt) return self.DrawIconXY(icon, pt.x, pt.y ) klass.DrawIcon = DrawIcon def DrawBitmap(self, bmp, pt): pt = wx.Point(*pt) return self.DrawBitmapXY(bmp, pt.x, pt.y) klass.DrawBitmap = DrawBitmap def DrawText(self, text, pt): pt = wx.Point(*pt) return self.DrawTextXY(text, pt.x, pt.y) klass.DrawText = DrawText def DrawRotatedText(self, text, pt, angle): pt = wx.Point(*pt) return self.DrawRotatedTextXY(text, pt.x, pt.y, angle) klass.DrawRotatedText = DrawRotatedText def Blit(self, destPt, sz, source, srcPt, rop=wx.COPY, useMask=False, srcPtMask=wx.DefaultPosition): return self.BlitXY(destPt.x, destPt.y, sz.width, sz.height, source, srcPt.x, srcPt.y, rop, useMask, srcPtMask.x, srcPtMask.y) klass.Blit = Blit def MakeAllDCsCompatible(full=False): """ Run MakeDCCompatible on all DC classes in wx. """ MakeDCCompatible(wx.BufferedPaintDC, full) MakeDCCompatible(wx.BufferedDC, full) MakeDCCompatible(wx.MemoryDC, full) MakeDCCompatible(wx.ScreenDC, full) MakeDCCompatible(wx.ClientDC, full) MakeDCCompatible(wx.PaintDC, full) MakeDCCompatible(wx.WindowDC, full) MakeDCCompatible(wx.PostScriptDC, full) if hasattr(wx, "MetaFileDC"): MakeDCCompatible(wx.MetaFileDC, full) if hasattr(wx, "PrinterDC"): MakeDCCompatible(wx.PrinterDC, full) MakeDCCompatible(wx.DC, full)