[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-gnubg] gnubg hangs when closing Appearance prefs on MacOS X
From: |
Jon Kinsey |
Subject: |
Re: [Bug-gnubg] gnubg hangs when closing Appearance prefs on MacOS X |
Date: |
Tue, 20 Apr 2004 11:49:46 +0100 |
User-agent: |
Mozilla Thunderbird 0.5 (Windows/20040207) |
Olivier, Michael or any other mac users...
I've created a very simple test program which should narrow things down
to gnubg or gtkglext.
I've attached a makefile too, but I'm building on windows so may be of
limited use - should be easy to build anyway.
Just click the test button and see if the dialog closes ok.
Jon
NAME=exttest
LIBFLAGS=-mwindows
FLAGS=-fnative-struct -Wall -O3
RM=del
CC=gcc
INCLUDE= \
-I$(BASEDIR)\include\gtk-2.0 \
-I$(BASEDIR)\include\pango-1.0 \
-I$(BASEDIR)\include\atk-1.0 \
-I$(BASEDIR)\lib\gtk-2.0\include \
-I$(BASEDIR)/lib/glib-2.0/include \
-I$(BASEDIR)/include/libxml2 \
-I$(BASEDIR)/include/gtkglext-1.0 \
-I$(BASEDIR)/lib/gtkglext-1.0/include \
-I$(BASEDIR)/include/glib-2.0 \
-I$(BASEDIR)/include/freetype2
LIBS= \
-lintl.dll -lgdbm.dll\
-lgobject-2.0.dll -lglib-2.0.dll -lgtk-win32-2.0 -lgdk-win32-2.0 \
-liconv -lpng -lz -lwinmm -lm -lpango-1.0 -lgdk_pixbuf-2.0 \
-lopengl32 -lglu32 -lglut32 \
-lgdkglext-win32-1.0.dll -lgtkglext-win32-1.0.dll
TARGET=$(NAME).exe
SOURCE=$(NAME)
OBJECTS=$(patsubst %,%.o,$(SOURCE))
HEADERS=
all: $(TARGET)
@echo done
$(TARGET)
$(TARGET): $(OBJECTS)
@echo linking
$(CC) -o $@ $+ $(LIBFLAGS) $(LIBS)
address@hidden compiling $(patsubst bin/gtk/int/../../../%,%,$<)
COMP2=${CC} $(FLAGS) $(INCLUDE) -o $@ -c $<
%.o: %.c $(HEADERS)
$(COMP1)
$(COMP2)
clean:
$(RM) $(OBJECTS)
@echo clean
#include <gtk/gtk.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <gtk/gtkgl.h>
void realize(GtkWidget *widget, void* data)
{
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
if (!gdk_gl_drawable_gl_begin(gldrawable,
gtk_widget_get_gl_context(widget)))
{
g_print("gdk_gl_drawable_gl_begin failed\n");
return;
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,100,100,0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0,0,0,1);
gdk_gl_drawable_gl_end(gldrawable);
}
static gboolean configure_event(GtkWidget *widget, GdkEventConfigure *notused,
void* data)
{
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
if (!gdk_gl_drawable_gl_begin(gldrawable,
gtk_widget_get_gl_context(widget)))
{
g_print("gdk_gl_drawable_gl_begin failed\n");
return FALSE;
}
glViewport(0, 0, widget->allocation.width, widget->allocation.height);
gdk_gl_drawable_gl_end(gldrawable);
return TRUE;
}
void CheckOpenglError()
{
GLenum glErr = glGetError();
if (glErr != GL_NO_ERROR)
g_print("OpenGL Error: %s\n", gluErrorString(glErr));
}
void Draw(int red)
{
CheckOpenglError();
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(red,1,1);
glBegin(GL_TRIANGLES);
glVertex2f(10,10);
glVertex2f(10,90);
glVertex2f(90,90);
glEnd();
}
static gboolean expose_event(GtkWidget *widget, GdkEventExpose *notused, int
red)
{
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
if (!gdk_gl_drawable_gl_begin(gldrawable,
gtk_widget_get_gl_context(widget)))
{
g_print("gdk_gl_drawable_gl_begin failed\n");
return FALSE;
}
Draw(red);
gdk_gl_drawable_swap_buffers(gldrawable);
gdk_gl_drawable_gl_end(gldrawable);
return TRUE;
}
GdkGLConfig *glconfig;
extern GtkWidget* CreateGLWidget(int red)
{
GtkWidget* drawing_area;
drawing_area = gtk_drawing_area_new();
gtk_widget_set_gl_capability(drawing_area, glconfig, NULL, TRUE,
GDK_GL_RGBA_TYPE);
gtk_widget_set_size_request(drawing_area, 200, 200);
if (drawing_area == NULL)
{
g_print("Can't create opengl drawing widget\n");
return NULL;
}
gtk_widget_set_events(drawing_area, GDK_EXPOSURE_MASK);
gtk_signal_connect(GTK_OBJECT(drawing_area), "realize",
GTK_SIGNAL_FUNC(realize), 0);
gtk_signal_connect(GTK_OBJECT(drawing_area), "configure_event",
GTK_SIGNAL_FUNC(configure_event), 0);
gtk_signal_connect(GTK_OBJECT(drawing_area), "expose_event",
GTK_SIGNAL_FUNC(expose_event), (void*)red);
return drawing_area;
}
GtkWidget *window;
static void Test(GtkWidget *pw, void* data)
{
GtkWidget *pwDialog = gtk_dialog_new();
g_signal_connect(G_OBJECT(pwDialog), "delete_event",
G_CALLBACK(gtk_main_quit), NULL);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(pwDialog)->vbox),
CreateGLWidget(0));
gtk_window_set_modal(GTK_WINDOW(pwDialog), TRUE);
gtk_window_set_transient_for(GTK_WINDOW(pwDialog), GTK_WINDOW(window));
gtk_widget_show_all(pwDialog);
gtk_main();
}
int main (int argc, char *argv[])
{
GtkWidget *vbox;
GtkWidget *button;
gtk_init(&argc, &argv);
gtk_gl_init(&argc, &argv);
glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB |
GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE | GDK_GL_MODE_STENCIL);
if (!glconfig)
{
g_print("*** Cannot find OpenGL-capable visual ***\n");
return 0;
}
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(gtk_main_quit), NULL);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show (vbox);
gtk_box_pack_start (GTK_BOX (vbox), CreateGLWidget(1), TRUE, TRUE, 0);
button = gtk_button_new_with_label ("Test");
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK(Test), NULL);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
Re: [Bug-gnubg] gnubg hangs when closing Appearance prefs on MacOS X, Olivier Baur, 2004/04/20