From a400c2ec04f77b3a72d23cb2b122866f3fddfd45 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Thu, 22 Apr 2004 23:22:46 +0000 Subject: [PATCH] A way to make the DC classes in wxPython look like the ones in 2.5, so code can be written that works with both versions. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26931 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/wx/lib/compatdc.py | 155 ++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 wxPython/wx/lib/compatdc.py diff --git a/wxPython/wx/lib/compatdc.py b/wxPython/wx/lib/compatdc.py new file mode 100644 index 0000000000..51f20c3a8a --- /dev/null +++ b/wxPython/wx/lib/compatdc.py @@ -0,0 +1,155 @@ +#---------------------------------------------------------------------- +# 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) + -- 2.47.2