]>
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