]> git.saurik.com Git - wxWidgets.git/commitdiff
A way to make the DC classes in wxPython look like the ones in 2.5, so
authorRobin Dunn <robin@alldunn.com>
Thu, 22 Apr 2004 23:22:46 +0000 (23:22 +0000)
committerRobin Dunn <robin@alldunn.com>
Thu, 22 Apr 2004 23:22:46 +0000 (23:22 +0000)
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 [new file with mode: 0644]

diff --git a/wxPython/wx/lib/compatdc.py b/wxPython/wx/lib/compatdc.py
new file mode 100644 (file)
index 0000000..51f20c3
--- /dev/null
@@ -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)
+