]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/gtkutil/xorrectangle.cpp
Merge branch 'uis/lightfix' into 'master'
[xonotic/netradiant.git] / libs / gtkutil / xorrectangle.cpp
index 13b9ba2bc8f826d1c508dbef7aa66af4d0c5e549..be6384e210d59f23b142e112d2870a424ae36d17 100644 (file)
@@ -2,10 +2,14 @@
 
 #include <gtk/gtk.h>
 
+#define GARUX_DISABLE_BAD_XORRECTANGLE
+
+#if !defined(GARUX_DISABLE_BAD_XORRECTANGLE) && GTK_TARGET == 2
 #include "gtkutil/glwidget.h"
 #include "igl.h"
 
 #include <gtk/gtkglwidget.h>
+#endif // !GARUX_DISABLE_BAD_XORRECTANGLE && GTK_TARGET == 2
 
 //#include "stream/stringstream.h"
 
@@ -23,6 +27,7 @@ void XORRectangle::lazy_init()
 
 void XORRectangle::draw() const
 {
+#ifndef WORKAROUND_MACOS_GTK2_DESTROY
     const int x = float_to_integer(m_rectangle.x);
     const int y = float_to_integer(m_rectangle.y);
     const int w = float_to_integer(m_rectangle.w);
@@ -33,6 +38,7 @@ void XORRectangle::draw() const
     cairo_set_source_rgb(cr, 1, 1, 1);
     cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE);
     cairo_stroke(cr);
+#endif
 }
 
 XORRectangle::XORRectangle(ui::GLArea widget) : m_widget(widget), cr(0)
@@ -42,13 +48,16 @@ XORRectangle::XORRectangle(ui::GLArea widget) : m_widget(widget), cr(0)
 XORRectangle::~XORRectangle()
 {
     if (initialised()) {
+#ifndef WORKAROUND_MACOS_GTK2_DESTROY
         cairo_destroy(cr);
+#endif
     }
 }
 
 void XORRectangle::set(rectangle_t rectangle)
 {
     if (gtk_widget_get_realized(m_widget)) {
+#if !defined(GARUX_DISABLE_BAD_XORRECTANGLE) && GTK_TARGET == 2
                if( m_rectangle.w != rectangle.w || m_rectangle.h != rectangle.h ){
                //if( !(m_rectangle.w == 0 && m_rectangle.h == 0 && rectangle.w == 0 && rectangle.h == 0) ){
                //globalOutputStream() << "m_x" << m_rectangle.x << " m_y" << m_rectangle.y << " m_w" << m_rectangle.w << " m_h" << m_rectangle.h << "\n";
@@ -100,5 +109,11 @@ void XORRectangle::set(rectangle_t rectangle)
                        }
                }
                m_rectangle = rectangle;
+#else // GARUX_DISABLE_BAD_XORRECTANGLE || GTK_TARGET != 2
+               lazy_init();
+               draw();
+               m_rectangle = rectangle;
+               draw();
+#endif // !GARUX_DISABLE_BAD_XORRECTANGLE && GTK_TARGET == 2
     }
 }