all repos — fluxbox @ b42f722198d74fddc1856e1717f6dab2be32523f

custom fork of the fluxbox windowmanager

fixed RENDER extension checking
fluxgen fluxgen
commit

b42f722198d74fddc1856e1717f6dab2be32523f

parent

7298f23b0de460c219abac56dcf2fcba08928ec1

2 files changed, 37 insertions(+), 12 deletions(-)

jump to
M src/FbTk/Transparent.ccsrc/FbTk/Transparent.cc

@@ -19,7 +19,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Transparent.cc,v 1.3 2003/04/26 12:44:24 fluxgen Exp $ +// $Id: Transparent.cc,v 1.4 2003/05/07 09:31:29 fluxgen Exp $ #include "Transparent.hh" #include "App.hh"

@@ -92,15 +92,35 @@ };

namespace FbTk { +bool Transparent::s_init = false; +bool Transparent::s_render = false; Transparent::Transparent(Drawable src, Drawable dest, unsigned char alpha, int screen_num): m_alpha_pic(0), m_src_pic(0), m_dest_pic(0), m_source(src), m_dest(dest), m_alpha(alpha) { + Display *disp = FbTk::App::instance()->display(); + + // check for RENDER support + if (!s_init) { + int major_opcode, first_event, first_error; + if (XQueryExtension(disp, "RENDER", + &major_opcode, + &first_event, &first_error) == False) { + s_render = false; + } else { // we got RENDER support + s_render = true; + } + s_init = true; + } + + #ifdef HAVE_XRENDER + if (!s_render) + return; + allocAlpha(m_alpha); - Display *disp = FbTk::App::instance()->display(); XRenderPictFormat *format = XRenderFindVisualFormat(disp,

@@ -121,21 +141,21 @@ }

Transparent::~Transparent() { #ifdef HAVE_XRENDER - if (m_alpha_pic != 0) + if (m_alpha_pic != 0 && s_render) freeAlpha(); Display *disp = FbTk::App::instance()->display(); - if (m_dest_pic != 0) + if (m_dest_pic != 0 && s_render) XRenderFreePicture(disp, m_dest_pic); - if (m_src_pic != 0) + if (m_src_pic != 0 && s_render) XRenderFreePicture(disp, m_src_pic); #endif // HAVE_XRENDER } void Transparent::setAlpha(unsigned char alpha) { - if (m_source == 0) + if (m_source == 0 || !s_render) return; freeAlpha();

@@ -144,7 +164,7 @@ }

void Transparent::setDest(Drawable dest, int screen_num) { #ifdef HAVE_XRENDER - if (m_dest == dest) + if (m_dest == dest || !s_render) return; Display *disp = FbTk::App::instance()->display();

@@ -171,7 +191,7 @@ }

void Transparent::setSource(Drawable source, int screen_num) { #ifdef HAVE_XRENDER - if (m_source == source) + if (m_source == source || !s_render) return; // save old alpha value so we can recreate new later // with the same value

@@ -211,7 +231,7 @@ int dest_x, int dest_y,

unsigned int width, unsigned int height) const { #ifdef HAVE_XRENDER if (m_src_pic == 0 || m_dest_pic == 0 || - m_alpha_pic == 0) + m_alpha_pic == 0 || !s_render) return; // render src+alpha to dest picture XRenderComposite(FbTk::App::instance()->display(),

@@ -229,7 +249,7 @@ }

void Transparent::allocAlpha(unsigned char alpha) { #ifdef HAVE_XRENDER - if (m_source == 0) + if (m_source == 0 || !s_render) return; if (m_alpha_pic != 0) freeAlpha();

@@ -241,7 +261,8 @@ }

void Transparent::freeAlpha() { #ifdef HAVE_XRENDER - XRenderFreePicture(FbTk::App::instance()->display(), m_alpha_pic); + if (s_render && m_alpha_pic != 0) + XRenderFreePicture(FbTk::App::instance()->display(), m_alpha_pic); #endif // HAVE_XRENDER m_alpha_pic = 0; m_alpha = 255;
M src/FbTk/Transparent.hhsrc/FbTk/Transparent.hh

@@ -19,7 +19,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Transparent.hh,v 1.1 2003/04/20 13:27:16 fluxgen Exp $ +// $Id: Transparent.hh,v 1.2 2003/05/07 09:30:53 fluxgen Exp $ #ifndef FBTK_TRANSPARENT_HH #define FBTK_TRANSPARENT_HH

@@ -54,6 +54,10 @@ unsigned long m_src_pic;

unsigned long m_dest_pic; Drawable m_source, m_dest; unsigned char m_alpha; + + static bool s_init; + static bool s_render; ///< wheter we have RENDER support + }; }; // end namespace FbTk