Surface::~Surface()
{
destroyObjects();
- delete [] _pixel_data;
+ freePixelData();
+}
+
+void Surface::freePixelData()
+{
+ if (_pixel_data) {
+ delete [] _pixel_data;
+ _pixel_data = 0;
+ }
}
void Surface::setPixmap(const RenderColor &color)
{
+ assert(_pixel_data);
if (_pixmap == None)
createObjects();
-
+
XFillRectangle(**display, _pixmap, color.gc(), 0, 0,
_size.width(), _size.height());
- pixel32 val = 0; // XXX set this from the color and shift amounts!
- for (unsigned int i = 0, s = _size.width() * _size.height(); i < s; ++i) {
- unsigned char *p = (unsigned char*)&_pixel_data[i];
- *p = (unsigned char) (val >> 24);
- *++p = (unsigned char) (val >> 16);
- *++p = (unsigned char) (val >> 8);
- *++p = (unsigned char) val;
- }
+ pixel32 val = (color.red() << default_red_shift) |
+ (color.green() << default_green_shift) |
+ (color.blue() << default_blue_shift);
+ for (unsigned int i = 0, s = _size.width() * _size.height(); i < s; ++i)
+ _pixel_data[i] = val;
}
void Surface::setPixmap(XImage *image)
{
+ assert(_pixel_data);
assert(image->width == _size.width());
assert(image->height == _size.height());