X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fsurface.hh;h=a44b9049740820e098fa5fb39cdf6deb9decabbc;hb=a91a6f97daeb058f346246081e1c83a788787f9b;hp=53738128a2d8b06328f43e48eea56d7cd50450a5;hpb=9b6e5f9cf49df78be25720f9c4b33a733b856c9b;p=chaz%2Fopenbox diff --git a/otk/surface.hh b/otk/surface.hh index 53738128..a44b9049 100644 --- a/otk/surface.hh +++ b/otk/surface.hh @@ -2,48 +2,85 @@ #ifndef __surface_hh #define __surface_hh -#include "point.hh" -#include "truerendercontrol.hh" +#include "size.hh" extern "C" { #include #define _XFT_NO_COMPAT_ // no Xft 1 API #include + +#ifdef HAVE_STDINT_H +# include +#else +# ifdef HAVE_SYS_TYPES_H +# include +# 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; - XImage *_im; - Pixmap _pm; + Size _size; + pixel32 *_pixel_data; + Pixmap _pixmap; XftDraw *_xftdraw; +protected: void createObjects(); void destroyObjects(); - -protected: - Surface(int screen); - Surface(int screen, const Point &size); - - virtual void setSize(int w, int h); + void setPixmap(XImage *image); + void setPixmap(const RenderColor &color); + public: + 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(); } - virtual Pixmap pixmap() const { return _pm; } // TEMP + + const Size& size() const { return _size; } + + Pixmap pixmap() const { return _pixmap; } + + pixel32 *pixelData() { return _pixel_data; } + + //! 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; }; }