From e889ec3ccb2f45738a692c39986eaedbf85613d1 Mon Sep 17 00:00:00 2001 From: Niv Sardi Date: Fri, 8 Dec 2006 01:10:01 +0100 Subject: Initial import --- cairo-test.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 cairo-test.c (limited to 'cairo-test.c') 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; +} + + + + -- cgit v1.2.3