gboolean on_configure (GtkWidget* pWidget, GdkEventConfigure* pEvent, gpointer userData) { gint iNewWidth = pEvent->width; gint iNewHeight = pEvent->height; if (iNewWidth != g_iCurrentWidth || iNewHeight != g_iCurrentHeight) { update_input_shape (pWidget, iNewWidth, iNewHeight); g_iCurrentWidth = iNewWidth; g_iCurrentHeight = iNewHeight; } return FALSE; }
int main (int argc, char** argv) { GtkWidget* pWindow = NULL; GdkBitmap* pShapeMaskBitmap = NULL; gtk_init (&argc, &argv); pWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); on_alpha_screen_changed (pWindow, NULL, NULL); gtk_widget_set_app_paintable (pWindow, TRUE); gtk_window_set_decorated (GTK_WINDOW (pWindow), FALSE); gtk_window_set_resizable (GTK_WINDOW (pWindow), TRUE); gtk_window_set_title (GTK_WINDOW (pWindow), "gtk+/XShape 1.1 test"); gtk_widget_set_size_request (pWindow, g_iCurrentWidth, g_iCurrentHeight); gtk_widget_add_events (pWindow, GDK_BUTTON_PRESS_MASK); gtk_widget_show (pWindow); g_signal_connect (G_OBJECT (pWindow), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (G_OBJECT (pWindow), "expose-event", G_CALLBACK (on_expose), NULL); g_signal_connect (G_OBJECT (pWindow), "configure-event", G_CALLBACK (on_configure), NULL); g_signal_connect (G_OBJECT (pWindow), "key-press-event", G_CALLBACK (on_key_press), NULL); g_signal_connect (G_OBJECT (pWindow), "button-press-event", G_CALLBACK (on_button_press), NULL); update_input_shape (pWindow, g_iCurrentWidth, g_iCurrentHeight); gtk_main (); return 0; }
int main (int argc, char** argv) { GtkWidget* window; guint pointer_update_id; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); if (!window) return 0; gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DOCK); gtk_widget_add_events (window, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); // hook up input/event handlers to window g_signal_connect (G_OBJECT (window), "screen-changed", G_CALLBACK (screen_changed_handler), NULL); g_signal_connect (G_OBJECT (window), "composited-changed", G_CALLBACK (composited_changed_handler), NULL); gtk_window_move (GTK_WINDOW (window), POS_X, POS_Y); // make sure the window opens with a RGBA-visual screen_changed_handler (window, NULL, NULL); gtk_widget_realize (window); gdk_window_set_back_pixmap (gtk_widget_get_window (window), NULL, FALSE); // hook up window-event handlers to window g_signal_connect (G_OBJECT (window), "expose-event", G_CALLBACK (expose_handler), NULL); // FIXME: read out current mouse-pointer position every 1/25 second pointer_update_id = g_timeout_add (1000/40, (GSourceFunc) pointer_update, (gpointer) window); g_timeout_add (10000, (GSourceFunc) quit, NULL); g_timeout_add (1000/40, (GSourceFunc) grow, (gpointer) window); // "clear" input-mask, set title/icon/attributes gtk_widget_set_app_paintable (window, TRUE); gtk_window_set_decorated (GTK_WINDOW (window), FALSE); gtk_window_set_keep_above (GTK_WINDOW (window), TRUE); gtk_window_set_resizable (GTK_WINDOW (window), FALSE); gtk_window_set_accept_focus (GTK_WINDOW (window), FALSE); gtk_window_set_opacity (GTK_WINDOW (window), 1.0f); gtk_widget_set_size_request (window, (gint) (BUBBLE_WIDTH + 2.0f * BUBBLE_SHADOW_SIZE), (gint) (BUBBLE_HEIGHT + 2.0f * BUBBLE_SHADOW_SIZE)); gtk_widget_show (window); g_composited = gdk_screen_is_composited(gtk_widget_get_screen (window)); update_input_shape (window, 1, 1); update_shape (window, (gint) CORNER_RADIUS, (gint) BUBBLE_SHADOW_SIZE); set_bg_blur (window, TRUE); setup_tile ((gint) (BUBBLE_WIDTH + 2.0f * BUBBLE_SHADOW_SIZE), (gint) (BUBBLE_HEIGHT + 2.0f * BUBBLE_SHADOW_SIZE)); g_print ("This test will run for 10 seconds and then quit.\n"); gtk_main (); tile_destroy (g_tile); return 0; }