#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"
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);
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)
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";
}
}
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
}
}