X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6ee2116be1a8abc2cf8734bf407767c04a617990..c70fd24fa839a38e807685df7cd2ef48c1b53884:/wxPython/src/gdi.i diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i index ffcb6744b3..46323e7589 100644 --- a/wxPython/src/gdi.i +++ b/wxPython/src/gdi.i @@ -15,11 +15,7 @@ %{ #include "helpers.h" -#include #include -#ifndef __WXMSW__ -#include -#endif #include #include #include @@ -58,13 +54,13 @@ public: class wxBitmap : public wxGDIObject { public: - wxBitmap(const wxString& name, wxBitmapType type); + wxBitmap(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_BMP); ~wxBitmap(); wxPalette* GetPalette(); wxMask* GetMask(); - bool LoadFile(const wxString& name, long flags); - bool SaveFile(const wxString& name, int type, wxPalette* palette = NULL); + bool LoadFile(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_BMP); + bool SaveFile(const wxString& name, wxBitmapType type, wxPalette* palette = NULL); void SetMask(wxMask* mask); #ifdef __WXMSW__ void SetPalette(wxPalette& palette); @@ -87,8 +83,8 @@ public: #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); @@ -366,6 +362,10 @@ enum wxFontEncoding wxFONTENCODING_CP866, // and another one // and for Windows wxFONTENCODING_CP874, // WinThai + wxFONTENCODING_CP932, // Japanese (shift-JIS) + wxFONTENCODING_CP936, // Chiniese simplified (GB) + wxFONTENCODING_CP949, // Korean (Hangul charset) + wxFONTENCODING_CP950, // Chinese (traditional - Big5) wxFONTENCODING_CP1250, // WinLatin2 wxFONTENCODING_CP1251, // WinCyrillic wxFONTENCODING_CP1252, // WinLatin1 @@ -598,7 +598,6 @@ public: //---------------------------------------------------------------------- - class wxPen : public wxGDIObject { public: wxPen(wxColour& colour, int width=1, int style=wxSOLID); @@ -618,7 +617,7 @@ public: 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__ @@ -628,6 +627,42 @@ public: }; + +%{ +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; iSetPen(*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 { @@ -840,22 +1065,41 @@ public: //--------------------------------------------------------------------------- -#ifndef __WXMSW__ -class wxPostScriptDC : public wxDC { + +#ifdef __WXMSW__ + +%{ +#include +%} + +class wxMetaFile : public wxObject { public: - wxPostScriptDC(const wxString& output, bool interactive = TRUE, wxWindow* win = NULL); + wxMetaFile(const wxString& filename = wxPyEmptyStr); + ~wxMetaFile(); + + bool Ok(); + bool SetClipboard(int width = 0, int height = 0); + + wxSize GetSize(); + int GetWidth(); + int GetHeight(); + + const wxString& GetFileName() const { return m_filename; } + }; -#endif -//--------------------------------------------------------------------------- +// bool wxMakeMetaFilePlaceable(const wxString& filename, +// int minX, int minY, int maxX, int maxY, float scale=1.0); -#ifdef __WXMSW__ class wxMetaFileDC : public wxDC { public: - wxMetaFileDC(const wxString& filename = wxPyEmptyStr); + wxMetaFileDC(const wxString& filename = wxPyEmptyStr, + int width = 0, int height = 0, + const wxString& description = wxPyEmptyStr); wxMetaFile* Close(); }; + #endif //---------------------------------------------------------------------------