Newer
Older
/***********************************************************************
* FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
* Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* For further information please contact the author by e-mail
* at "lyle@lylejohnson.name".
***********************************************************************/
// Image rendering hints
enum {
BITMAP_KEEP = 0x00000001, // Keep pixel data in client
BITMAP_OWNED = 0x00000002, // Pixel data is owned by image
BITMAP_SHMI = 0x00000020, // Using shared memory image
BITMAP_SHMP = 0x00000040 // Using shared memory pixmap
};
/**
* A Bitmap is a rectangular array of pixels. It supports two representations
* of these pixels: a client-side pixel buffer, and a server-side pixmap which
* is stored in an organization directly compatible with the screen, for fast
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
* drawing onto the device.
* The server-side representation is not directly accessible from the current
* process as it lives in the process of the X Server or GDI.
* The client-side pixel array is of size height x (width+7)/8 bytes, in other
* words 8 pixels packed into a single byte, starting at bit 0 on the left.
*/
class FXBitmap : public FXDrawable {
protected:
FXuchar *data; // Pixel data
FXint bytewidth; // Number of bytes across
FXuint options; // Options
protected:
FXBitmap();
public:
%extend {
/**
* Create a bitmap. If a client-side pixel buffer has been specified,
* the bitmap does not own the pixel buffer unless the BITMAP_OWNED flag is
* set. If the BITMAP_OWNED flag is set but a NULL pixel buffer is
* passed, a pixel buffer will be automatically created and will be owned
* by the bitmap. The flags BITMAP_SHMI and BITMAP_SHMP may be specified for
* large bitmaps to instruct render() to use shared memory to communicate
* with the server.
*/
FXBitmap(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1){
return new FXRbBitmap(a,pix,opts,w,h);
}
}
/// To get to the pixel data
FXuchar* getData() const;
/// To get to the option flags
FXuint getOptions() const;
/// Change options
void setOptions(FXuint opts);
/// Get pixel at x,y
FXbool getPixel(FXint x,FXint y) const;
/// Change pixel at x,y
void setPixel(FXint x,FXint y,FXbool color);
/// Cleanup
virtual ~FXBitmap();
};
DECLARE_FXOBJECT_VIRTUALS(FXBitmap)
DECLARE_FXID_VIRTUALS(FXBitmap)
DECLARE_FXDRAWABLE_VIRTUALS(FXBitmap)
DECLARE_FXBITMAP_VIRTUALS(FXBitmap)