X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b68dc582b8c6dd32ef9f0a4ec91573bd5cc0296a..4649b5eded522cdc6d76aae074f98a2c162fd648:/wxPython/src/gdi.i diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i index 8d6dbfe7a5..f80dd7e1ca 100644 --- a/wxPython/src/gdi.i +++ b/wxPython/src/gdi.i @@ -20,6 +20,10 @@ #ifndef __WXMSW__ #include #endif +#include +#include +#include +#include %} //---------------------------------------------------------------------- @@ -31,34 +35,30 @@ %import _defs.i %import misc.i - %{ static wxString wxPyEmptyStr(""); %} //--------------------------------------------------------------------------- -// class wxGDIImage { -// public: -// long GetHandle(); -// void SetHandle(long handle); -// bool Ok(); -// int GetWidth(); -// int GetHeight(); -// int GetDepth(); -// void SetWidth(int w); -// void SetHeight(int h); -// void SetDepth(int d); -// void SetSize(const wxSize& size); -// }; +class wxGDIObject : public wxObject { +public: + wxGDIObject(); + ~wxGDIObject(); + + bool GetVisible(); + void SetVisible( bool visible ); + + bool IsNull(); + +}; //--------------------------------------------------------------------------- -class wxBitmap -//: public wxGDIImage +class wxBitmap : public wxGDIObject { public: - wxBitmap(const wxString& name, long type); + wxBitmap(const wxString& name, wxBitmapType type); ~wxBitmap(); wxPalette* GetPalette(); @@ -87,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,37 +105,87 @@ public: }; +// Declarations of some alternate "constructors" %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 + + + +%{ // Implementations of some alternate "constructors" -%{ // Alternate 'constructor' wxBitmap* wxEmptyBitmap(int width, int height, int depth=-1) { return new wxBitmap(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"); + static char** ConvertListOfStrings(PyObject* listOfStrings) { + char** cArray = NULL; + int count; + + if (!PyList_Check(listOfStrings)) { + PyErr_SetString(PyExc_TypeError, "Expected a list of strings."); return NULL; } + count = PyList_Size(listOfStrings); + cArray = new char*[count]; - return new wxBitmap((void*)PyString_AsString(data), type, width, height, depth); + for(int x=0; xToString(); + } + } +}; + + +// 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); - return wxTheFontList->FindOrCreateFont(pointSize, family, style, weight, - underline, faceName, encoding); + + // 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; + } } - // NO Destructor. } - 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); + // 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 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); + + wxString GetFamilyString() const; + wxString GetStyleString() const; + wxString GetWeightString() const; + + static wxFontEncoding GetDefaultEncoding(); + static void SetDefaultEncoding(wxFontEncoding encoding); + }; -%inline %{ - wxFontEncoding wxFont_GetDefaultEncoding() { - return wxFont::GetDefaultEncoding(); - } - void wxFont_SetDefaultEncoding(wxFontEncoding encoding) { - wxFont::SetDefaultEncoding(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 { +class wxColour : public wxObject { public: wxColour(unsigned char red=0, unsigned char green=0, unsigned char blue=0); ~wxColour(); @@ -352,22 +581,30 @@ public: %} -//---------------------------------------------------------------------- - -class wxPen { +class wxColourDatabase : public wxObject { public: - // I'll do it this way to use long-lived objects and not have to - // worry about when python may delete the object. + + wxColour *FindColour(const wxString& colour); + wxString FindName(const wxColour& colour) const; + %addmethods { - wxPen(wxColour* colour, int width=1, int style=wxSOLID) { - return wxThePenList->FindOrCreatePen(*colour, width, style); + void Append(const wxString& name, int red, int green, int blue) { + self->Append(name.c_str(), new wxColour(red, green, blue)); } - // NO Destructor. } +}; + + +//---------------------------------------------------------------------- + +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(); @@ -380,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__ @@ -389,22 +626,61 @@ public: #endif }; -//---------------------------------------------------------------------- -class wxBrush { + +%{ +class wxPyPen : public wxPen { public: - // I'll do it this way to use long-lived objects and not have to - // worry about when python may delete the object. - %addmethods { - wxBrush(const wxColour* colour, int style=wxSOLID) { - return wxTheBrushList->FindOrCreateBrush(*colour, style); - } - // NO Destructor. + wxPyPen(wxColour& colour, int width=1, int style=wxSOLID) + : wxPen(colour, width, style) + { m_dash = NULL; } + ~wxPyPen() { + if (m_dash) + delete m_dash; } -// wxBrush(const wxColour& colour, int style=wxSOLID); + void SetDashes(int nb_dashes, const wxDash *dash) { + m_dash = new wxDash[nb_dashes]; + for (int i=0; i