From 18c2980fa91891a5fac99d93951814e140705f9f Mon Sep 17 00:00:00 2001 From: Micah Heyer Date: Mon, 29 Jun 2009 23:11:44 -0500 Subject: [PATCH] Now Uses gtkbuilder/glade for gui building. This cleans up the program a bit and as a result should make it easier to understand. I like the idea of seperating the logic and the gui this way. It also reduces the need for slow compiles (not that thats a problem for a project this size) because the gui can be tweeked using glade or just a text editor. Ok, I admit I haven't used glade much and am just scratching an itch. Oh well.:) --- SConstruct | 2 +- gui.xml | 44 +++++++++++++++++++++++++++++++++++++ main.cpp | 73 +++++++++++++++++++++----------------------------------------- 3 files changed, 70 insertions(+), 49 deletions(-) create mode 100644 gui.xml diff --git a/SConstruct b/SConstruct index 5fb4619..ecc605b 100644 --- a/SConstruct +++ b/SConstruct @@ -1,6 +1,6 @@ env = Environment() -env.ParseConfig("pkg-config --libs --cflags gtk+-2.0") +env.ParseConfig("pkg-config --libs --cflags gtk+-2.0 gmodule-export-2.0") env.Append(CXXFLAGS = ["-ggdb"]) env.Program("convexHull",["convexHull.cpp","main.cpp"]) diff --git a/gui.xml b/gui.xml new file mode 100644 index 0000000..19bdf6c --- /dev/null +++ b/gui.xml @@ -0,0 +1,44 @@ + + + + + + + + + True + vertical + + + + + + 200 + 200 + True + GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK + + + + + 1 + + + + + clear + True + True + True + + + + + False + 2 + + + + + + diff --git a/main.cpp b/main.cpp index 374c603..755004a 100644 --- a/main.cpp +++ b/main.cpp @@ -2,58 +2,24 @@ #include "convexHull.h" #include -static gboolean drawarea_button_press(GtkWidget* widget, - GdkEventButton* button, - std::vector* points); -static gboolean drawarea_expose_event(GtkWidget* widget, - GdkEventExpose* event, - std::vector* points); -static gboolean window_destroy_event(GtkWidget* widget, - GdkEvent* event, - gpointer*) -{ - gtk_main_quit(); - return false; -} - -static void clear(GtkWidget* widget, - std::vector* points); - -static void redraw_widget(GtkWidget* button, - GtkWidget* widget) -{ - gtk_widget_queue_draw(widget); -} int main(int argc,char* argv[]) { gtk_init(&argc,&argv); - GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - g_signal_connect(G_OBJECT(window),"destroy", - G_CALLBACK(window_destroy_event),NULL); + GtkBuilder* builder = gtk_builder_new(); + gtk_builder_add_from_file(builder,"gui.xml",NULL); - GtkWidget* drawarea = gtk_drawing_area_new(); - gtk_widget_set_size_request(drawarea,200,200); - gtk_widget_set_events(drawarea,GDK_EXPOSURE_MASK - | GDK_BUTTON_PRESS_MASK); + GtkWidget* window ; + window = GTK_WIDGET(gtk_builder_get_object(builder,"window")); + g_assert (window != NULL); + /*connect signals */ std::vector points; - g_signal_connect(G_OBJECT(drawarea),"expose-event", - G_CALLBACK(drawarea_expose_event),&points); - g_signal_connect(G_OBJECT(drawarea),"button-press-event", - G_CALLBACK(drawarea_button_press),&points); - - - GtkWidget* vbox = gtk_vbox_new(false,0); - GtkWidget* button = gtk_button_new_with_label("clear"); - g_signal_connect(G_OBJECT(button),"clicked", - G_CALLBACK(clear),&points); - g_signal_connect(G_OBJECT(button),"clicked", - G_CALLBACK(redraw_widget),drawarea); - gtk_box_pack_start(GTK_BOX(vbox),drawarea,true,true,0); - gtk_box_pack_end(GTK_BOX(vbox),button,false,false,0); - - gtk_container_add(GTK_CONTAINER(window),vbox); + gtk_builder_connect_signals (builder,&points); + g_object_unref (G_OBJECT (builder)); + + + gtk_widget_show_all((window)); gtk_main(); @@ -70,7 +36,9 @@ bool compare(const Vec2f& v1,const Vec2f& v2) return false; } -static gboolean drawarea_button_press(GtkWidget* widget, +extern "C" +{ + gboolean drawarea_button_press_event_cb(GtkWidget* widget, GdkEventButton* button, std::vector* points) { @@ -81,7 +49,7 @@ static gboolean drawarea_button_press(GtkWidget* widget, } -static gboolean drawarea_expose_event(GtkWidget* widget, + gboolean drawarea_expose_event_cb(GtkWidget* widget, GdkEventExpose* event, std::vector* points) { @@ -121,8 +89,17 @@ static gboolean drawarea_expose_event(GtkWidget* widget, } -static void clear(GtkWidget* widget, + void clear(GtkWidget* widget, std::vector* points) { points->clear(); } +gboolean window_destroy_cb(GtkWidget* widget, + gpointer*) +{ + gtk_main_quit(); + return false; +} + + +} -- 2.11.4.GIT