X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/68320e40cde2ceaac4645db9ae2989e3101fde45..e422162882bf4c5ae743fd618864e97206765fca:/wxPython/src/gdi.i diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i index 079792271a..a47f4a3362 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 // @@ -20,6 +20,8 @@ #include #include #include +#include +#include %} //---------------------------------------------------------------------- @@ -30,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 { @@ -54,12 +59,12 @@ public: class wxBitmap : public wxGDIObject { public: - wxBitmap(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_BMP); + wxBitmap(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_ANY); ~wxBitmap(); wxPalette* GetPalette(); wxMask* GetMask(); - bool LoadFile(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_BMP); + 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__ @@ -105,7 +110,7 @@ public: %new wxBitmap* wxEmptyBitmap(int width, int height, int depth=-1); %new wxBitmap* wxBitmapFromXPMData(PyObject* listOfStrings); %new wxBitmap* wxBitmapFromIcon(const wxIcon& icon); -%new wxBitmap* wxBitmapFromBits(char* bits, int width, int height, int depth = 1 ); +%new wxBitmap* wxBitmapFromBits(PyObject* bits, int width, int height, int depth = 1 ); // #ifdef __WXMSW__ // %new wxBitmap* wxBitmapFromData(PyObject* data, long type, @@ -157,8 +162,11 @@ public: } - wxBitmap* wxBitmapFromBits(char* bits, int width, int height, int depth = 1 ) { - return new wxBitmap(bits, width, height, depth); + wxBitmap* wxBitmapFromBits(PyObject* bits, int width, int height, int depth = 1 ) { + char* buf; + int length; + PyString_AsStringAndSize(bits, &buf, &length); + return new wxBitmap(buf, width, height, depth); } @@ -237,6 +245,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() { @@ -254,10 +263,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: @@ -290,311 +337,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_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 - 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 -{ -#ifdef __WXGTK__ - // init the elements from an XLFD, return TRUE if ok - bool FromXFontName(const wxString& xFontName); - - // generate an XLFD using the fontElements - wxString GetXFontName() const; -#endif - - wxNativeFontInfo() { Init(); } - - // reset to the default state - void Init(); - -#ifndef __WXGTK__ - // accessors and modifiers for the font elements - int GetPointSize() const; - wxFontStyle GetStyle() const; - wxFontWeight GetWeight() const; - bool GetUnderlined() const; - wxString GetFaceName() const; - wxFontFamily GetFamily() const; - wxFontEncoding GetEncoding() const; - - void SetPointSize(int pointsize); - void SetStyle(wxFontStyle style); - void SetWeight(wxFontWeight weight); - void SetUnderlined(bool underlined); - void SetFaceName(wxString facename); - void SetFamily(wxFontFamily family); - void SetEncoding(wxFontEncoding encoding); -#endif - - // 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(); - } - } - - // we also want to present the native font descriptions to the user in some - // human-readable form (it is not platform independent neither, but can - // hopefully be understood by the user) - bool FromUserString(const wxString& s); - wxString ToUserString() const; -}; - - -// 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; - - bool IsFixedWidth(); - - wxNativeFontInfo* GetNativeFontInfo() const; - wxString GetNativeFontInfoDesc() const; - wxString GetNativeFontInfoUserDesc() 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); - // void SetNativeFontInfo(const wxString& info); - void SetNativeFontInfoUserDesc(const wxString& 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); - - int GetCount(); -}; - - //---------------------------------------------------------------------- class wxColour : public wxObject { @@ -639,6 +381,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)); } } @@ -665,9 +426,21 @@ public: void SetStyle(int style); void SetWidth(int width); - // **** This one needs to return a list of ints (wxDash) - //int GetDashes(wxDash **dashes); + void SetDashes(int LCOUNT, wxDash* choices); + //int GetDashes(wxDash **dashes); + %addmethods { + PyObject* GetDashes() { + wxDash* dashes; + int count = self->GetDashes(&dashes); + wxPyBeginBlockThreads(); + PyObject* retval = PyList_New(0); + for (int x=0; xDrawLabel(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, @@ -803,7 +593,7 @@ public: void EndDoc(); void EndDrawing(); void EndPage(); - void FloodFill(long x, long y, const wxColour& colour, int style=wxFLOOD_SURFACE); + bool FloodFill(long x, long y, const wxColour& colour, int style=wxFLOOD_SURFACE); wxBrush GetBackground(); wxBrush GetBrush(); long GetCharHeight(); @@ -1092,6 +882,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 { @@ -1135,7 +958,7 @@ public: class wxMetaFile : public wxObject { public: - wxMetaFile(const wxString& filename = wxPyEmptyStr); + wxMetaFile(const wxString& filename = wxPyEmptyString); ~wxMetaFile(); bool Ok(); @@ -1155,9 +978,9 @@ public: class wxMetaFileDC : public wxDC { public: - wxMetaFileDC(const wxString& filename = wxPyEmptyStr, + wxMetaFileDC(const wxString& filename = wxPyEmptyString, int width = 0, int height = 0, - const wxString& description = wxPyEmptyStr); + const wxString& description = wxPyEmptyString); wxMetaFile* Close(); }; @@ -1227,6 +1050,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);