X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9d37f9642887a5602d7c0b59527f213c32dd501a..f63e3ebbe3272b9690aa2530e0c3048d3f37c7c7:/wxPython/src/gdi.i diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i index 41e9a47f33..b598610491 100644 --- a/wxPython/src/gdi.i +++ b/wxPython/src/gdi.i @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: gdi.i -// Purpose: SWIG interface file for wxDC, wxBrush, wxPen, wxFont, etc. +// Purpose: SWIG interface file for wxDC, wxBrush, wxPen, etc. // // Author: Robin Dunn // @@ -15,15 +15,13 @@ %{ #include "helpers.h" -#include #include -#ifndef __WXMSW__ -#include -#endif #include #include #include #include +#include +#include %} //---------------------------------------------------------------------- @@ -34,11 +32,14 @@ // Import some definitions of other classes, etc. %import _defs.i %import misc.i +%import fonts.i + +//--------------------------------------------------------------------------- %{ - static wxString wxPyEmptyStr(""); + // Put some wx default wxChar* values into wxStrings. + static const wxString wxPyEmptyString(wxT("")); %} - //--------------------------------------------------------------------------- class wxGDIObject : public wxObject { @@ -58,13 +59,13 @@ public: class wxBitmap : public wxGDIObject { public: - wxBitmap(const wxString& name, wxBitmapType type); + wxBitmap(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_ANY); ~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_ANY); + bool SaveFile(const wxString& name, wxBitmapType type, wxPalette* palette = NULL); void SetMask(wxMask* mask); #ifdef __WXMSW__ void SetPalette(wxPalette& palette); @@ -206,7 +207,9 @@ public: int desiredWidth = -1, int desiredHeight = -1); ~wxIcon(); +#ifndef __WXMAC__ bool LoadFile(const wxString& name, long flags); +#endif // wxGDIImage methods #ifdef __WXMSW__ @@ -239,6 +242,7 @@ public: // Declarations of some alternate "constructors" %new wxIcon* wxEmptyIcon(); %new wxIcon* wxIconFromXPMData(PyObject* listOfStrings); +%new wxIcon* wxIconFromBitmap(const wxBitmap& bmp); %{ // Implementations of some alternate "constructors" wxIcon* wxEmptyIcon() { @@ -256,10 +260,48 @@ public: delete [] cArray; return icon; } + + wxIcon* wxIconFromBitmap(const wxBitmap& bmp) { + wxIcon* icon = new wxIcon(); + icon->CopyFromBitmap(bmp); + return icon; + } %} //--------------------------------------------------------------------------- +class wxIconBundle +{ +public: + // default constructor + wxIconBundle(); + + // initializes the bundle with the icon(s) found in the file + %name(wxIconBundleFromFile) wxIconBundle( const wxString& file, long type ); + + // initializes the bundle with a single icon + %name(wxIconBundleFromIcon)wxIconBundle( const wxIcon& icon ); + + ~wxIconBundle(); + + // adds the icon to the collection, if the collection already + // contains an icon with the same width and height, it is + // replaced + void AddIcon( const wxIcon& icon ); + + // adds all the icons contained in the file to the collection, + // if the collection already contains icons with the same + // width and height, they are replaced + %name(AddIconFromFile)void AddIcon( const wxString& file, long type ); + + // returns the icon with the given size; if no such icon exists, + // returns the icon with size wxSYS_ICON_[XY]; if no such icon exists, + // returns the first icon in the bundle + const wxIcon& GetIcon( const wxSize& size ) const; +}; + +//--------------------------------------------------------------------------- + class wxCursor : public wxGDIObject { public: @@ -292,260 +334,6 @@ public: } %} -//---------------------------------------------------------------------- - - -enum wxFontFamily -{ - wxFONTFAMILY_DEFAULT = wxDEFAULT, - wxFONTFAMILY_DECORATIVE = wxDECORATIVE, - wxFONTFAMILY_ROMAN = wxROMAN, - wxFONTFAMILY_SCRIPT = wxSCRIPT, - wxFONTFAMILY_SWISS = wxSWISS, - wxFONTFAMILY_MODERN = wxMODERN, - wxFONTFAMILY_TELETYPE = wxTELETYPE, - wxFONTFAMILY_MAX -}; - -// font styles -enum wxFontStyle -{ - wxFONTSTYLE_NORMAL = wxNORMAL, - wxFONTSTYLE_ITALIC = wxITALIC, - wxFONTSTYLE_SLANT = wxSLANT, - wxFONTSTYLE_MAX -}; - -// font weights -enum wxFontWeight -{ - wxFONTWEIGHT_NORMAL = wxNORMAL, - wxFONTWEIGHT_LIGHT = wxLIGHT, - wxFONTWEIGHT_BOLD = wxBOLD, - wxFONTWEIGHT_MAX -}; - - -// font encodings -enum wxFontEncoding -{ - wxFONTENCODING_SYSTEM = -1, // system default - wxFONTENCODING_DEFAULT, // current default encoding - - // ISO8859 standard defines a number of single-byte charsets - wxFONTENCODING_ISO8859_1, // West European (Latin1) - wxFONTENCODING_ISO8859_2, // Central and East European (Latin2) - wxFONTENCODING_ISO8859_3, // Esperanto (Latin3) - wxFONTENCODING_ISO8859_4, // Baltic (old) (Latin4) - wxFONTENCODING_ISO8859_5, // Cyrillic - wxFONTENCODING_ISO8859_6, // Arabic - wxFONTENCODING_ISO8859_7, // Greek - wxFONTENCODING_ISO8859_8, // Hebrew - wxFONTENCODING_ISO8859_9, // Turkish (Latin5) - wxFONTENCODING_ISO8859_10, // Variation of Latin4 (Latin6) - wxFONTENCODING_ISO8859_11, // Thai - wxFONTENCODING_ISO8859_12, // doesn't exist currently, but put it - // here anyhow to make all ISO8859 - // consecutive numbers - wxFONTENCODING_ISO8859_13, // Baltic (Latin7) - wxFONTENCODING_ISO8859_14, // Latin8 - wxFONTENCODING_ISO8859_15, // Latin9 (a.k.a. Latin0, includes euro) - wxFONTENCODING_ISO8859_MAX, - - // Cyrillic charset soup (see http://czyborra.com/charsets/cyrillic.html) - wxFONTENCODING_KOI8, // we don't support any of KOI8 variants - wxFONTENCODING_ALTERNATIVE, // same as MS-DOS CP866 - wxFONTENCODING_BULGARIAN, // used under Linux in Bulgaria - - // what would we do without Microsoft? They have their own encodings - // for DOS - wxFONTENCODING_CP437, // original MS-DOS codepage - wxFONTENCODING_CP850, // CP437 merged with Latin1 - wxFONTENCODING_CP852, // CP437 merged with Latin2 - wxFONTENCODING_CP855, // another cyrillic encoding - wxFONTENCODING_CP866, // and another one - // and for Windows - wxFONTENCODING_CP874, // WinThai - wxFONTENCODING_CP1250, // WinLatin2 - wxFONTENCODING_CP1251, // WinCyrillic - wxFONTENCODING_CP1252, // WinLatin1 - wxFONTENCODING_CP1253, // WinGreek (8859-7) - wxFONTENCODING_CP1254, // WinTurkish - wxFONTENCODING_CP1255, // WinHebrew - wxFONTENCODING_CP1256, // WinArabic - wxFONTENCODING_CP1257, // WinBaltic (same as Latin 7) - wxFONTENCODING_CP12_MAX, - - wxFONTENCODING_UTF7, // UTF-7 Unicode encoding - wxFONTENCODING_UTF8, // UTF-8 Unicode encoding - - wxFONTENCODING_UNICODE, // Unicode - currently used only by - // wxEncodingConverter class - - wxFONTENCODING_MAX -}; - - - -// wxNativeFontInfo is platform-specific font representation: this struct -// should be considered as opaque font description only used by the native -// functions, the user code can only get the objects of this type from -// somewhere and pass it somewhere else (possibly save them somewhere using -// ToString() and restore them using FromString()) -struct wxNativeFontInfo -{ - // it is important to be able to serialize wxNativeFontInfo objects to be - // able to store them (in config file, for example) - bool FromString(const wxString& s); - wxString ToString() const; - - %addmethods { - wxString __str__() { - return self->ToString(); - } - } -}; - - -// wxFontMapper manages user-definable correspondence between logical font -// names and the fonts present on the machine. -// -// The default implementations of all functions will ask the user if they are -// not capable of finding the answer themselves and store the answer in a -// config file (configurable via SetConfigXXX functions). This behaviour may -// be disabled by giving the value of FALSE to "interactive" parameter. -// However, the functions will always consult the config file to allow the -// user-defined values override the default logic and there is no way to -// disable this - which shouldn't be ever needed because if "interactive" was -// never TRUE, the config file is never created anyhow. -class wxFontMapper -{ -public: - wxFontMapper(); - ~wxFontMapper(); - - - // find an alternative for the given encoding (which is supposed to not be - // available on this system). If successful, return TRUE and rwxFontEcoding - // that can be used it wxFont ctor otherwise return FALSE - //bool GetAltForEncoding(wxFontEncoding encoding, - // wxFontEncoding *alt_encoding, - // const wxString& facename = wxEmptyString, - // bool interactive = TRUE); - - - // Find an alternative for the given encoding (which is supposed to not be - // available on this system). If successful, returns the encoding otherwise - // returns None. - %addmethods { - PyObject* GetAltForEncoding(wxFontEncoding encoding, - const wxString& facename = wxEmptyString, - bool interactive = TRUE) { - wxFontEncoding alt_enc; - if (self->GetAltForEncoding(encoding, &alt_enc, facename, interactive)) - return PyInt_FromLong(alt_enc); - else { - Py_INCREF(Py_None); - return Py_None; - } - } - } - - - // checks whether given encoding is available in given face or not. - // If no facename is given, - bool IsEncodingAvailable(wxFontEncoding encoding, - const wxString& facename = wxEmptyString); - - // returns the encoding for the given charset (in the form of RFC 2046) or - // wxFONTENCODING_SYSTEM if couldn't decode it - wxFontEncoding CharsetToEncoding(const wxString& charset, - bool interactive = TRUE); - - // return internal string identifier for the encoding (see also - // GetEncodingDescription()) - static wxString GetEncodingName(wxFontEncoding encoding); - - // return user-readable string describing the given encoding - // - // NB: hard-coded now, but might change later (read it from config?) - static wxString GetEncodingDescription(wxFontEncoding encoding); - - // the parent window for modal dialogs - void SetDialogParent(wxWindow *parent); - - // the title for the dialogs (note that default is quite reasonable) - void SetDialogTitle(const wxString& title); - - // functions which allow to configure the config object used: by default, - // the global one (from wxConfigBase::Get() will be used) and the default - // root path for the config settings is the string returned by - // GetDefaultConfigPath() - - - // set the config object to use (may be NULL to use default) - void SetConfig(wxConfigBase *config); - - // set the root config path to use (should be an absolute path) - void SetConfigPath(const wxString& prefix); - - // return default config path - static const wxChar *GetDefaultConfigPath(); -}; - - - - -class wxFont : public wxGDIObject { -public: - wxFont( int pointSize, int family, int style, int weight, - int underline=FALSE, char* faceName = "", - wxFontEncoding encoding=wxFONTENCODING_DEFAULT); - - %name(wxFontFromNativeInfo)wxFont(const wxNativeFontInfo& info); - - ~wxFont(); - - bool Ok() const; - int GetPointSize() const; - int GetFamily() const; - int GetStyle() const; - int GetWeight() const; - bool GetUnderlined() const; - wxString GetFaceName() const; - wxFontEncoding GetEncoding() const; - wxNativeFontInfo* GetNativeFontInfo() const; - - void SetPointSize(int pointSize); - void SetFamily(int family); - void SetStyle(int style); - void SetWeight(int weight); - void SetFaceName(const wxString& faceName); - void SetUnderlined(bool underlined); - void SetEncoding(wxFontEncoding encoding); - void SetNativeFontInfo(const wxNativeFontInfo& info); - - wxString GetFamilyString() const; - wxString GetStyleString() const; - wxString GetWeightString() const; - - static wxFontEncoding GetDefaultEncoding(); - static void SetDefaultEncoding(wxFontEncoding encoding); - -}; - - -class wxFontList : public wxObject { -public: - - void AddFont(wxFont* font); - wxFont * FindOrCreateFont(int point_size, int family, int style, int weight, - bool underline = FALSE, const char* facename = NULL, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - void RemoveFont(wxFont *font); -}; - - //---------------------------------------------------------------------- class wxColour : public wxObject { @@ -590,6 +378,25 @@ public: %addmethods { void Append(const wxString& name, int red, int green, int blue) { + // first see if the name is already there + wxString cName = name; + cName.MakeUpper(); + wxString cName2 = cName; + if ( !cName2.Replace(wxT("GRAY"), wxT("GREY")) ) + cName2.clear(); + + wxNode *node = self->First(); + while ( node ) { + const wxChar *key = node->GetKeyString(); + if ( cName == key || cName2 == key ) { + wxColour* c = (wxColour *)node->Data(); + c->Set(red, green, blue); + return; + } + node = node->Next(); + } + + // otherwise append the new colour self->Append(name.c_str(), new wxColour(red, green, blue)); } } @@ -628,6 +435,11 @@ public: + +// 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. wxPyPen is aliased to wxPen +// in _extras.py + %{ class wxPyPen : public wxPen { public: @@ -636,13 +448,16 @@ public: { m_dash = NULL; } ~wxPyPen() { if (m_dash) - delete m_dash; + delete [] m_dash; } void SetDashes(int nb_dashes, const wxDash *dash) { + if (m_dash) + delete [] m_dash; m_dash = new wxDash[nb_dashes]; - for (int i=0; iDrawLabel(text, image, rect, alignment, indexAccel, &rv); + return rv; + } + } + void DrawLine(long x1, long y1, long x2, long y2); void DrawLines(int PCOUNT, wxPoint* points, long xoffset=0, long yoffset=0); void DrawPolygon(int PCOUNT, wxPoint* points, long xoffset=0, long yoffset=0, @@ -742,19 +578,19 @@ public: void EndDoc(); void EndDrawing(); void EndPage(); - void FloodFill(long x, long y, const wxColour& colour, int style=wxFLOOD_SURFACE); - wxBrush& GetBackground(); - wxBrush& GetBrush(); + bool FloodFill(long x, long y, const wxColour& colour, int style=wxFLOOD_SURFACE); + wxBrush GetBackground(); + wxBrush GetBrush(); long GetCharHeight(); long GetCharWidth(); void GetClippingBox(long *OUTPUT, long *OUTPUT, long *OUTPUT, long *OUTPUT); - wxFont& GetFont(); + wxFont GetFont(); int GetLogicalFunction(); void GetLogicalScale(double *OUTPUT, double *OUTPUT); int GetMapMode(); bool GetOptimization(); - wxPen& GetPen(); + wxPen GetPen(); %addmethods { %new wxColour* GetPixel(long x, long y) { wxColour* wc = new wxColour(); @@ -829,6 +665,10 @@ public: %addmethods { + // NOTE: These methods are VERY SIMILAR in implentation. It would be + // nice to factor out common 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) { @@ -860,6 +700,8 @@ public: obj = PySequence_GetItem(pyPens, i); } if (SWIG_GetPtrObj(obj, (void **) &pen, "_wxPen_p")) { + if (!isFastPens) + Py_DECREF(obj); goto err1; } @@ -876,7 +718,8 @@ public: obj = PySequence_GetItem(pyPoints, i); } if (! _2int_seq_helper(obj, &x1, &y1)) { - Py_DECREF(obj); + if (!isFastPens) + Py_DECREF(obj); goto err0; } @@ -930,6 +773,8 @@ public: obj = PySequence_GetItem(pyPens, i); } if (SWIG_GetPtrObj(obj, (void **) &pen, "_wxPen_p")) { + if (!isFastPens) + Py_DECREF(obj); goto err1; } @@ -946,7 +791,8 @@ public: obj = PySequence_GetItem(pyLines, i); } if (! _4int_seq_helper(obj, &x1, &y1, &x2, &y2)) { - Py_DECREF(obj); + if (!isFastPens) + Py_DECREF(obj); goto err0; } @@ -1021,6 +867,39 @@ public: %} +//--------------------------------------------------------------------------- + +class wxBufferedDC : public wxMemoryDC { +public: + // Construct a wxBufferedDC using a user supplied buffer. + wxBufferedDC( wxDC *dc, const wxBitmap &buffer ); + + // Construct a wxBufferedDC with an internal buffer of 'area' + // (where area is usually something like the size of the window + // being buffered) + %name(wxBufferedDCInternalBuffer)wxBufferedDC( wxDC *dc, const wxSize &area ); + + // Blits the buffer to the dc, and detaches the dc from + // the buffer. Usually called in the dtor or by the dtor + // of derived classes if the BufferedDC must blit before + // the derived class (which may own the dc it's blitting + // to) is destroyed. + void UnMask(); + + + %pragma(python) addtomethod = + "__init__:self._dc = _args[0] # save a ref so the other dc won't be deleted before self" + %pragma(python) addtomethod = + "wxBufferedDCInternalBuffer:val._dc = _args[0] # save a ref so the other dc won't be deleted before self" +}; + + +class wxBufferedPaintDC : public wxBufferedDC +{ +public: + wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer = wxNullBitmap ); +}; + //--------------------------------------------------------------------------- class wxScreenDC : public wxDC { @@ -1055,91 +934,42 @@ public: //--------------------------------------------------------------------------- -#ifndef __WXMSW__ -class wxPostScriptDC : public wxDC { -public: - wxPostScriptDC(const wxString& output, bool interactive = TRUE, wxWindow* win = NULL); -}; -#endif - -//--------------------------------------------------------------------------- - #ifdef __WXMSW__ -class wxMetaFileDC : public wxDC { -public: - wxMetaFileDC(const wxString& filename = wxPyEmptyStr); - wxMetaFile* Close(); -}; -#endif - -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- - -%readonly %{ -#if 0 +#include %} -extern wxFont *wxNORMAL_FONT; -extern wxFont *wxSMALL_FONT; -extern wxFont *wxITALIC_FONT; -extern wxFont *wxSWISS_FONT; -extern wxPen *wxRED_PEN; -extern wxPen *wxCYAN_PEN; -extern wxPen *wxGREEN_PEN; -extern wxPen *wxBLACK_PEN; -extern wxPen *wxWHITE_PEN; -extern wxPen *wxTRANSPARENT_PEN; -extern wxPen *wxBLACK_DASHED_PEN; -extern wxPen *wxGREY_PEN; -extern wxPen *wxMEDIUM_GREY_PEN; -extern wxPen *wxLIGHT_GREY_PEN; +class wxMetaFile : public wxObject { +public: + wxMetaFile(const wxString& filename = wxPyEmptyString); + ~wxMetaFile(); -extern wxBrush *wxBLUE_BRUSH; -extern wxBrush *wxGREEN_BRUSH; -extern wxBrush *wxWHITE_BRUSH; -extern wxBrush *wxBLACK_BRUSH; -extern wxBrush *wxTRANSPARENT_BRUSH; -extern wxBrush *wxCYAN_BRUSH; -extern wxBrush *wxRED_BRUSH; -extern wxBrush *wxGREY_BRUSH; -extern wxBrush *wxMEDIUM_GREY_BRUSH; -extern wxBrush *wxLIGHT_GREY_BRUSH; + bool Ok(); + bool SetClipboard(int width = 0, int height = 0); -extern wxColour *wxBLACK; -extern wxColour *wxWHITE; -extern wxColour *wxRED; -extern wxColour *wxBLUE; -extern wxColour *wxGREEN; -extern wxColour *wxCYAN; -extern wxColour *wxLIGHT_GREY; + wxSize GetSize(); + int GetWidth(); + int GetHeight(); -extern wxCursor *wxSTANDARD_CURSOR; -extern wxCursor *wxHOURGLASS_CURSOR; -extern wxCursor *wxCROSS_CURSOR; + const wxString& GetFileName() const { return m_filename; } -extern wxBitmap wxNullBitmap; -extern wxIcon wxNullIcon; -extern wxCursor wxNullCursor; -extern wxPen wxNullPen; -extern wxBrush wxNullBrush; -extern wxPalette wxNullPalette; -extern wxFont wxNullFont; -extern wxColour wxNullColour; +}; +// bool wxMakeMetaFilePlaceable(const wxString& filename, +// int minX, int minY, int maxX, int maxY, float scale=1.0); -extern wxFontList* wxTheFontList; -extern wxPenList* wxThePenList; -extern wxBrushList* wxTheBrushList; -extern wxColourDatabase* wxTheColourDatabase; +class wxMetaFileDC : public wxDC { +public: + wxMetaFileDC(const wxString& filename = wxPyEmptyString, + int width = 0, int height = 0, + const wxString& description = wxPyEmptyString); + wxMetaFile* Close(); +}; -%readwrite -%{ #endif -%} //--------------------------------------------------------------------------- @@ -1205,6 +1035,10 @@ public: ~wxRegion(); void Clear(); +#ifndef __WXMAC__ + bool Offset(wxCoord x, wxCoord y); +#endif + wxRegionContain Contains(long x, long y); %name(ContainsPoint)wxRegionContain Contains(const wxPoint& pt); %name(ContainsRect)wxRegionContain Contains(const wxRect& rect); @@ -1258,3 +1092,72 @@ public: //--------------------------------------------------------------------------- +%readonly +%{ +#if 0 +%} + +extern wxFont *wxNORMAL_FONT; +extern wxFont *wxSMALL_FONT; +extern wxFont *wxITALIC_FONT; +extern wxFont *wxSWISS_FONT; + +extern wxPen *wxRED_PEN; +extern wxPen *wxCYAN_PEN; +extern wxPen *wxGREEN_PEN; +extern wxPen *wxBLACK_PEN; +extern wxPen *wxWHITE_PEN; +extern wxPen *wxTRANSPARENT_PEN; +extern wxPen *wxBLACK_DASHED_PEN; +extern wxPen *wxGREY_PEN; +extern wxPen *wxMEDIUM_GREY_PEN; +extern wxPen *wxLIGHT_GREY_PEN; + +extern wxBrush *wxBLUE_BRUSH; +extern wxBrush *wxGREEN_BRUSH; +extern wxBrush *wxWHITE_BRUSH; +extern wxBrush *wxBLACK_BRUSH; +extern wxBrush *wxTRANSPARENT_BRUSH; +extern wxBrush *wxCYAN_BRUSH; +extern wxBrush *wxRED_BRUSH; +extern wxBrush *wxGREY_BRUSH; +extern wxBrush *wxMEDIUM_GREY_BRUSH; +extern wxBrush *wxLIGHT_GREY_BRUSH; + +extern wxColour *wxBLACK; +extern wxColour *wxWHITE; +extern wxColour *wxRED; +extern wxColour *wxBLUE; +extern wxColour *wxGREEN; +extern wxColour *wxCYAN; +extern wxColour *wxLIGHT_GREY; + +extern wxCursor *wxSTANDARD_CURSOR; +extern wxCursor *wxHOURGLASS_CURSOR; +extern wxCursor *wxCROSS_CURSOR; + + +extern wxBitmap wxNullBitmap; +extern wxIcon wxNullIcon; +extern wxCursor wxNullCursor; +extern wxPen wxNullPen; +extern wxBrush wxNullBrush; +extern wxPalette wxNullPalette; +extern wxFont wxNullFont; +extern wxColour wxNullColour; + + +extern wxFontList* wxTheFontList; +extern wxPenList* wxThePenList; +extern wxBrushList* wxTheBrushList; +extern wxColourDatabase* wxTheColourDatabase; + + +%readwrite +%{ +#endif +%} + +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +