#endif
wxBitmap GetSubBitmap( const wxRect& rect );
-#ifdef __WXMSW__
bool CopyFromIcon(const wxIcon& icon);
+#ifdef __WXMSW__
bool CopyFromCursor(const wxCursor& cursor);
int GetQuality();
void SetQuality(int q);
//----------------------------------------------------------------------
-
class wxPen : public wxGDIObject {
public:
wxPen(wxColour& colour, int width=1, int style=wxSOLID);
void SetWidth(int width);
// **** This one needs to return a list of ints (wxDash)
- int GetDashes(wxDash **dashes);
+ //int GetDashes(wxDash **dashes);
void SetDashes(int LCOUNT, wxDash* choices);
#ifdef __WXMSW__
};
+
+%{
+class wxPyPen : public wxPen {
+public:
+ wxPyPen(wxColour& colour, int width=1, int style=wxSOLID)
+ : wxPen(colour, width, style)
+ { m_dash = NULL; }
+ ~wxPyPen() {
+ if (m_dash)
+ delete m_dash;
+ }
+
+ void SetDashes(int nb_dashes, const wxDash *dash) {
+ m_dash = new wxDash[nb_dashes];
+ for (int i=0; i<nb_dashes; i++)
+ m_dash[i] = dash[i];
+ wxPen::SetDashes(nb_dashes, m_dash);
+ }
+
+private:
+ wxDash* m_dash;
+};
+%}
+
+
+
+class wxPyPen : public wxPen {
+public:
+ wxPyPen(wxColour& colour, int width=1, int style=wxSOLID);
+ ~wxPyPen();
+
+ void SetDashes(int LCOUNT, wxDash* choices);
+};
+
+
+
class wxPenList : public wxObject {
public:
void CalcBoundingBox(int x, int y);
void ResetBoundingBox();
+ %addmethods {
+ void GetBoundingBox(int* OUTPUT, int* OUTPUT, int* OUTPUT, int* OUTPUT);
+ // See below for implementation
+ }
+
#ifdef __WXMSW__
long GetHDC();
#endif
+
+
+ %addmethods {
+ // NOTE: These methods are VERY SIMILAR in implentation. It would be
+ // nice to factor out code and or turn them into a set of
+ // template-like macros.
+
+ // Draw a point for every set of coordinants in pyPoints, optionally
+ // setting a new pen for each
+ PyObject* _DrawPointList(PyObject* pyPoints, PyObject* pyPens) {
+ bool isFastSeq = PyList_Check(pyPoints) || PyTuple_Check(pyPoints);
+ bool isFastPens = PyList_Check(pyPens) || PyTuple_Check(pyPens);
+ int numObjs = 0;
+ int numPens = 0;
+ wxPen* pen;
+ PyObject* obj;
+ int x1, y1;
+ int i = 0;
+
+ if (!PySequence_Check(pyPoints)) {
+ goto err0;
+ }
+ if (!PySequence_Check(pyPens)) {
+ goto err1;
+ }
+ numObjs = PySequence_Length(pyPoints);
+ numPens = PySequence_Length(pyPens);
+
+ for (i = 0; i < numObjs; i++) {
+ // Use a new pen?
+ if (i < numPens) {
+ if (isFastPens) {
+ obj = PySequence_Fast_GET_ITEM(pyPens, i);
+ }
+ else {
+ obj = PySequence_GetItem(pyPens, i);
+ }
+ if (SWIG_GetPtrObj(obj, (void **) &pen, "_wxPen_p")) {
+ if (!isFastPens)
+ Py_DECREF(obj);
+ goto err1;
+ }
+
+ self->SetPen(*pen);
+ if (!isFastPens)
+ Py_DECREF(obj);
+ }
+
+ // Get the point coordinants
+ if (isFastSeq) {
+ obj = PySequence_Fast_GET_ITEM(pyPoints, i);
+ }
+ else {
+ obj = PySequence_GetItem(pyPoints, i);
+ }
+ if (! _2int_seq_helper(obj, &x1, &y1)) {
+ if (!isFastPens)
+ Py_DECREF(obj);
+ goto err0;
+ }
+
+ // Now draw the point
+ self->DrawPoint(x1, y1);
+
+ if (!isFastSeq)
+ Py_DECREF(obj);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+
+ err1:
+ PyErr_SetString(PyExc_TypeError, "Expected a sequence of wxPens");
+ return NULL;
+ err0:
+ PyErr_SetString(PyExc_TypeError, "Expected a sequence of (x,y) sequences.");
+ return NULL;
+ }
+
+
+ // Draw a line for every set of coordinants in pyLines, optionally
+ // setting a new pen for each
+ PyObject* _DrawLineList(PyObject* pyLines, PyObject* pyPens) {
+ bool isFastSeq = PyList_Check(pyLines) || PyTuple_Check(pyLines);
+ bool isFastPens = PyList_Check(pyPens) || PyTuple_Check(pyPens);
+ int numObjs = 0;
+ int numPens = 0;
+ wxPen* pen;
+ PyObject* obj;
+ int x1, y1, x2, y2;
+ int i = 0;
+
+ if (!PySequence_Check(pyLines)) {
+ goto err0;
+ }
+ if (!PySequence_Check(pyPens)) {
+ goto err1;
+ }
+ numObjs = PySequence_Length(pyLines);
+ numPens = PySequence_Length(pyPens);
+
+ for (i = 0; i < numObjs; i++) {
+ // Use a new pen?
+ if (i < numPens) {
+ if (isFastPens) {
+ obj = PySequence_Fast_GET_ITEM(pyPens, i);
+ }
+ else {
+ obj = PySequence_GetItem(pyPens, i);
+ }
+ if (SWIG_GetPtrObj(obj, (void **) &pen, "_wxPen_p")) {
+ if (!isFastPens)
+ Py_DECREF(obj);
+ goto err1;
+ }
+
+ self->SetPen(*pen);
+ if (!isFastPens)
+ Py_DECREF(obj);
+ }
+
+ // Get the line coordinants
+ if (isFastSeq) {
+ obj = PySequence_Fast_GET_ITEM(pyLines, i);
+ }
+ else {
+ obj = PySequence_GetItem(pyLines, i);
+ }
+ if (! _4int_seq_helper(obj, &x1, &y1, &x2, &y2)) {
+ if (!isFastPens)
+ Py_DECREF(obj);
+ goto err0;
+ }
+
+ // Now draw the line
+ self->DrawLine(x1, y1, x2, y2);
+
+ if (!isFastSeq)
+ Py_DECREF(obj);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+
+ err1:
+ PyErr_SetString(PyExc_TypeError, "Expected a sequence of wxPens");
+ return NULL;
+ err0:
+ PyErr_SetString(PyExc_TypeError, "Expected a sequence of (x1,y1, x2,y2) sequences.");
+ return NULL;
+ }
+ }
+
+
+ %pragma(python) addtoclass = "
+ def DrawPointList(self, points, pens=None):
+ if pens is None:
+ pens = []
+ elif isinstance(pens, wxPenPtr):
+ pens = [pens]
+ elif len(pens) != len(points):
+ raise ValueError('points and pens must have same length')
+ return self._DrawPointList(points, pens)
+
+ def DrawLineList(self, lines, pens=None):
+ if pens is None:
+ pens = []
+ elif isinstance(pens, wxPenPtr):
+ pens = [pens]
+ elif len(pens) != len(lines):
+ raise ValueError('lines and pens must have same length')
+ return self._DrawLineList(lines, pens)
+"
+
+
};
+
+%{
+static void wxDC_GetBoundingBox(wxDC* dc, int* x1, int* y1, int* x2, int* y2) {
+ *x1 = dc->MinX();
+ *y1 = dc->MinY();
+ *x2 = dc->MaxX();
+ *y2 = dc->MaxY();
+}
+%}
+
//----------------------------------------------------------------------
class wxMemoryDC : public wxDC {