X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Frendercontrol.hh;h=9e140db07d462ca956521765c5417b2a84917bc7;hb=1f63f7b331887a192ddf927670471c3f00f307f5;hp=f48f70576ac68180c9d09b18236f3e608374a890;hpb=e6d6a1b6b59d53f9d149f034274b205844eacf1e;p=chaz%2Fopenbox diff --git a/otk/rendercontrol.hh b/otk/rendercontrol.hh index f48f7057..9e140db0 100644 --- a/otk/rendercontrol.hh +++ b/otk/rendercontrol.hh @@ -7,68 +7,77 @@ extern "C" { #include } +#include "surface.hh" + namespace otk { class ScreenInfo; -class Widget; +class RenderTexture; +class Font; +class RenderColor; +class ustring; +class PixmapMask; class RenderControl { protected: - const ScreenInfo *_screen; - - // the number of bits (1-255) that each shade of color spans across. best - // case is 1, which gives 255 shades - int _red_bits; - int _green_bits; - int _blue_bits; - - // color tables, meaning, 256 (possibly) different shades of each color, - // based on the number of bits there are available for each color in the - // visual - unsigned char _red_color_table[256]; - unsigned char _green_color_table[256]; - unsigned char _blue_color_table[256]; - -/* - Bool _dither; - - int _cpc; // colors-per-channel: must be a value between [2,6] - int _bpp; // bits-per-pixel - - unsigned int *_grad_xbuffer; - unsigned int *_grad_ybuffer; - unsigned int _grad_buffer_width; - unsigned int _grad_buffer_height; - - unsigned long *_sqrt_table; - - // These values are all determined based on a visual - - int _red_bits; // the number of bits (1-255) that each shade of color - int _green_bits; // spans across. best case is 1, which gives 255 shades. - int _blue_bits; - unsigned char _red_color_table[256]; - unsigned char _green_color_table[256]; - unsigned char _blue_color_table[256]; - - // These are only used for TrueColor visuals - int _red_offset; // the offset of each color in a color mask - int _green_offset; - int _blue_offset; - - // These are only used for !TrueColor visuals - XColor *_colors; - int _ncolors; -*/ - - RenderControl(const ScreenInfo *screen); + int _screen; + +// bool _dither; + + RenderControl(int screen); + + inline void highlight(pixel32 *x, pixel32 *y, bool raised) const; + void verticalGradient(Surface &sf, const RenderTexture &texture) const; + void horizontalGradient(Surface &sf, const RenderTexture &texture) const; + void diagonalGradient(Surface &sf, const RenderTexture &texture) const; + void crossDiagonalGradient(Surface &sf, const RenderTexture &texture) const; + virtual void drawGradientBackground(Surface &sf, + const RenderTexture &texture) const; + virtual void drawSolidBackground(Surface& sf, + const RenderTexture& texture) const; + + //! Reduces a Surface's Surface::pixelData so that it will display correctly + //! on the screen's depth + /*! + This function allocates and sets the im->data member. The allocated memory + will be freed when XDetroyImage is called on the XImage. + */ + virtual void reduceDepth(Surface &sf, XImage *im) const = 0; public: virtual ~RenderControl(); - static RenderControl *getRenderControl(int screen); - - virtual void render(Widget *wi) = 0; + static RenderControl *createRenderControl(int screen); + + //! Draws a background onto a Surface, as specified by a RenderTexture + /*! + This function will overwrite the entire surface. + */ + virtual void drawBackground(Surface &sf, + const RenderTexture &texture) const; + + //! Draws an image onto the surface + /*! + This function will overwrite the entire surface.
+ The image must be specified in 32-bit packed ARGB format. The current + background will be used for applying the alpha. + */ + virtual void drawImage(Surface &sf, int w, int h, + unsigned long *data) const; + + //! Draws an image onto the surface + virtual void drawImage(Surface &sf, Pixmap pixmap, Pixmap mask) const; + + //! Draws a string onto a Surface + virtual void drawString(Surface &sf, const Font &font, int x, int y, + const RenderColor &color, + const ustring &string) const; + + //! Draws a PixmapMask with a specified color onto a Surface + virtual void drawMask(Surface &sf, const RenderColor &color, + const PixmapMask &mask) const; + + virtual void allocateColor(XColor *color) const = 0; }; }