Now Uses gtkbuilder/glade for gui building.
[micahsconvexhulldemo.git] / main.cpp
blob755004a4a1f602abd02ab19e420500e2076887aa
1 #include <gtk/gtk.h>
2 #include "convexHull.h"
3 #include <algorithm>
5 int main(int argc,char* argv[])
7 gtk_init(&argc,&argv);
9 GtkBuilder* builder = gtk_builder_new();
10 gtk_builder_add_from_file(builder,"gui.xml",NULL);
12 GtkWidget* window ;
13 window = GTK_WIDGET(gtk_builder_get_object(builder,"window"));
14 g_assert (window != NULL);
16 /*connect signals */
17 std::vector<Vec2f> points;
18 gtk_builder_connect_signals (builder,&points);
19 g_object_unref (G_OBJECT (builder));
23 gtk_widget_show_all((window));
25 gtk_main();
26 return 0;
30 bool compare(const Vec2f& v1,const Vec2f& v2)
32 if(v1.x < v2.x)
33 return true;
34 else if (v1.x == v2.x)
35 return (v1.y > v2.y);
36 return false;
39 extern "C"
41 gboolean drawarea_button_press_event_cb(GtkWidget* widget,
42 GdkEventButton* button,
43 std::vector<Vec2f>* points)
45 points->push_back(Vec2f(button->x,button->y));
47 gtk_widget_queue_draw(widget);
48 return FALSE;
52 gboolean drawarea_expose_event_cb(GtkWidget* widget,
53 GdkEventExpose* event,
54 std::vector<Vec2f>* points)
56 if(!points->empty())
59 std::sort(points->begin(),points->end(),&compare);
60 std::vector<Vec2f> CH;
61 convexHull(*points,CH);
63 gdk_window_clear(widget->window);
65 cairo_t* cr = gdk_cairo_create(widget->window);
69 /* draw polygon that is representative of the convex hull*/
70 cairo_move_to(cr,CH[0].x,CH[0].y);
71 for(size_t i = 1;i < CH.size();++i)
72 cairo_line_to(cr,CH[i].x,CH[i].y);
73 cairo_line_to(cr,CH[0].x,CH[0].y);
75 cairo_set_source_rgb(cr,0,0,0);
76 cairo_stroke(cr);
78 /* draw all the points */
79 for(size_t i = 0;i < points->size();++i)
80 cairo_rectangle(cr,(*points)[i].x,(*points)[i].y, 2,2);
81 cairo_set_source_rgb(cr,1,0,0);
82 cairo_stroke(cr);
84 cairo_destroy(cr);
88 return FALSE;
92 void clear(GtkWidget* widget,
93 std::vector<Vec2f>* points)
95 points->clear();
97 gboolean window_destroy_cb(GtkWidget* widget,
98 gpointer*)
100 gtk_main_quit();
101 return false;