]> Dogcows Code - chaz/openbox/blobdiff - otk/rendercontrol.hh
Add the "obsetroot" tool. Use it to set the root background.
[chaz/openbox] / otk / rendercontrol.hh
index cc05a3193815303fcc41c8149d5c6eeddc530ec4..5e21da291f0cc3528428d0eec0184e366d27aad2 100644 (file)
@@ -4,55 +4,76 @@
 
 extern "C" {
 #include <X11/Xlib.h>
+#include <X11/Xutil.h>
 }
 
+#include "surface.hh"
+
 namespace otk {
 
 class ScreenInfo;
+class RenderTexture;
+class Font;
+class RenderColor;
+class ustring;
+class PixmapMask;
 
 class RenderControl {
 protected:
-  const ScreenInfo *_screen;
-/*
-  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 _screen;
 
-  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];
+//  bool _dither;
 
-  // 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;
+  RenderControl(int screen);
 
-  // These are only used for !TrueColor visuals
-  XColor *_colors;
-  int _ncolors;
-*/
+  inline void highlight(pixel32 *x, pixel32 *y, bool raised) const;
+  void verticalGradient(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;
 
-  RenderControl(const ScreenInfo *screen);
+  //! 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(::Drawable d) = 0;
+  //! 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.<br>
+    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 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;
 };
 
 }
This page took 0.02321 seconds and 4 git commands to generate.