static gboolean locate_pointer_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data) { CsdLocatePointerData *data = (CsdLocatePointerData *) user_data; if (gtk_cairo_should_draw_window (cr, data->window)) locate_pointer_paint (data, cr, gtk_widget_is_composited (data->widget)); return TRUE; }
static void update_shape (GsdLocatePointerData *data) { cairo_t *cr; GdkBitmap *mask; mask = gdk_pixmap_new (data->window, WINDOW_SIZE, WINDOW_SIZE, 1); cr = gdk_cairo_create (mask); locate_pointer_paint (data, cr, FALSE); gdk_window_shape_combine_mask (data->window, mask, 0, 0); g_object_unref (mask); cairo_destroy (cr); }
static gboolean locate_pointer_expose (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GsdLocatePointerData *data = (GsdLocatePointerData *) user_data; cairo_t *cr; if (event->window != data->window) return FALSE; cr = gdk_cairo_create (data->window); locate_pointer_paint (data, cr, gtk_widget_is_composited (data->widget)); cairo_destroy (cr); return TRUE; }
static void update_shape (CsdLocatePointerData *data) { cairo_t *cr; cairo_region_t *region; cairo_surface_t *mask; mask = cairo_image_surface_create (CAIRO_FORMAT_A1, WINDOW_SIZE, WINDOW_SIZE); cr = cairo_create (mask); locate_pointer_paint (data, cr, FALSE); region = gdk_cairo_region_create_from_surface (mask); gdk_window_shape_combine_region (data->window, region, 0, 0); cairo_region_destroy (region); cairo_destroy (cr); cairo_surface_destroy (mask); }