diff options
-rw-r--r-- | gtk-overlay-client.c | 35 | ||||
-rw-r--r-- | overlay.css | 9 |
2 files changed, 43 insertions, 1 deletions
diff --git a/gtk-overlay-client.c b/gtk-overlay-client.c index 2ccac84..68d3cae 100644 --- a/gtk-overlay-client.c +++ b/gtk-overlay-client.c @@ -24,6 +24,7 @@ #include <stdlib.h> #include <stddef.h> #include <string.h> +#include <fcntl.h> #include <wayland-client.h> #include <gtk/gtk.h> @@ -58,6 +59,30 @@ dismiss(GtkWidget *widget, gpointer data) } static void +apply_css (GtkWidget *widget, GtkStyleProvider *provider) +{ + gtk_style_context_add_provider(gtk_widget_get_style_context(widget), + provider, G_MAXUINT); + if (GTK_IS_CONTAINER(widget)) + gtk_container_forall(GTK_CONTAINER(widget), + (GtkCallback) apply_css, provider); +} + +static char * +load_css(const char *filename) +{ + int fd, len; + static char buffer[4096]; + + fd = open(filename, O_RDONLY); + len = read(fd, buffer, sizeof buffer - 1); + buffer[len] = '\0'; + close(fd); + + return buffer; +} + +static void widget_realize_cb (GtkWidget *widget, void *data) { GdkWindow *window; @@ -78,6 +103,8 @@ overlay_activate(void *data, struct overlay *overlay) { struct overlay_client *client = data; GtkWidget *vbox, *label, *bbox, *button; + GtkStyleProvider *provider; + char *css; if (client->window) { printf("overlay already active\n"); @@ -89,7 +116,7 @@ overlay_activate(void *data, struct overlay *overlay) client->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(client->window), "Hello"); gtk_window_set_decorated(GTK_WINDOW(client->window), FALSE); - gtk_window_set_default_size(GTK_WINDOW(client->window), 400, 200); + gtk_window_set_default_size(GTK_WINDOW(client->window), 600, 300); g_signal_connect (client->window, "realize", G_CALLBACK (widget_realize_cb), client); @@ -115,6 +142,12 @@ overlay_activate(void *data, struct overlay *overlay) g_signal_connect(button, "clicked", G_CALLBACK(dismiss), client); gtk_container_add(GTK_CONTAINER(bbox), button); + provider = GTK_STYLE_PROVIDER(gtk_css_provider_new ()); + css = load_css("overlay.css"); + gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(provider), + css, -1, NULL); + apply_css(client->window, provider); + gtk_widget_show_all(client->window); } diff --git a/overlay.css b/overlay.css new file mode 100644 index 0000000..ff7b33a --- /dev/null +++ b/overlay.css @@ -0,0 +1,9 @@ +.background { + background-color: alpha(#4870bc, 0.6); +} + + + +GtkLabel { color: white; font-size: 14pt; } + +GtkButton GtkLabel { color: black; font-size: 12pt; }
\ No newline at end of file |