aboutsummaryrefslogtreecommitdiff
path: root/gstopwatch.c
blob: fd9a3f4795d15a26176b9171b30041c008d8813a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <glib.h>


gboolean running;
GTimer *timer;
GtkWidget *timer_display;

gboolean update_progress_bar (void) {
	char output[100];
	gulong gulong;
	gdouble time_elapsed;

	time_elapsed = g_timer_elapsed (timer, &gulong);
	sprintf(output, "%.2f", time_elapsed);

	gtk_label_set_text(GTK_LABEL(timer_display), output);
	return TRUE;
}

gboolean keypress (GtkWidget *widget, GdkEventKey *event) {
	guint(g) = event->keyval;

	if((g == GDK_KEY_space)) {
		if(running == FALSE) {
			g_timer_start(timer);
			running = TRUE;
			return TRUE;
		} else {
			g_timer_stop(timer);
			running = FALSE;
			return TRUE;
		}
	}
	return FALSE;
}

int main (int argc, char *argv[]) {
	GtkWidget *window, *box;

	gtk_init(&argc, &argv);

	timer_display = gtk_label_new("");

	box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
	gtk_box_pack_start(GTK_BOX (box), timer_display, TRUE, TRUE, 5);

	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_container_add(GTK_CONTAINER (window), box);
	gtk_widget_show_all(window);

	timer = g_timer_new();
	g_timer_stop(timer);

	g_timeout_add_full(G_PRIORITY_HIGH, 50, (GSourceFunc) update_progress_bar, NULL, NULL);
	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
	g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(keypress), window);

	gtk_main();
	g_timer_destroy(timer);
}