From e889ec3ccb2f45738a692c39986eaedbf85613d1 Mon Sep 17 00:00:00 2001 From: Niv Sardi Date: Fri, 8 Dec 2006 01:10:01 +0100 Subject: Initial import --- Makefile | 13 +++++ cairo-test | Bin 0 -> 19956 bytes cairo-test.c | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ von-wait | Bin 0 -> 20505 bytes von-wait.c | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ von.ogg | Bin 0 -> 270735 bytes 6 files changed, 308 insertions(+) create mode 100644 Makefile create mode 100755 cairo-test create mode 100644 cairo-test.c create mode 100755 von-wait create mode 100644 von-wait.c create mode 100644 von.ogg diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4236499 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +APPS = \ + cairo-test \ + von-wait + +CFLAGS = -g -Wall + +CFLAGS += `pkg-config gtk+-2.0 --cflags` +LDFLAGS += `pkg-config gtk+-2.0 --libs` + +all: $(APPS) + +clean: + $(RM): $(APPS) diff --git a/cairo-test b/cairo-test new file mode 100755 index 0000000..14c7555 Binary files /dev/null and b/cairo-test differ diff --git a/cairo-test.c b/cairo-test.c new file mode 100644 index 0000000..f5b2272 --- /dev/null +++ b/cairo-test.c @@ -0,0 +1,144 @@ +#include +#include +#include +#include + +#define SECOND_INTERVAL 1000 + +#define DEFAULT_WIDTH 200 +#define DEFAULT_HEIGHT 100 + + +gboolean on_key_press (GtkWidget *widget, GdkEventKey *key, gpointer p) { + if (key->type == GDK_KEY_PRESS) + { + switch (key->keyval) + { + case GDK_Escape : + gtk_main_quit (); + break; + } + } + + return FALSE; +} + +static void paint (GtkWidget *widget, GdkEventExpose *eev, gpointer p) { + gint width, height, cache; + cairo_t *cr; + gint i; + gchar d[2] = {'0','\0'}; + gfloat colors[6][3] = {{0.0f, 0.0f, 1.0f}, + {0.0f, 1.0f, 0.0f}, + {1.0f, 0.0f, 0.0f}, + {1.0f, 1.0f, 0.0f}, + {1.0f, 0.0f, 1.0f}, + {0.0f, 1.0f, 1.1f}}; + + width = widget->allocation.width; + height = widget->allocation.height; + + cr = gdk_cairo_create (widget->window); + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + + cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 0.4f); + + cairo_paint (cr); + + cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_BOLD); + + for (i = 0; i < 6; i++) { + cairo_save (cr); + cairo_set_font_size (cr, 10); + cairo_set_source_rgba (cr, colors[i][0], + colors[i][1], + colors[i][2], + 1.0f); + cairo_move_to (cr, 10*i, 10); + d[0] = '0' + i; + cairo_show_text (cr, d); + cairo_restore (cr); + } + + + cairo_save (cr); + cairo_set_source_rgba (cr, 1.0f, 1.0f, 0.0f, 1.0f); + cairo_move_to (cr, 10, 20); + cairo_translate (cr, width/2, height/2); + + + for ( i = 0; i < 4; i++ ) { + cairo_translate (cr, -width/2, -height/2); + + cairo_curve_to (cr, 10, 20, 10, 10, 20, 10); + cairo_line_to (cr, width - 20, 10); + + cairo_translate (cr, width/2, height/2); + cairo_rotate (cr, M_PI/2.0); + cache = width; width = height; height = cache; + } + + cairo_fill_preserve (cr); + cairo_set_source_rgba (cr, 0.0f, 1.0f, 0.0f, 0.4f); + cairo_stroke (cr); + cairo_restore (cr); + + cairo_destroy (cr); +} + +static void install_colormap (GtkWidget *w) { + GdkScreen* screen = gtk_widget_get_screen (w); + GdkColormap* colormap = gdk_screen_get_rgba_colormap (screen); + + if (!colormap) + colormap = gdk_screen_get_rgb_colormap (screen); + + gtk_widget_set_colormap (w, colormap); +} + +gint main (gint argc, gchar **argv) { + GtkWidget *window; + + gtk_init(&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + gtk_window_stick (GTK_WINDOW (window)); + // gtk_window_set_keep_below (GTK_WINDOW (window), TRUE); + + gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE); + gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE); + // gtk_window_set_accept_focus (GTK_WINDOW (window), FALSE); + + gtk_window_set_decorated (GTK_WINDOW (window), TRUE); + gtk_window_set_resizable (GTK_WINDOW (window), TRUE); + gtk_widget_set_app_paintable (window, TRUE); + + gtk_window_set_default_size (GTK_WINDOW (window), + DEFAULT_WIDTH, + DEFAULT_HEIGHT); + + install_colormap(window); + + gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK); + + g_signal_connect (G_OBJECT (window), "expose-event", + G_CALLBACK (paint), + NULL); + + g_signal_connect (G_OBJECT (window), + "key-press-event", + G_CALLBACK (on_key_press), + NULL); + + gtk_widget_show_all (window); + + gtk_main (); + + return 0; +} + + + + diff --git a/von-wait b/von-wait new file mode 100755 index 0000000..df10d7a Binary files /dev/null and b/von-wait differ diff --git a/von-wait.c b/von-wait.c new file mode 100644 index 0000000..ba2ceab --- /dev/null +++ b/von-wait.c @@ -0,0 +1,151 @@ +#include +#include +#include +#include +#include +#include + +#define SECOND_INTERVAL 1000 + +#define DEFAULT_WIDTH 200 +#define DEFAULT_HEIGHT 15 + +struct private { + time_t time; + time_t von_arrives; + struct tm *tm; +}; + +static gboolean time_handler (GtkWidget* w) +{ + gtk_widget_queue_draw (w); + return TRUE; +} + +gboolean on_key_press (GtkWidget *widget, GdkEventKey *key, gpointer p) { + if (key->type == GDK_KEY_PRESS) + { + switch (key->keyval) + { + case GDK_Escape : + gtk_main_quit (); + break; + } + } + + return FALSE; +} + +static void paint (GtkWidget *widget, GdkEventExpose *eev, struct private *p) { + gint width, height; + cairo_t *cr; + gchar *gc_time; + + + gint sec, min, hour, day; + + p->time = p->von_arrives - time(NULL); + p->tm = localtime (&p->time); + + day = p->time / (3600*24); + p->time -= day*(3600*24); + + hour = p->time / 3600; + p->time -= hour*3600; + + min = p->time/60; + p->time -= min*60; + + sec = p->time; + + gc_time = g_strdup_printf("Von arrives in %02dd %02dh %02dm %02ds", day, hour, min, sec); + + width = widget->allocation.width; + height = widget->allocation.height; + + cr = gdk_cairo_create (widget->window); + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + + + cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 0.4f); + cairo_paint (cr); + + cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_BOLD); + + cairo_save (cr); + cairo_set_font_size (cr, 10); + cairo_move_to (cr, 10, 10); + cairo_set_source_rgba (cr, 0.0f, 0.0f, 0.0f, 1.0f); + cairo_show_text (cr, gc_time); + cairo_restore (cr); + + cairo_destroy (cr); +} + +static void install_colormap (GtkWidget *w) { + GdkScreen* screen = gtk_widget_get_screen (w); + GdkColormap* colormap = gdk_screen_get_rgba_colormap (screen); + + if (!colormap) + colormap = gdk_screen_get_rgb_colormap (screen); + + gtk_widget_set_colormap (w, colormap); +} + +gint main (gint argc, gchar **argv) { + GtkWidget *window; + + struct private *p = malloc(sizeof(struct private)); + struct tm von_time = { + .tm_min = 40, + .tm_hour = 9, + .tm_mday = 14, + .tm_mon = 1, + .tm_year = 107, + }; + + p->von_arrives = mktime(&von_time); + + gtk_init(&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + gtk_window_stick (GTK_WINDOW (window)); + gtk_window_set_keep_below (GTK_WINDOW (window), TRUE); + + gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE); + gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE); + gtk_window_set_accept_focus (GTK_WINDOW (window), FALSE); + + gtk_window_set_decorated (GTK_WINDOW (window), FALSE); + gtk_window_set_resizable (GTK_WINDOW (window), TRUE); + gtk_widget_set_app_paintable (window, TRUE); + + gtk_window_set_default_size (GTK_WINDOW (window), + DEFAULT_WIDTH, + DEFAULT_HEIGHT); + + install_colormap(window); + + gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK); + + g_signal_connect (G_OBJECT (window), "expose-event", + G_CALLBACK (paint), + p); + + g_signal_connect (G_OBJECT (window), + "key-press-event", + G_CALLBACK (on_key_press), + NULL); + + gtk_widget_show_all (window); + + gtk_timeout_add (SECOND_INTERVAL, (GtkFunction) time_handler, window); + + gtk_main (); + + return 0; +} + + diff --git a/von.ogg b/von.ogg new file mode 100644 index 0000000..e5d419e Binary files /dev/null and b/von.ogg differ -- cgit v1.2.3