#ifndef __surface_hh
#define __surface_hh
-#include "point.hh"
-#include "truerendercontrol.hh"
+#include "size.hh"
extern "C" {
#include <X11/Xlib.h>
#define _XFT_NO_COMPAT_ // no Xft 1 API
#include <X11/Xft/Xft.h>
+
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#else
+# ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+#endif
}
namespace otk {
class ScreenInfo;
+class RenderColor;
+class RenderControl;
+class TrueRenderControl;
+class PseudoRenderControl;
+
+#ifdef HAVE_STDINT_H
+typedef uint32_t pixel32;
+typedef uint16_t pixel16;
+#else
+typedef u_int32_t pixel32;
+typedef u_int16_t pixel16;
+#endif /* HAVE_STDINT_H */
+
+#ifdef WORDS_BIGENDIAN
+const int default_red_shift=0;
+const int default_green_shift=8;
+const int default_blue_shift=16;
+const int endian=MSBFirst;
+#else
+const int default_red_shift=16;
+const int default_green_shift=8;
+const int default_blue_shift=0;
+const int endian=LSBFirst;
+#endif /* WORDS_BIGENDIAN */
class Surface {
int _screen;
- Point _size;
+ Size _size;
+ pixel32 *_pixel_data;
Pixmap _pixmap;
XftDraw *_xftdraw;
void destroyObjects();
void setPixmap(XImage *image);
- void setPixmap(const Color &color);
+ void setPixmap(const RenderColor &color);
public:
- Surface(int screen, const Point &size);
+ Surface(int screen, const Size &size);
virtual ~Surface();
inline int screen(void) const { return _screen; }
- virtual const Point& size() const { return _size; }
- virtual int width() const { return _size.x(); }
- virtual int height() const { return _size.y(); }
+ const Size& size() const { return _size; }
+
+ Pixmap pixmap() const { return _pixmap; }
+
+ pixel32 *pixelData() { return _pixel_data; }
- virtual Pixmap pixmap() const { return _pixmap; }
+ //! Frees the pixel data when it will no longer be needed. Only do this once
+ //! you have completed rendering onto the surface.
+ void freePixelData();
// The RenderControl classes use the internal objects in this class to render
// to it. Noone else needs them tho, so they are private.
friend class RenderControl;
friend class TrueRenderControl;
+ friend class PseudoRenderControl;
};
}