From: Dana Jansens Date: Sat, 18 Jan 2003 04:06:39 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=9f705c02b9c412c053fc12a2ebdc5cebe83400c8;p=chaz%2Fopenbox *** empty log message *** --- diff --git a/otk/rendercontrol.hh b/otk/rendercontrol.hh index efa16fd0..14c0e92c 100644 --- a/otk/rendercontrol.hh +++ b/otk/rendercontrol.hh @@ -10,7 +10,7 @@ extern "C" { namespace otk { class ScreenInfo; -class Widget; +class Surface; class RenderControl { protected: @@ -66,7 +66,7 @@ public: static RenderControl *getRenderControl(int screen); - virtual void render(Widget *wi) = 0; + virtual void render(Surface *sf) = 0; }; } diff --git a/otk/surface.hh b/otk/surface.hh index 7289b14a..0c64c6f5 100644 --- a/otk/surface.hh +++ b/otk/surface.hh @@ -3,6 +3,7 @@ #define __surface_hh #include "point.hh" +#include "truerendercontrol.hh" extern "C" { #include @@ -26,6 +27,8 @@ public: virtual const Point& size() const { return _size; } virtual int width() const { return _size.x(); } virtual int height() const { return _size.y(); } + + friend class TrueRenderControl; }; } diff --git a/otk/truerendercontrol.cc b/otk/truerendercontrol.cc index 39176a6c..95a0a416 100644 --- a/otk/truerendercontrol.cc +++ b/otk/truerendercontrol.cc @@ -7,7 +7,7 @@ #include "truerendercontrol.hh" #include "display.hh" #include "screeninfo.hh" -#include "widget.hh" +#include "surface.hh" extern "C" { #ifdef HAVE_STDLIB_H @@ -21,7 +21,10 @@ extern "C" { namespace otk { TrueRenderControl::TrueRenderControl(const ScreenInfo *screen) - : RenderControl(screen) + : RenderControl(screen), + _red_offset(0), + _green_offset(0), + _blue_offset(0) { printf("Initializing TrueColor RenderControl\n"); @@ -99,12 +102,12 @@ static inline void renderPixel(XImage *im, unsigned char *dp, } } -void TrueRenderControl::render(Widget *wi) +void TrueRenderControl::render(Surface *sf) { - assert(wi); + assert(sf); - int w = wi->width(), h = wi->height(); - Pixmap p = XCreatePixmap(**display, wi->window(), w, h, _screen->depth()); + int w = sf->width(), h = sf->height(); + XImage *im = XCreateImage(**display, _screen->visual(), _screen->depth(), ZPixmap, 0, NULL, w, h, 32, 0); @@ -125,17 +128,15 @@ void TrueRenderControl::render(Widget *wi) im->data = (char*) data; - XPutImage(**display, p, DefaultGC(**display, _screen->screen()), + if (!sf->_pm) + sf->_pm = XCreatePixmap(**display, _screen->rootWindow(), w, h, + _screen->depth()); + XPutImage(**display, sf->_pm, DefaultGC(**display, _screen->screen()), im, 0, 0, 0, 0, w, h); //delete [] image->data; //image->data = NULL; XDestroyImage(im); - - XSetWindowBackgroundPixmap(**display, wi->window(), p); - XClearWindow(**display, wi->window()); - - XFreePixmap(**display, p); } } diff --git a/otk/truerendercontrol.hh b/otk/truerendercontrol.hh index 574b5272..4012a008 100644 --- a/otk/truerendercontrol.hh +++ b/otk/truerendercontrol.hh @@ -17,7 +17,7 @@ public: TrueRenderControl(const ScreenInfo *screen); virtual ~TrueRenderControl(); - virtual void render(Widget *wi); + virtual void render(Surface *sf); }; }