]> git.saurik.com Git - wxWidgets.git/blame - wxPython/src/_bitmap.i
some test code
[wxWidgets.git] / wxPython / src / _bitmap.i
CommitLineData
d14a1e28
RD
1/////////////////////////////////////////////////////////////////////////////
2// Name: _bitmap.i
3// Purpose: SWIG interface for wxBitmap and wxMask
4//
5// Author: Robin Dunn
6//
7// Created: 7-July-1997
8// RCS-ID: $Id$
9// Copyright: (c) 2003 by Total Control Software
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
13// Not a %module
14
15
16//---------------------------------------------------------------------------
17
18%{
19#include <wx/image.h>
20
21 static char** ConvertListOfStrings(PyObject* listOfStrings) {
22 char** cArray = NULL;
23 int count;
24
25 if (!PyList_Check(listOfStrings)) {
26 PyErr_SetString(PyExc_TypeError, "Expected a list of strings.");
27 return NULL;
28 }
29 count = PyList_Size(listOfStrings);
30 cArray = new char*[count];
31
32 for(int x=0; x<count; x++) {
33 // TODO: Need some validation and error checking here
34 cArray[x] = PyString_AsString(PyList_GET_ITEM(listOfStrings, x));
35 }
36 return cArray;
37 }
38
39%}
40
41//---------------------------------------------------------------------------
42
43// TODO: When the API stabalizes and is available on other platforms, add
44// wrappers for the new wxBitmap, wxRawBitmap, wxDIB stuff...
45
dce2bd22
RD
46DocStr(wxBitmap,
47"The wx.Bitmap class encapsulates the concept of a platform-dependent
48bitmap. It can be either monochrome or colour, and either loaded from
49a file or created dynamically. A bitmap can be selected into a memory
50device context (instance of `wx.MemoryDC`). This enables the bitmap to
51be copied to a window or memory device context using `wx.DC.Blit`, or
d07d2bc9 52to be used as a drawing surface.", "
dce2bd22
RD
53
54The BMP and XMP image file formats are supported on all platforms by
55wx.Bitmap. Other formats are automatically loaded by `wx.Image` and
56converted to a wx.Bitmap, so any image file format supported by
57`wx.Image` can be used.
58
59:todo: Add wrappers and support for raw bitmap data access. Can this
60 be be put into Python without losing the speed benefits of the
61 teplates and iterators in rawbmp.h?
62
63:todo: Find a way to do very efficient PIL Image <--> wx.Bitmap
64 converstions.
65");
66
d14a1e28 67
ab1f7d2a
RD
68MustHaveApp(wxBitmap);
69
d14a1e28
RD
70class wxBitmap : public wxGDIObject
71{
72public:
1e0c8722
RD
73 DocCtorStr(
74 wxBitmap(const wxString& name, wxBitmapType type=wxBITMAP_TYPE_ANY),
d07d2bc9
RD
75 "Loads a bitmap from a file.",
76 "
77 :param name: Name of the file to load the bitmap from.
78 :param type: The type of image to expect. Can be one of the following
79 constants (assuming that the neccessary `wx.Image` handlers are
80 loaded):
dce2bd22
RD
81
82 * wx.BITMAP_TYPE_ANY
83 * wx.BITMAP_TYPE_BMP
84 * wx.BITMAP_TYPE_ICO
85 * wx.BITMAP_TYPE_CUR
86 * wx.BITMAP_TYPE_XBM
87 * wx.BITMAP_TYPE_XPM
88 * wx.BITMAP_TYPE_TIF
89 * wx.BITMAP_TYPE_GIF
90 * wx.BITMAP_TYPE_PNG
91 * wx.BITMAP_TYPE_JPEG
92 * wx.BITMAP_TYPE_PNM
93 * wx.BITMAP_TYPE_PCX
94 * wx.BITMAP_TYPE_PICT
95 * wx.BITMAP_TYPE_ICON
96 * wx.BITMAP_TYPE_ANI
97 * wx.BITMAP_TYPE_IFF
98
99:see: Alternate constructors `wx.EmptyBitmap`, `wx.BitmapFromIcon`,
100 `wx.BitmapFromImage`, `wx.BitmapFromXPMData`,
101 `wx.BitmapFromBits`
102");
1e0c8722 103
d14a1e28
RD
104 ~wxBitmap();
105
dce2bd22
RD
106 DocCtorStrName(
107 wxBitmap(int width, int height, int depth=-1),
108 "Creates a new bitmap of the given size. A depth of -1 indicates the
109depth of the current screen or visual. Some platforms only support 1
9c383901 110for monochrome and -1 for the current display depth.", "",
dce2bd22 111 EmptyBitmap);
1e0c8722
RD
112
113 DocCtorStrName(
114 wxBitmap(const wxIcon& icon),
d07d2bc9 115 "Create a new bitmap from a `wx.Icon` object.", "",
1e0c8722
RD
116 BitmapFromIcon);
117
118 DocCtorStrName(
119 wxBitmap(const wxImage& image, int depth=-1),
dce2bd22
RD
120 "Creates bitmap object from a `wx.Image`. This has to be done to
121actually display a `wx.Image` as you cannot draw an image directly on
122a window. The resulting bitmap will use the provided colour depth (or
123that of the current screen colour depth if depth is -1) which entails
d07d2bc9 124that a colour reduction may have to take place.", "",
1e0c8722
RD
125 BitmapFromImage);
126
127
d14a1e28 128 %extend {
1e0c8722 129 DocStr(wxBitmap(PyObject* listOfStrings),
d07d2bc9 130 "Construct a Bitmap from a list of strings formatted as XPM data.", "");
1b8c7ba6
RD
131
132 %RenameCtor(BitmapFromXPMData, wxBitmap(PyObject* listOfStrings))
133 {
d14a1e28
RD
134 char** cArray = NULL;
135 wxBitmap* bmp;
136
137 cArray = ConvertListOfStrings(listOfStrings);
138 if (! cArray)
139 return NULL;
140 bmp = new wxBitmap(cArray);
141 delete [] cArray;
142 return bmp;
143 }
144
1e0c8722 145 DocStr(wxBitmap(PyObject* bits, int width, int height, int depth=1 ),
dce2bd22
RD
146 "Creates a bitmap from an array of bits. You should only use this
147function for monochrome bitmaps (depth 1) in portable programs: in
148this case the bits parameter should contain an XBM image. For other
d07d2bc9 149bit depths, the behaviour is platform dependent.", "");
1b8c7ba6
RD
150
151 %RenameCtor(BitmapFromBits, wxBitmap(PyObject* bits, int width, int height, int depth=1 ))
152 {
a608c09d
RD
153 char* buf;
154 Py_ssize_t length;
d14a1e28
RD
155 PyString_AsStringAndSize(bits, &buf, &length);
156 return new wxBitmap(buf, width, height, depth);
157 }
158 }
159
160
d14a1e28
RD
161 // wxGDIImage methods
162#ifdef __WXMSW__
163 long GetHandle();
a0c956e8
RD
164 %extend {
165 void SetHandle(long handle) { self->SetHandle((WXHANDLE)handle); }
166 }
d14a1e28
RD
167#endif
168
169 bool Ok();
170
dce2bd22
RD
171 DocDeclStr(
172 int , GetWidth(),
d07d2bc9 173 "Gets the width of the bitmap in pixels.", "");
dce2bd22 174
1e0c8722 175
dce2bd22
RD
176 DocDeclStr(
177 int , GetHeight(),
d07d2bc9 178 "Gets the height of the bitmap in pixels.", "");
dce2bd22 179
1e0c8722 180
dce2bd22
RD
181 DocDeclStr(
182 int , GetDepth(),
183 "Gets the colour depth of the bitmap. A value of 1 indicates a
d07d2bc9 184monochrome bitmap.", "");
dce2bd22 185
d14a1e28 186
ba938c3d
RD
187
188 %extend {
d07d2bc9 189 DocStr(GetSize, "Get the size of the bitmap.", "");
ba938c3d
RD
190 wxSize GetSize() {
191 wxSize size(self->GetWidth(), self->GetHeight());
192 return size;
193 }
194 }
195
196
dce2bd22
RD
197 DocDeclStr(
198 virtual wxImage , ConvertToImage() const,
199 "Creates a platform-independent image from a platform-dependent
200bitmap. This preserves mask information so that bitmaps and images can
d07d2bc9 201be converted back and forth without loss in that respect.", "");
dce2bd22
RD
202
203
c5633576 204
dce2bd22
RD
205 DocDeclStr(
206 virtual wxMask* , GetMask() const,
207 "Gets the associated mask (if any) which may have been loaded from a
208file or explpicitly set for the bitmap.
209
210:see: `SetMask`, `wx.Mask`
d07d2bc9 211", "");
c1acc129
RD
212
213 // MSW only? wxBitmap GetMaskBitmap() const;
dce2bd22 214
c5633576 215 %disownarg(wxMask*);
dce2bd22
RD
216 DocDeclStr(
217 virtual void , SetMask(wxMask* mask),
218 "Sets the mask for this bitmap.
219
220:see: `GetMask`, `wx.Mask`
d07d2bc9 221", "");
c5633576 222 %cleardisown(wxMask*);
1e0c8722 223
d14a1e28 224 %extend {
1e0c8722 225 DocStr(SetMaskColour,
d07d2bc9 226 "Create a Mask based on a specified colour in the Bitmap.", "");
d14a1e28
RD
227 void SetMaskColour(const wxColour& colour) {
228 wxMask *mask = new wxMask(*self, colour);
229 self->SetMask(mask);
230 }
231 }
d14a1e28 232
d14a1e28 233
dce2bd22
RD
234 DocDeclStr(
235 virtual wxBitmap , GetSubBitmap(const wxRect& rect) const,
236 "Returns a sub-bitmap of the current one as long as the rect belongs
237entirely to the bitmap. This function preserves bit depth and mask
d07d2bc9 238information.", "");
dce2bd22
RD
239
240
241 DocDeclStr(
242 virtual bool , SaveFile(const wxString &name, wxBitmapType type,
243 wxPalette *palette = NULL),
244 "Saves a bitmap in the named file. See `__init__` for a description of
d07d2bc9 245the ``type`` parameter.", "");
dce2bd22 246
1e0c8722 247
dce2bd22
RD
248 DocDeclStr(
249 virtual bool , LoadFile(const wxString &name, wxBitmapType type),
250 "Loads a bitmap from a file. See `__init__` for a description of the
d07d2bc9 251``type`` parameter.", "");
dce2bd22 252
d14a1e28
RD
253
254
d14a1e28 255 virtual wxPalette *GetPalette() const;
7aada1e0 256#ifdef __WXMSW__
d14a1e28
RD
257 virtual void SetPalette(const wxPalette& palette);
258#endif
259
d14a1e28 260
1e0c8722
RD
261 virtual bool CopyFromIcon(const wxIcon& icon);
262
dce2bd22
RD
263 DocDeclStr(
264 virtual void , SetHeight(int height),
d07d2bc9 265 "Set the height property (does not affect the existing bitmap data).", "");
dce2bd22
RD
266
267
268 DocDeclStr(
269 virtual void , SetWidth(int width),
d07d2bc9 270 "Set the width property (does not affect the existing bitmap data).", "");
1e0c8722 271
1e0c8722 272
dce2bd22
RD
273 DocDeclStr(
274 virtual void , SetDepth(int depth),
d07d2bc9 275 "Set the depth property (does not affect the existing bitmap data).", "");
dce2bd22 276
d14a1e28 277
ba938c3d 278 %extend {
d07d2bc9 279 DocStr(SetSize, "Set the bitmap size (does not affect the existing bitmap data).", "");
ba938c3d
RD
280 void SetSize(const wxSize& size) {
281 self->SetWidth(size.x);
282 self->SetHeight(size.y);
283 }
284 }
1e0c8722 285
d14a1e28
RD
286#ifdef __WXMSW__
287 bool CopyFromCursor(const wxCursor& cursor);
02b800ce 288
2f91e3df
KO
289// WXWIN_COMPATIBILITY_2_4
290 #if 0
d14a1e28
RD
291 int GetQuality();
292 void SetQuality(int q);
02b800ce
RD
293 %pythoncode { GetQuality = wx._deprecated(GetQuality) }
294 %pythoncode { SetQuality = wx._deprecated(SetQuality) }
2f91e3df 295 #endif
d14a1e28
RD
296#endif
297
298 %pythoncode { def __nonzero__(self): return self.Ok() }
b403cd65
RD
299
300 %extend {
a72f4631
RD
301 bool __eq__(const wxBitmap* other) { return other ? (*self == *other) : false; }
302 bool __ne__(const wxBitmap* other) { return other ? (*self != *other) : true; }
b403cd65 303 }
d14a1e28
RD
304};
305
306
307//---------------------------------------------------------------------------
308
1e0c8722 309DocStr(wxMask,
dce2bd22
RD
310"This class encapsulates a monochrome mask bitmap, where the masked
311area is black and the unmasked area is white. When associated with a
312bitmap and drawn in a device context, the unmasked area of the bitmap
313will be drawn, and the masked area will not be drawn.
314
315A mask may be associated with a `wx.Bitmap`. It is used in
316`wx.DC.DrawBitmap` or `wx.DC.Blit` when the source device context is a
317`wx.MemoryDC` with a `wx.Bitmap` selected into it that contains a
d07d2bc9 318mask.", "");
1e0c8722 319
ab1f7d2a
RD
320MustHaveApp(wxMask);
321
d14a1e28
RD
322class wxMask : public wxObject {
323public:
1e0c8722 324
0482c494 325 DocStr(wxMask,
dce2bd22
RD
326 "Constructs a mask from a `wx.Bitmap` and a `wx.Colour` in that bitmap
327that indicates the transparent portions of the mask. In other words,
328the pixels in ``bitmap`` that match ``colour`` will be the transparent
329portions of the mask. If no ``colour`` or an invalid ``colour`` is
330passed then BLACK is used.
331
d07d2bc9 332:see: `wx.Bitmap`, `wx.Colour`", "");
0482c494
RD
333
334 %extend {
335 wxMask(const wxBitmap& bitmap, const wxColour& colour = wxNullColour) {
336 if ( !colour.Ok() )
337 return new wxMask(bitmap, *wxBLACK);
338 else
339 return new wxMask(bitmap, colour);
340 }
341 }
d14a1e28 342
c5633576 343 ~wxMask();
d14a1e28
RD
344};
345
dce2bd22 346%pythoncode { MaskColour = wx._deprecated(Mask, "wx.MaskColour is deprecated, use `wx.Mask` instead.") }
0482c494 347
d14a1e28
RD
348//---------------------------------------------------------------------------
349//---------------------------------------------------------------------------