diff options
author | Oliver Schinagl <oliver@schinagl.nl> | 2007-11-28 13:05:19 (GMT) |
---|---|---|
committer | Oliver Schinagl <oliver@schinagl.nl> | 2007-11-28 13:05:19 (GMT) |
commit | b7797f2d2229b7ac0837b642d7ead82096ddb147 (patch) | |
tree | 50c5e26d80aba9dba5269757d2e52b0bcb29f969 /Smoke/gtk.c | |
parent | 3b1c743de30bf7924bef1cc234f5326aa49804b0 (diff) | |
download | 2iv35-b7797f2d2229b7ac0837b642d7ead82096ddb147.zip 2iv35-b7797f2d2229b7ac0837b642d7ead82096ddb147.tar.gz 2iv35-b7797f2d2229b7ac0837b642d7ead82096ddb147.tar.bz2 |
Merged version
Diffstat (limited to 'Smoke/gtk.c')
-rw-r--r-- | Smoke/gtk.c | 556 |
1 files changed, 418 insertions, 138 deletions
diff --git a/Smoke/gtk.c b/Smoke/gtk.c index db4204a..040ef84 100644 --- a/Smoke/gtk.c +++ b/Smoke/gtk.c @@ -59,7 +59,7 @@ *** area, plus the default title of the window. ***/ #define DEFAULT_WIDTH 800 -#define DEFAULT_HEIGHT 600 +#define DEFAULT_HEIGHT 800 #define DEFAULT_TITLE "2iv35 \"Smoke\" by Wilrik & Oliver" #define TIMEOUT_INTERVAL 10 @@ -71,8 +71,6 @@ static gboolean animate = TRUE; -int winWidth, winHeight; //size of the graphics window, in pixels - /************************************************************************** * The following section contains the function prototype declarations. @@ -100,7 +98,7 @@ static GtkWidget *create_window (GdkGLConfig *glconfig); ***/ static void realize (GtkWidget *widget, - gpointer data) + gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); @@ -125,8 +123,8 @@ realize (GtkWidget *widget, ***/ static gboolean configure_event (GtkWidget *widget, - GdkEventConfigure *event, - gpointer data) + GdkEventConfigure *event, + gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); @@ -141,13 +139,16 @@ configure_event (GtkWidget *widget, return FALSE; /*** Fill in the details here. ***/ + glViewport (0, 0, w, h); +// fluids glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h); winWidth = w; winHeight = h; +// endf gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ @@ -162,13 +163,13 @@ configure_event (GtkWidget *widget, ***/ static gboolean expose_event (GtkWidget *widget, - GdkEventExpose *event, - gpointer data) + GdkEventExpose *event, + gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); - //g_print ("%s: \"expose_event\"\n", gtk_widget_get_name (widget)); +// g_print ("%s: \"expose_event\"\n", gtk_widget_get_name (widget)); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) @@ -177,12 +178,12 @@ expose_event (GtkWidget *widget, glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /*** Fill in the details here. ***/ + // fluids glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - set_forces(); - solve(DIM, vx, vy, vx0, vy0, visc, dt); - diffuse_matter(DIM, vx, vy, rho, rho0, dt); + calculate_one_simulation_step(); visualize(); + // endf /* Swap buffers */ if (gdk_gl_drawable_is_double_buffered (gldrawable)) @@ -204,7 +205,7 @@ expose_event (GtkWidget *widget, static gboolean timeout (GtkWidget *widget) { - //g_print ("."); +// g_print ("."); /*** Fill in the details here ***/ @@ -223,7 +224,7 @@ timeout (GtkWidget *widget) ***/ static void unrealize (GtkWidget *widget, - gpointer data) + gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); @@ -246,59 +247,17 @@ unrealize (GtkWidget *widget, ***/ static gboolean motion_notify_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer data) + GdkEventMotion *event, + gpointer data) { +// g_print ("%s: \"motion_notify_event\": button", gtk_widget_get_name (widget)); + /*** Fill in the details here. ***/ - int mx, my, xi,yi,X,Y; double dx, dy, len; - int clamp_scaled_min, clamp_scaled_max; - static int lmx=0,lmy=0; //remembers last mouse location - - mx = (int)event->x; - my = (int)event->y; - - /* Density calculations etc are only computed on area's below the slider */ - if (my >25) { - // Compute the array index that corresponds to the cursor location - xi = (int)clamp((double)(DIM + 1) * ((double)mx / (double)winWidth)); - yi = (int)clamp((double)(DIM + 1) * ((double)(winHeight - my) / (double)winHeight)); - - X = xi; Y = yi; - - if (X > (DIM - 1)) X = DIM - 1; if (Y > (DIM - 1)) Y = DIM - 1; - if (X < 0) X = 0; if (Y < 0) Y = 0; - - // Add force at the cursor location - my = winHeight - my; - dx = mx - lmx; dy = my - lmy; - len = sqrt(dx * dx + dy * dy); - if (len != 0.0) { dx *= 0.1 / len; dy *= 0.1 / len; } - fx[Y * DIM + X] += dx; - fy[Y * DIM + X] += dy; - rho[Y * DIM + X] = 10.0f; - lmx = mx; lmy = my; - } else { - switch (active_slider) { - case MOUSE_SCALE_MIN: - scale_min = (float)mx /winWidth; - break; - case MOUSE_SCALE_MAX: - scale_max = (float)mx /winWidth; - break; - case MOUSE_CLAMP_MIN: - clamp_min = (float)mx /winWidth; - break; - case MOUSE_CLAMP_MAX: - clamp_max = (float)mx /winWidth; - break; - case MOUSE_SMOKE: - default: - break; - } - } if (event->state & GDK_BUTTON1_MASK) { +// g_print (" 1"); + drag((int)event->x, (int)event->y); } if (event->state & GDK_BUTTON2_MASK) @@ -311,6 +270,8 @@ motion_notify_event (GtkWidget *widget, g_print (" 3"); } +// g_print ("\n"); + return FALSE; } @@ -321,40 +282,18 @@ motion_notify_event (GtkWidget *widget, ***/ static gboolean button_press_event (GtkWidget *widget, - GdkEventButton *event, - gpointer data) + GdkEventButton *event, + gpointer data) { g_print ("%s: \"button_press_event\": ", gtk_widget_get_name (widget)); if (event->button == 1) { /*** Fill in the details here. ***/ - - /* First check wether we are on the top half, or bottom half of the bar, if neither then - * the mouseinput is for the smoke - */ - if (event->y <25) { - /* Click received on button bar */ - if (event->y <13) { - /* Upper half */ - /* check wether mx is min or max slider */ - if (event->x <(rescale_to_winwidth(scale_min +((scale_max - scale_min) /2)))) { - active_slider = MOUSE_SCALE_MIN; - } else if (event->x >(rescale_to_winwidth(scale_max -((scale_max - scale_min) /2)))) { - active_slider = MOUSE_SCALE_MAX; - } - } else { - /* Bottom half */ - /* check wether mx is min or max slider */ - if (event->x <(rescale_to_winwidth(clamp_min +((clamp_max - clamp_min) /2)))) { - active_slider = MOUSE_CLAMP_MIN; - } else if (event->x >(rescale_to_winwidth(clamp_max -((clamp_max - clamp_min) /2)))) { - active_slider = MOUSE_CLAMP_MAX; - } - } - } else { - active_slider = MOUSE_SMOKE; - } +// g_print ("button 1\n"); + // fluids + click(1, 1, (int)event->x, (int)event->y); + // endf return TRUE; } @@ -375,8 +314,8 @@ button_press_event (GtkWidget *widget, /* For popup menu. */ static gboolean button_press_event_popup_menu (GtkWidget *widget, - GdkEventButton *event, - gpointer data) + GdkEventButton *event, + gpointer data) { g_print ("%s: \"button_press_event_popup\": ", gtk_widget_get_name (widget)); @@ -401,9 +340,11 @@ button_press_event_popup_menu (GtkWidget *widget, ***/ static gboolean key_press_event (GtkWidget *widget, - GdkEventKey *event, - gpointer data) + GdkEventKey *event, + gpointer data) { +// g_print ("%s: \"key_press_event\": ", gtk_widget_get_name (widget)); + switch (event->keyval) { /*** Fill in the details here. ***/ @@ -437,13 +378,11 @@ key_press_event (GtkWidget *widget, break; case GDK_x: - draw_smoke = 1 -draw_smoke; - if (!draw_smoke) { draw_smoke = 1; } + toggle_smoke_usage(); break; case GDK_y: - draw_vecs = 1 -draw_vecs; - if (!draw_vecs) { draw_vecs = 1; } + toggle_glyph_usage(); break; case GDK_m: @@ -451,14 +390,18 @@ key_press_event (GtkWidget *widget, break; case GDK_a: +// g_print ("a key\n"); toggle_animation (widget); break; + case GDK_q: case GDK_Escape: +// g_print ("Escape key\n"); gtk_main_quit (); break; default: +// g_print("\n"); return FALSE; } @@ -503,8 +446,8 @@ timeout_remove (GtkWidget *widget) ***/ static gboolean map_event (GtkWidget *widget, - GdkEvent *event, - gpointer data) + GdkEvent *event, + gpointer data) { g_print ("%s: \"map_event\":\n", gtk_widget_get_name (widget)); if (animate) @@ -535,15 +478,15 @@ unmap_event (GtkWidget *widget, ***/ static gboolean visibility_notify_event (GtkWidget *widget, - GdkEventVisibility *event, - gpointer data) + GdkEventVisibility *event, + gpointer data) { if (animate) { if (event->state == GDK_VISIBILITY_FULLY_OBSCURED) - timeout_remove (widget); + timeout_remove (widget); else - timeout_add (widget); + timeout_add (widget); } return TRUE; @@ -593,26 +536,278 @@ create_popup_menu (GtkWidget *drawing_area) menu_item = gtk_menu_item_new_with_label ("Toggle Animation"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect_swapped (G_OBJECT (menu_item), "activate", - G_CALLBACK (toggle_animation), drawing_area); + G_CALLBACK (toggle_animation), drawing_area); gtk_widget_show (menu_item); /* Toggle glyphs */ - menu_item = gtk_menu_item_new_with_label ("Glyphs"); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); - g_signal_connect_swapped (G_OBJECT (menu_item), "activate", - G_CALLBACK (set_glyph_usage), drawing_area); - gtk_widget_show (menu_item); +// menu_item = gtk_menu_item_new_with_label ("Glyphs"); +// gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); +// g_signal_connect_swapped (G_OBJECT (menu_item), "activate", +// G_CALLBACK (set_glyph_usage), drawing_area); +// gtk_widget_show (menu_item); /* Quit */ menu_item = gtk_menu_item_new_with_label ("Quit"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", - G_CALLBACK (gtk_main_quit), NULL); + G_CALLBACK (gtk_main_quit), NULL); gtk_widget_show (menu_item); - + return menu; } +void show_settings(GtkWidget *notebook) +{ + +} + +/* + * Draw main notebook page + */ +GtkWidget *create_main_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + GtkWidget *frame; + GtkWidget *box; + GtkWidget *button; + GSList *dataset_group; + + page = gtk_vbox_new(FALSE, 0); + + + box = gtk_vbox_new(FALSE, 0); + button = gtk_check_button_new_with_label("Draw Smoke"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(toggle_smoke_usage), NULL); + gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + button = gtk_check_button_new_with_label("Draw Glyphs"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(toggle_glyph_usage), NULL); + gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_box_pack_start (GTK_BOX(page), box, FALSE, TRUE, 0); + gtk_widget_show(box); + +// frame = gtk_frame_new("XXX"); +// gtk_box_pack_start (GTK_BOX(page), frame, TRUE, TRUE, 0); +// gtk_widget_show(frame); + + frame = gtk_frame_new("Dataset"); + + box = gtk_hbox_new(FALSE, 0); + + button = gtk_radio_button_new_with_label (NULL, "Rho"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_RHO); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); + + button = gtk_radio_button_new_with_label(dataset_group, "Velocity"); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_VEL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_FORCE); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + + return page; +} + +/* + * Draw colormap notebook page + */ +GtkWidget *create_colormap_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + GtkWidget *frame; + GtkWidget *box; + GtkWidget *button; + GtkWidget *combo; + GList *glist; + + glist = NULL; + + page = gtk_vbox_new(FALSE, 0); + + frame = gtk_frame_new("Scaling & Clamping"); + + box = gtk_vbox_new(FALSE, 0); + + button = gtk_check_button_new_with_label("Scaling"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(toggle_autoscale), NULL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + button = gtk_check_button_new_with_label("Clamping"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(toggle_clamping), NULL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); + + gtk_widget_show(frame); + + + frame = gtk_frame_new("Colormap"); + + box = gtk_hbox_new(FALSE, 0); + + combo = gtk_combo_new(); +// gtk_entry_set_text (GTK_ENTRY(GTK_COMBO(combo)->entry), "Aap"); + + glist = g_list_append(glist, "String 1"); + glist = g_list_append(glist, "String 2"); + glist = g_list_append(glist, "String 3"); + glist = g_list_append(glist, "String 4"); + +// free(glist); + gtk_combo_set_popdown_strings (GTK_COMBO (combo), glist); + + gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0); + gtk_widget_show(combo); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start(GTK_BOX(page), frame, FALSE, TRUE, 0); + + gtk_widget_show(frame); + + + return page; +} + +/* + * Draw glyph notebook page + */ +GtkWidget *create_glyph_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + GtkWidget *frame; + GtkWidget *box; + GtkWidget *button; + GSList *dataset_group; + + page = gtk_vbox_new(FALSE, 0); + + frame = gtk_frame_new("Scalarset"); + + box = gtk_hbox_new(FALSE, 0); + + button = gtk_radio_button_new_with_label (NULL, "Rho"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_RHO); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); + + button = gtk_radio_button_new_with_label(dataset_group, "Velocity"); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_VEL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_FORCE); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + frame = gtk_frame_new("Vectorset"); + + box = gtk_hbox_new(FALSE, 0); + + button = gtk_radio_button_new_with_label(NULL, "Velocity"); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_VEL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); + + button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_FORCE); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + return page; +} + +/* + * Draw divergence notebook page + */ +GtkWidget *create_divergence_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + + page = gtk_vbox_new(FALSE, 0); + + return page; +} + +/* + * Draw isolines notebook page + */ +GtkWidget *create_isolines_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + + page = gtk_vbox_new(FALSE, 0); + + return page; +} +/* + * Draw height plots notebook page + */ +GtkWidget *create_height_plots_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + + page = gtk_vbox_new(FALSE, 0); + + return page; +} + /*** *** Creates the simple application window with one *** drawing area that has an OpenGL-capable visual. @@ -625,6 +820,7 @@ create_window (GdkGLConfig *glconfig) GtkWidget *drawing_area; GtkWidget *menu; GtkWidget *button; + GtkWidget *settings_notebook, *notebook_page, *notebook_page_label; /* * Top-level window. @@ -638,7 +834,7 @@ create_window (GdkGLConfig *glconfig) /* Connect signal handlers to the window */ g_signal_connect (G_OBJECT (window), "delete_event", - G_CALLBACK (gtk_main_quit), NULL); + G_CALLBACK (gtk_main_quit), NULL); /* * hBox. @@ -657,43 +853,43 @@ create_window (GdkGLConfig *glconfig) /* Set OpenGL-capability to the widget */ gtk_widget_set_gl_capability (drawing_area, - glconfig, - NULL, - TRUE, - GDK_GL_RGBA_TYPE); + glconfig, + NULL, + TRUE, + GDK_GL_RGBA_TYPE); gtk_widget_add_events (drawing_area, - GDK_BUTTON1_MOTION_MASK | - GDK_BUTTON2_MOTION_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_VISIBILITY_NOTIFY_MASK); + GDK_BUTTON1_MOTION_MASK | + GDK_BUTTON2_MOTION_MASK | + GDK_BUTTON_PRESS_MASK | + GDK_VISIBILITY_NOTIFY_MASK); /* Connect signal handlers to the drawing area */ g_signal_connect_after (G_OBJECT (drawing_area), "realize", G_CALLBACK (realize), NULL); g_signal_connect (G_OBJECT (drawing_area), "configure_event", - G_CALLBACK (configure_event), NULL); + G_CALLBACK (configure_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "expose_event", - G_CALLBACK (expose_event), NULL); + G_CALLBACK (expose_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "unrealize", - G_CALLBACK (unrealize), NULL); + G_CALLBACK (unrealize), NULL); g_signal_connect (G_OBJECT (drawing_area), "motion_notify_event", - G_CALLBACK (motion_notify_event), NULL); + G_CALLBACK (motion_notify_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "button_press_event", - G_CALLBACK (button_press_event), NULL); + G_CALLBACK (button_press_event), NULL); /* key_press_event handler for top-level window */ g_signal_connect_swapped (G_OBJECT (window), "key_press_event", - G_CALLBACK (key_press_event), drawing_area); + G_CALLBACK (key_press_event), drawing_area); /* For timeout function. */ g_signal_connect (G_OBJECT (drawing_area), "map_event", - G_CALLBACK (map_event), NULL); + G_CALLBACK (map_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "unmap_event", - G_CALLBACK (unmap_event), NULL); + G_CALLBACK (unmap_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "visibility_notify_event", - G_CALLBACK (visibility_notify_event), NULL); + G_CALLBACK (visibility_notify_event), NULL); gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0); @@ -706,8 +902,9 @@ create_window (GdkGLConfig *glconfig) menu = create_popup_menu (drawing_area); g_signal_connect_swapped (G_OBJECT (drawing_area), "button_press_event", - G_CALLBACK (button_press_event_popup_menu), menu); + G_CALLBACK (button_press_event_popup_menu), menu); +#if 0 /* * Simple quit button. */ @@ -720,6 +917,89 @@ create_window (GdkGLConfig *glconfig) gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_widget_show (button); +#endif + + /* + * Settings button. + */ + + button = gtk_button_new_with_label("<<"); + + g_signal_connect(G_OBJECT(button), "clicked", + G_CALLBACK (show_settings), settings_notebook); + + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + + gtk_widget_show(button); + + + /* + * Draw the options notebook + */ + + settings_notebook = gtk_notebook_new(); + + gtk_notebook_set_tab_pos(settings_notebook, GTK_POS_BOTTOM); + gtk_notebook_set_scrollable(settings_notebook, TRUE); + + gtk_box_pack_start(GTK_BOX(hbox), settings_notebook, FALSE, FALSE, 0); + + gtk_widget_show(settings_notebook); + + notebook_page_label = gtk_label_new("Main"); + gtk_widget_show(notebook_page_label); + + notebook_page = create_main_page(); + gtk_container_add(GTK_CONTAINER(window), notebook_page); + gtk_widget_show(notebook_page); + + gtk_notebook_append_page(settings_notebook, notebook_page, notebook_page_label); + + notebook_page_label = gtk_label_new("Colormaps"); + gtk_widget_show(notebook_page_label); + + notebook_page = create_colormap_page(); + gtk_container_add(GTK_CONTAINER(window), notebook_page); + gtk_widget_show(notebook_page); + + gtk_notebook_append_page(settings_notebook, notebook_page, notebook_page_label); + + notebook_page_label = gtk_label_new("Glyphs"); + gtk_widget_show(notebook_page_label); + + notebook_page = create_glyph_page(); + gtk_container_add(GTK_CONTAINER(window), notebook_page); + gtk_widget_show(notebook_page); + + gtk_notebook_append_page(settings_notebook, notebook_page, notebook_page_label); + + notebook_page_label = gtk_label_new("Divergence"); + gtk_widget_show(notebook_page_label); + + notebook_page = create_divergence_page(); + gtk_container_add(GTK_CONTAINER(window), notebook_page); + gtk_widget_show(notebook_page); + + gtk_notebook_append_page(settings_notebook, notebook_page, notebook_page_label); + + notebook_page_label = gtk_label_new("Isolines"); + gtk_widget_show(notebook_page_label); + + notebook_page = create_isolines_page(); + gtk_container_add(GTK_CONTAINER(window), notebook_page); + gtk_widget_show(notebook_page); + + gtk_notebook_append_page(settings_notebook, notebook_page, notebook_page_label); + + notebook_page_label = gtk_label_new("Height plots"); + gtk_widget_show(notebook_page_label); + + notebook_page = create_height_plots_page(); + gtk_container_add(GTK_CONTAINER(window), notebook_page); + gtk_widget_show(notebook_page); + + gtk_notebook_append_page(settings_notebook, notebook_page, notebook_page_label); + return window; } @@ -739,8 +1019,8 @@ configure_gl (void) /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | - GDK_GL_MODE_DEPTH | - GDK_GL_MODE_DOUBLE); + GDK_GL_MODE_DEPTH | + GDK_GL_MODE_DOUBLE); if (glconfig == NULL) { g_print ("\n*** Cannot find the double-buffered visual.\n"); @@ -748,12 +1028,12 @@ configure_gl (void) /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | - GDK_GL_MODE_DEPTH); + GDK_GL_MODE_DEPTH); if (glconfig == NULL) - { - g_print ("*** No appropriate OpenGL-capable visual found.\n"); - exit (1); - } + { + g_print ("*** No appropriate OpenGL-capable visual found.\n"); + exit (1); + } } return glconfig; |