From: Robin Dunn Date: Tue, 27 Apr 2004 19:29:16 +0000 (+0000) Subject: Remove the need for the PyPen class X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/9e4e25d5503d0ee4d466f1f979a8007d3b7975f8?ds=inline Remove the need for the PyPen class git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26987 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- 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