From 9e4e25d5503d0ee4d466f1f979a8007d3b7975f8 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Tue, 27 Apr 2004 19:29:16 +0000 Subject: [PATCH] Remove the need for the PyPen class git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26987 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/include/wx/wxPython/pyclasses.h | 16 ------ wxPython/src/__gdi_rename.i | 1 - wxPython/src/_pen.i | 71 +++++++++++------------- wxPython/wxPython/_gdi.py | 2 - 4 files changed, 32 insertions(+), 58 deletions(-) diff --git a/wxPython/include/wx/wxPython/pyclasses.h b/wxPython/include/wx/wxPython/pyclasses.h index 51919fda90..085b41be42 100644 --- a/wxPython/include/wx/wxPython/pyclasses.h +++ b/wxPython/include/wx/wxPython/pyclasses.h @@ -76,22 +76,6 @@ public: //--------------------------------------------------------------------------- -class wxPyPen : public wxPen { -public: - wxPyPen(wxColour& colour, int width=1, int style=wxSOLID) - : wxPen(colour, width, style) - { m_dash = NULL; } - ~wxPyPen(); - - void SetDashes(int nb_dashes, const wxDash *dash); - -private: - wxDash* m_dash; -}; - - -//--------------------------------------------------------------------------- - class wxPyTimer : public wxTimer { public: diff --git a/wxPython/src/__gdi_rename.i b/wxPython/src/__gdi_rename.i index 3ad3bab3ba..3ebc350213 100644 --- a/wxPython/src/__gdi_rename.i +++ b/wxPython/src/__gdi_rename.i @@ -7,7 +7,6 @@ %rename(Colour) wxColour; %rename(Palette) wxPalette; %rename(Pen) wxPen; -%rename(PyPen) wxPyPen; %rename(Brush) wxBrush; %rename(Bitmap) wxBitmap; %rename(Mask) wxMask; diff --git a/wxPython/src/_pen.i b/wxPython/src/_pen.i index 911f63d1d0..fc37c53409 100644 --- a/wxPython/src/_pen.i +++ b/wxPython/src/_pen.i @@ -61,15 +61,37 @@ public: wxPyEndBlockThreads(blocked); return retval; } + + void _SetDashes(PyObject* _self, PyObject* pyDashes) { + bool blocked = wxPyBeginBlockThreads(); + int size = PyList_Size(pyDashes); + wxDash* dashes = (wxDash*)byte_LIST_helper(pyDashes); + + // black magic warning! The array of wxDashes needs to exist as + // long as the pen does because wxPen does not copy the array. So + // stick a copy in a Python string object and attach it to _self, + // and then call SetDashes with a pointer to that array. Then + // when the Python pen object is destroyed the array will be + // cleaned up too. + PyObject* strDashes = PyString_FromStringAndSize((char*)dashes, size*sizeof(wxDash)); + PyObject_SetAttrString(_self, "_dashes", strDashes); + + self->SetDashes(size, (wxDash*)PyString_AS_STRING(strDashes)); + delete [] dashes; + Py_DECREF(strDashes); + wxPyEndBlockThreads(blocked); + } } - - %extend { - bool __eq__(const wxPen* other) { return other ? (*self == *other) : False; } - bool __ne__(const wxPen* other) { return other ? (*self != *other) : True; } + %pythoncode { + def SetDashes(self, dashes): + """ + Associate a list of dash lengths with the Pen. + """ + self._SetDashes(self, dashes) } + #ifndef __WXMAC__ -// wxDash* GetDash() const; int GetDashCount() const; #endif @@ -78,42 +100,13 @@ public: void SetStipple(wxBitmap& stipple); #endif - %pythoncode { def __nonzero__(self): return self.Ok() } -}; - - -// The list of ints for the dashes needs to exist for the life of the pen -// so we make it part of the class to save it. See pyclasses.h - -%{ -wxPyPen::~wxPyPen() -{ - if (m_dash) - delete [] m_dash; -} - -void wxPyPen::SetDashes(int nb_dashes, const wxDash *dash) -{ - if (m_dash) - delete [] m_dash; - m_dash = new wxDash[nb_dashes]; - for (int i=0; i