X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9416aa89ca06d0fb20b1002e026d2c7ac7aa6a17..4649b5eded522cdc6d76aae074f98a2c162fd648:/wxPython/src/gdi.i?ds=sidebyside diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i index 159bea062e..f80dd7e1ca 100644 --- a/wxPython/src/gdi.i +++ b/wxPython/src/gdi.i @@ -20,6 +20,10 @@ #ifndef __WXMSW__ #include #endif +#include +#include +#include +#include %} //---------------------------------------------------------------------- @@ -83,8 +87,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); @@ -105,11 +109,12 @@ 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 ); -#ifdef __WXMSW__ -%new wxBitmap* wxBitmapFromData(PyObject* data, long type, - int width, int height, int depth = 1); -#endif +// #ifdef __WXMSW__ +// %new wxBitmap* wxBitmapFromData(PyObject* data, long type, +// int width, int height, int depth = 1); +// #endif @@ -137,6 +142,7 @@ public: return cArray; } + wxBitmap* wxBitmapFromXPMData(PyObject* listOfStrings) { char** cArray = NULL; wxBitmap* bmp; @@ -155,18 +161,21 @@ public: } + wxBitmap* wxBitmapFromBits(char* bits, int width, int height, int depth = 1 ) { + return new wxBitmap(bits, width, height, depth); + } -#ifdef __WXMSW__ - wxBitmap* wxBitmapFromData(PyObject* data, long type, - int width, int height, int depth = 1) { - if (! PyString_Check(data)) { - PyErr_SetString(PyExc_TypeError, "Expected string object"); - return NULL; - } - return new wxBitmap((void*)PyString_AsString(data), type, width, height, depth); - } -#endif +// #ifdef __WXMSW__ +// wxBitmap* wxBitmapFromData(PyObject* data, long type, +// int width, int height, int depth = 1) { +// if (! PyString_Check(data)) { +// PyErr_SetString(PyExc_TypeError, "Expected string object"); +// return NULL; +// } +// return new wxBitmap((void*)PyString_AsString(data), type, width, height, depth); +// } +// #endif %} //--------------------------------------------------------------------------- @@ -286,6 +295,38 @@ 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 @@ -295,7 +336,7 @@ enum wxFontEncoding wxFONTENCODING_ISO8859_1, // West European (Latin1) wxFONTENCODING_ISO8859_2, // Central and East European (Latin2) wxFONTENCODING_ISO8859_3, // Esperanto (Latin3) - wxFONTENCODING_ISO8859_4, // Baltic languages (Estonian) (Latin4) + wxFONTENCODING_ISO8859_4, // Baltic (old) (Latin4) wxFONTENCODING_ISO8859_5, // Cyrillic wxFONTENCODING_ISO8859_6, // Arabic wxFONTENCODING_ISO8859_7, // Greek @@ -306,9 +347,10 @@ enum wxFontEncoding wxFONTENCODING_ISO8859_12, // doesn't exist currently, but put it // here anyhow to make all ISO8859 // consecutive numbers - wxFONTENCODING_ISO8859_13, // Latin7 + 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 @@ -323,53 +365,174 @@ enum wxFontEncoding 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(); - wxString GetFaceName(); - int GetFamily(); -#ifdef __WXMSW__ - int GetFontId(); -#endif - int GetPointSize(); - int GetStyle(); - bool GetUnderlined(); - int GetWeight(); - wxFontEncoding GetEncoding(); - void SetFaceName(const wxString& faceName); - void SetFamily(int family); + 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 SetUnderlined(bool underlined); void SetWeight(int weight); + void SetFaceName(const wxString& faceName); + void SetUnderlined(bool underlined); void SetEncoding(wxFontEncoding encoding); - wxString GetFamilyString(); - wxString GetStyleString(); - wxString GetWeightString(); -}; + void SetNativeFontInfo(const wxNativeFontInfo& info); -%inline %{ - wxFontEncoding wxFont_GetDefaultEncoding() { - return wxFont::GetDefaultEncoding(); - } + wxString GetFamilyString() const; + wxString GetStyleString() const; + wxString GetWeightString() const; - void wxFont_SetDefaultEncoding(wxFontEncoding encoding) { - wxFont::SetDefaultEncoding(encoding); - } -%} + static wxFontEncoding GetDefaultEncoding(); + static void SetDefaultEncoding(wxFontEncoding encoding); + +}; class wxFontList : public wxObject { @@ -435,14 +598,13 @@ public: //---------------------------------------------------------------------- - class wxPen : public wxGDIObject { public: wxPen(wxColour& colour, int width=1, int style=wxSOLID); ~wxPen(); int GetCap(); - wxColour& GetColour(); + wxColour GetColour(); int GetJoin(); int GetStyle(); @@ -455,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__ @@ -465,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; i