From 7b56c74ba4a2053a0c661d0505a070e77a7d1cf6 Mon Sep 17 00:00:00 2001 From: Jon Ringle Date: Fri, 27 Oct 2023 09:30:05 -0400 Subject: [PATCH] cairo-gtk: Allow opacity & layer (above/below) to be set in viewport config For example, this can be used to set the window to be transparent and always on top: config :hello_scenic_full, :viewport, name: :main_viewport, size: {800, 600}, theme: :dark, default_scene: HelloScenicFull.Scene.Primitives, drivers: [ [ module: Scenic.Driver.Local, name: :local, window: [resizeable: false, title: "hello_scenic_full"], on_close: :stop_system, opacity: 160, layer: 1 ] ] --- c_src/device/cairo/cairo_gtk.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/c_src/device/cairo/cairo_gtk.c b/c_src/device/cairo/cairo_gtk.c index 49e7cd1..c9cf929 100644 --- a/c_src/device/cairo/cairo_gtk.c +++ b/c_src/device/cairo/cairo_gtk.c @@ -279,5 +279,16 @@ void device_loop(driver_data_t* p_data) g_set_printerr_handler(glib_error); gtk_widget_show_all((GtkWidget*)g_cairo_gtk.window); + + gtk_widget_set_opacity(GTK_WIDGET(g_cairo_gtk.window), (g_opts.global_opacity / 255.0f)); + + if (g_opts.layer > 0) { + gtk_window_set_keep_above(GTK_WINDOW(g_cairo_gtk.window), TRUE); + } + + if (g_opts.layer < 0) { + gtk_window_set_keep_below(GTK_WINDOW(g_cairo_gtk.window), TRUE); + } + gtk_main(); }