#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; }