]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/gtkutil/xorrectangle.cpp
Merge branch 'NateEag-master-patch-12920' into 'master'
[xonotic/netradiant.git] / libs / gtkutil / xorrectangle.cpp
index 17d48bf9d097d3e103c6dd12866dc88a3d20be6e..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"
 
@@ -53,6 +57,7 @@ XORRectangle::~XORRectangle()
 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";
@@ -67,6 +72,10 @@ void XORRectangle::set(rectangle_t rectangle)
                                glMatrixMode( GL_PROJECTION );
                                glLoadIdentity();
                                glOrtho( 0, width, 0, height, -100, 100 );
+
+                               glMatrixMode( GL_MODELVIEW );
+                               glLoadIdentity();
+
                                glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
                                glDisable( GL_DEPTH_TEST );
 
@@ -92,6 +101,7 @@ void XORRectangle::set(rectangle_t rectangle)
                                glVertex2f( rectangle.x, rectangle.y );
                                glEnd();
 
+                               glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
                                glDrawBuffer( GL_BACK );
                                GlobalOpenGL_debugAssertNoErrors();
                                //glwidget_swap_buffers( m_widget );
@@ -99,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
     }
 }