///////////////////////////////////////////////////////////////////////////// // Name: _bitmap.i // Purpose: SWIG interface for wxBitmap and wxMask // // Author: Robin Dunn // // Created: 7-July-1997 // RCS-ID: $Id$ // Copyright: (c) 2003 by Total Control Software // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// // Not a %module //--------------------------------------------------------------------------- %{ #include <wx/image.h> 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]; for(int x=0; x<count; x++) { // TODO: Need some validation and error checking here cArray[x] = PyString_AsString(PyList_GET_ITEM(listOfStrings, x)); } return cArray; } %} //--------------------------------------------------------------------------- // TODO: When the API stabalizes and is available on other platforms, add // wrappers for the new wxBitmap, wxRawBitmap, wxDIB stuff... class wxBitmap : public wxGDIObject { public: DocCtorStr( wxBitmap(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_ANY), "Loads a bitmap from a file."); ~wxBitmap(); DocCtorStrName( wxBitmap(int width, int height, int depth=-1), "Creates a new bitmap of the given size. A depth of -1 indicates the depth of\n" "the current screen or visual. Some platforms only support 1 for monochrome and\n" "-1 for the current colour setting.", EmptyBitmap); DocCtorStrName( wxBitmap(const wxIcon& icon), "Create a new bitmap from an Icon object.", BitmapFromIcon); DocCtorStrName( wxBitmap(const wxImage& image, int depth=-1), "Creates bitmap object from the image. This has to be done to actually display\n" "an image as you cannot draw an image directly on a window. The resulting\n" "bitmap will use the provided colour depth (or that of the current system if\n" "depth is -1) which entails that a colour reduction has to take place.", BitmapFromImage); %extend { DocStr(wxBitmap(PyObject* listOfStrings), "Construct a Bitmap from a list of strings formatted as XPM data."); %name(BitmapFromXPMData) wxBitmap(PyObject* listOfStrings) { char** cArray = NULL; wxBitmap* bmp; cArray = ConvertListOfStrings(listOfStrings); if (! cArray) return NULL; bmp = new wxBitmap(cArray); delete [] cArray; return bmp; } DocStr(wxBitmap(PyObject* bits, int width, int height, int depth=1 ), "Creates a bitmap from an array of bits. You should only use this function for\n" "monochrome bitmaps (depth 1) in portable programs: in this case the bits\n" "parameter should contain an XBM image. For other bit depths, the behaviour is\n" "platform dependent."); %name(BitmapFromBits) wxBitmap(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); } } #ifdef __WXMSW__ void SetPalette(wxPalette& palette); #endif // wxGDIImage methods #ifdef __WXMSW__ long GetHandle(); %extend { void SetHandle(long handle) { self->SetHandle((WXHANDLE)handle); } } #endif bool Ok(); DocStr(GetWidth, "Gets the width of the bitmap in pixels."); int GetWidth(); DocStr(GetHeight, "Gets the height of the bitmap in pixels."); int GetHeight(); DocStr(GetDepth, "Gets the colour depth of the bitmap. A value of 1 indicates a\n" "monochrome bitmap."); int GetDepth(); DocStr(ConvertToImage, "Creates a platform-independent image from a platform-dependent bitmap. This\n" "preserves mask information so that bitmaps and images can be converted back\n" "and forth without loss in that respect."); virtual wxImage ConvertToImage() const; DocStr(GetMask, "Gets the associated mask (if any) which may have been loaded from a file\n" "or explpicitly set for the bitmap."); virtual wxMask* GetMask() const; DocStr(SetMask, "Sets the mask for this bitmap."); virtual void SetMask(wxMask* mask); %extend { DocStr(SetMaskColour, "Create a Mask based on a specified colour in the Bitmap."); void SetMaskColour(const wxColour& colour) { wxMask *mask = new wxMask(*self, colour); self->SetMask(mask); } } DocStr(GetSubBitmap, "Returns a sub bitmap of the current one as long as the rect belongs entirely\n" "to the bitmap. This function preserves bit depth and mask information."); virtual wxBitmap GetSubBitmap(const wxRect& rect) const; DocStr(SaveFile, "Saves a bitmap in the named file."); virtual bool SaveFile(const wxString &name, wxBitmapType type, wxPalette *palette = (wxPalette *)NULL); DocStr(LoadFile, "Loads a bitmap from a file"); virtual bool LoadFile(const wxString &name, wxBitmapType type); #if wxUSE_PALETTE virtual wxPalette *GetPalette() const; virtual void SetPalette(const wxPalette& palette); #endif virtual bool CopyFromIcon(const wxIcon& icon); DocStr(SetHeight, "Set the height property (does not affect the bitmap data).") virtual void SetHeight(int height); DocStr(SetWidth, "Set the width property (does not affect the bitmap data).") virtual void SetWidth(int width); DocStr(SetDepth, "Set the depth property (does not affect the bitmap data).") virtual void SetDepth(int depth); #ifdef __WXMSW__ bool CopyFromCursor(const wxCursor& cursor); int GetQuality(); void SetQuality(int q); #endif %pythoncode { def __nonzero__(self): return self.Ok() } %extend { bool __eq__(const wxBitmap* other) { return other ? (*self == *other) : False; } bool __ne__(const wxBitmap* other) { return other ? (*self != *other) : True; } } }; //--------------------------------------------------------------------------- DocStr(wxMask, "This class encapsulates a monochrome mask bitmap, where the masked area is\n" "black and the unmasked area is white. When associated with a bitmap and drawn\n" "in a device context, the unmasked area of the bitmap will be drawn, and the\n" "masked area will not be drawn."); class wxMask : public wxObject { public: #if 0 DocCtorStr( wxMask(const wxBitmap& bitmap), "Constructs a mask from a monochrome bitmap."); #endif DocStr(wxMask, "Constructs a mask from a bitmap and a colour in that bitmap that indicates\n" "the transparent portions of the mask, by default BLACK is used."); %extend { wxMask(const wxBitmap& bitmap, const wxColour& colour = wxNullColour) { if ( !colour.Ok() ) return new wxMask(bitmap, *wxBLACK); else return new wxMask(bitmap, colour); } } //~wxMask(); }; %pythoncode { MaskColour = Mask } //--------------------------------------------------------------------------- //---------------------------------------------------------------------------