]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/misc/fixdc.py
2 This module will do surgery on the wx.DC class in wxPython 2.5.1.5 to
3 make it act like the wx.DC class in later versions will. To use this
4 module simply import it in one of your program's modules before you
5 use any DC's. It does its work upon import and then is done.
7 This module will *only* do something if it is imported in an app
8 running on wxPython 2.5.1.5, for all other versions it will do
9 nothing. This means that you can include it with your application and
10 then if your user is on 2.5.1.5 the DC methods will be updated, but if
11 they are on a newer version (or an older one for that matter) then
12 nothing will be done and your code using DCs will still be compatible.
14 So what does it do? In a nutshell, the old 2.4.x style of method
15 names, where the 'normal' name takes separate parameters for x, y,
16 width and height will be restored, and the new methods that take
17 wx.Point and/or wx.Size (which can also be converted from 2-element
18 sequences) will be given new non-default method names. The 2.5.1.5
19 'XY' style names will be removed. The new names for the 'Point/Size'
28 * DrawEllipsePointSize
29 * DrawEllipticArcPointSize
33 * DrawRectanglePointSize
34 * DrawRotatedTextPoint
35 * DrawRoundedRectanglePointSize
39 * SetClippingRegionPointSize
41 Please note that only the names that you access the methods by will be
42 changed. The names used in docstrings as well as the names used to
43 call the extenaion functions and the names used when raising
44 exceptions will still use the old names. (Of course once a new
45 version of wxPython has been built with this new style then this will
46 no longer apply. The new names will be the real names.) For
49 Traceback (most recent call last):
50 File "/usr/lib/python2.3/site-packages/wx/lib/buttons.py", line 272, in OnPaint
51 self.DrawBezel(dc, x1, y1, x2, y2)
52 File "/usr/lib/python2.3/site-packages/wx/lib/buttons.py", line 220, in DrawBezel
53 dc.DrawLine((x1+i, y1), (x1+i, y2-i))
54 File "/usr/lib/python2.3/site-packages/wx/gdi.py", line 2293, in DrawLine
55 return _gdi.DC_DrawLineXY(*args, **kwargs)
56 TypeError: DC_DrawLineXY() takes exactly 5 arguments (3 given)
59 WARNING: If you import this module then the wx.DC class will be
60 changed for the entire application, so if you use code from
61 the wx.lib package (or 3rd party modules that have already
62 been converted to the doomed 2.5.1.5 implementaion of the DC
63 Draw methods) then that code will break as shown above. This
64 is an all-or-nothing fix, (just like the next version of
65 wxPython will be,) so you *will* need to do something to
66 resolve this situation if you run into it. The best thing to
67 do of course is to correct the library module to work with
68 the corrected DC semantics and then send me a patch, although
69 it probably won't be too long before the library modules are
70 updated in CVS so you could get a copy of them there.
78 ("BlitXY", "Blit", "BlitPointSize"),
79 ("CrossHairXY", "CrossHair", "CrossHairPoint"),
80 ("DrawArcXY", "DrawArc", "DrawArcPoint"),
81 ("DrawBitmapXY", "DrawBitmap", "DrawBitmapPoint"),
82 ("DrawCheckMarkXY", "DrawCheckMark", "DrawCheckMarkRect"),
83 ("DrawCircleXY", "DrawCircle", "DrawCirclePoint"),
84 ("DrawEllipseXY", "DrawEllipse", "DrawEllipsePointSize"),
85 ("DrawEllipticArcXY", "DrawEllipticArc", "DrawEllipticArcPointSize"),
86 ("DrawIconXY", "DrawIcon", "DrawIconPoint"),
87 ("DrawLineXY", "DrawLine", "DrawLinePoint"),
88 ("DrawPointXY", "DrawPoint", "DrawPointPoint"),
89 ("DrawRectangleXY", "DrawRectangle", "DrawRectanglePointSize"),
90 ("DrawRotatedTextXY", "DrawRotatedText", "DrawRotatedTextPoint"),
91 ("DrawRoundedRectangleXY", "DrawRoundedRectangle", "DrawRoundedRectanglePointSize"),
92 ("DrawTextXY", "DrawText", "DrawTextPoint"),
93 ("FloodFillXY", "FloodFill", "FloodFillPoint"),
94 ("GetPixelXY", "GetPixel", "GetPixelPoint"),
95 ("SetClippingRegionXY", "SetClippingRegion", "SetClippingRegionPointSize"),
99 # this is a bit of handy code from the Python Cookbook
100 def _renamefunction(function
, name
):
102 This function returns a function identical to the given one, but
105 from types
import FunctionType
, CodeType
107 c
= function
.func_code
108 if c
.co_name
!= name
:
109 # rename the code object.
110 c
= CodeType(c
.co_argcount
, c
.co_nlocals
, c
.co_stacksize
,
111 c
.co_flags
, c
.co_code
, c
.co_consts
,
112 c
.co_names
, c
.co_varnames
, c
.co_filename
,
113 name
, c
.co_firstlineno
, c
.co_lnotab
)
114 if function
.func_defaults
!= None:
115 return FunctionType(c
, function
.func_globals
, name
,
116 function
.func_defaults
)
117 return FunctionType(c
, function
.func_globals
, name
)
120 if wx
.VERSION
[:4] == (2,5,1,5):
121 for old
, norm
, new
in _names
:
122 m_old
= getattr(wx
.DC
, old
)
123 m_norm
= getattr(wx
.DC
, norm
)
124 setattr(wx
.DC
, new
, _renamefunction(m_norm
, new
))
125 setattr(wx
.DC
, norm
, _renamefunction(m_old
, norm
))
128 del old
, norm
, new
, m_old
, m_norm