X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9fd4be5571cbbbeaa6c4f7dabcc2ba69fe1e3471..6df870588070fec31fc2d5b2e0b808254b9882f7:/wxPython/src/_pen.i?ds=sidebyside diff --git a/wxPython/src/_pen.i b/wxPython/src/_pen.i index e7d1b7e8eb..577c0a936e 100644 --- a/wxPython/src/_pen.i +++ b/wxPython/src/_pen.i @@ -29,6 +29,8 @@ %newgroup +MustHaveApp(wxPen); + class wxPen : public wxGDIObject { public: wxPen(wxColour& colour, int width=1, int style=wxSOLID); @@ -40,7 +42,8 @@ public: int GetStyle(); int GetWidth(); - bool Ok(); + bool IsOk(); + %pythoncode { Ok = IsOk } void SetCap(int cap_style); void SetColour(wxColour& colour); @@ -54,61 +57,71 @@ public: PyObject* GetDashes() { wxDash* dashes; int count = self->GetDashes(&dashes); - wxPyBeginBlockThreads(); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); PyObject* retval = PyList_New(0); - for (int x=0; x<count; x++) - PyList_Append(retval, PyInt_FromLong(dashes[x])); - wxPyEndBlockThreads(); + for (int x=0; x<count; x++) { + PyObject* pyint = PyInt_FromLong(dashes[x]); + PyList_Append(retval, pyint); + Py_DECREF(pyint); + } + wxPyEndBlockThreads(blocked); return retval; } + + void _SetDashes(PyObject* _self, PyObject* pyDashes) { + wxPyBlock_t 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); + } + } + %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; + %property(DashCount, GetDashCount, doc="See `GetDashCount`"); #endif #ifdef __WXMSW__ wxBitmap* GetStipple(); void SetStipple(wxBitmap& stipple); + %property(Stipple, GetStipple, SetStipple, doc="See `GetStipple` and `SetStipple`"); #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<nb_dashes; i++) { - m_dash[i] = dash[i]; + + %extend { + bool __eq__(const wxPen* other) { return other ? (*self == *other) : false; } + bool __ne__(const wxPen* other) { return other ? (*self != *other) : true; } } - wxPen::SetDashes(nb_dashes, m_dash); -} -%} - - -class wxPyPen : public wxPen { -public: - wxPyPen(wxColour& colour, int width=1, int style=wxSOLID); - ~wxPyPen(); - - void SetDashes(int dashes, wxDash* dashes_array); + %pythoncode { def __nonzero__(self): return self.IsOk() } + + %property(Cap, GetCap, SetCap, doc="See `GetCap` and `SetCap`"); + %property(Colour, GetColour, SetColour, doc="See `GetColour` and `SetColour`"); + %property(Dashes, GetDashes, SetDashes, doc="See `GetDashes` and `SetDashes`"); + %property(Join, GetJoin, SetJoin, doc="See `GetJoin` and `SetJoin`"); + %property(Style, GetStyle, SetStyle, doc="See `GetStyle` and `SetStyle`"); + %property(Width, GetWidth, SetWidth, doc="See `GetWidth` and `SetWidth`"); }; -// wxPyPen is aliased to wxPen -%pythoncode { Pen = PyPen }; //---------------------------------------------------------------------------