Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I changed the <a href="http://plan99.net/~mike/files/alphademo.c" rel="noreferrer">alphademo</a> example to draw a button instead of the red circle.</p> <p>This application draws the button on a 400x400 transparent window. </p> <p>When you click on the window the application shows/hides the title bar.</p> <pre><code>#include &lt;gtk/gtk.h&gt; #include &lt;gdk/gdkscreen.h&gt; #include &lt;cairo.h&gt; static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer user_data); static gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data); static void clicked(GtkWindow *win, GdkEventButton *event, gpointer user_data); int main(int argc, char **argv) { gtk_init(&amp;argc, &amp;argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 400, 400); gtk_window_set_title(GTK_WINDOW(window), "Alpha Demo"); g_signal_connect(G_OBJECT(window), "delete-event", gtk_main_quit, NULL); gtk_widget_set_app_paintable(window, TRUE); g_signal_connect(G_OBJECT(window), "expose-event", G_CALLBACK(expose), NULL); g_signal_connect(G_OBJECT(window), "screen-changed", G_CALLBACK(screen_changed), NULL); gtk_window_set_decorated(GTK_WINDOW(window), FALSE); gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(clicked), NULL); GtkWidget* fixed_container = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window), fixed_container); GtkWidget* button = gtk_button_new_with_label("button1"); gtk_widget_set_size_request(button, 100, 100); gtk_container_add(GTK_CONTAINER(fixed_container), button); screen_changed(window, NULL, NULL); gtk_widget_show_all(window); gtk_main(); return 0; } gboolean supports_alpha = FALSE; static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer userdata) { /* To check if the display supports alpha channels, get the colormap */ GdkScreen *screen = gtk_widget_get_screen(widget); GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen); if (!colormap) { printf("Your screen does not support alpha channels!\n"); colormap = gdk_screen_get_rgb_colormap(screen); supports_alpha = FALSE; } else { printf("Your screen supports alpha channels!\n"); supports_alpha = TRUE; } gtk_widget_set_colormap(widget, colormap); } static gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer userdata) { cairo_t *cr = gdk_cairo_create(widget-&gt;window); if (supports_alpha) cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); /* transparent */ else cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* opaque white */ /* draw the background */ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); cairo_paint (cr); cairo_destroy(cr); return FALSE; } static void clicked(GtkWindow *win, GdkEventButton *event, gpointer user_data) { /* toggle window manager frames */ gtk_window_set_decorated(win, !gtk_window_get_decorated(win)); } </code></pre> <p>Compiled on Ubuntu 10.04:</p> <pre><code>gcc alpha.c -o alpha -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -lgtk-x11-2.0 </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload