summaryrefslogtreecommitdiff
path: root/cairo-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'cairo-test.c')
-rw-r--r--cairo-test.c144
1 files changed, 144 insertions, 0 deletions
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 <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+#include <cairo.h>
+#include <math.h>
+
+#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;
+}
+
+
+
+