add ui_add_styledata function (GTK)

13 days ago

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 07 Mar 2025 21:46:52 +0100 (13 days ago)
changeset 491
beb5963c3501
parent 490
0206161e92d5
child 492
f74d46ffaca1

add ui_add_styledata function (GTK)

ui/gtk/toolkit.c file | annotate | diff | comparison | revisions
ui/ui/toolkit.h file | annotate | diff | comparison | revisions
--- a/ui/gtk/toolkit.c	Thu Mar 06 20:19:49 2025 +0100
+++ b/ui/gtk/toolkit.c	Fri Mar 07 21:46:52 2025 +0100
@@ -327,8 +327,6 @@
 
 #if GTK_MAJOR_VERSION >= 3
 
-static GtkCssProvider* ui_gtk_css_provider;
-
 #if GTK_MAJOR_VERSION == 4
 static const char *ui_gtk_css = 
 "#path-textfield-box {\n"
@@ -415,15 +413,19 @@
 #endif
 
 void ui_css_init(void) {
-    ui_gtk_css_provider = gtk_css_provider_new();
+    ui_add_styledata(ui_gtk_css, -1);
+}
+
+void ui_add_styledata(const char *styledata, int len) {
+    GtkCssProvider *css = gtk_css_provider_new();
     
 #ifdef UI_GTK3
-    gtk_css_provider_load_from_data(ui_gtk_css_provider, ui_gtk_css, -1, NULL);
+    gtk_css_provider_load_from_data(css, styledata, len, NULL);
     
     GdkScreen *screen = gdk_screen_get_default();
     gtk_style_context_add_provider_for_screen(
             screen,
-            GTK_STYLE_PROVIDER(ui_gtk_css_provider),
+            GTK_STYLE_PROVIDER(css),
             GTK_STYLE_PROVIDER_PRIORITY_USER);
 #endif /* UI_GTK3 */
     
@@ -431,13 +433,20 @@
     
     
 #if GTK_MINOR_VERSION < 12
-    gtk_css_provider_load_from_data(ui_gtk_css_provider, ui_gtk_css, -1);
+    gtk_css_provider_load_from_data(css, styledata, len);
 #else
-    gtk_css_provider_load_from_string(ui_gtk_css_provider, ui_gtk_css);
+    if(len < 0) {
+        gtk_css_provider_load_from_string(css, ui_gtk_css);
+    } else {
+        GBytes *style_data = g_bytes_new(styledata, len);
+        gtk_css_provider_load_from_bytes(css, style_data);
+        g_bytes_unref(style_data);
+        
+    }
 #endif /* GTK_MINOR_VERSION < 12 */
     
     GdkDisplay *display = gdk_display_get_default();
-    gtk_style_context_add_provider_for_display(display, GTK_STYLE_PROVIDER(ui_gtk_css_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+    gtk_style_context_add_provider_for_display(display, GTK_STYLE_PROVIDER(css), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
     
 #endif /* UI_GTK4 */
 }
--- a/ui/ui/toolkit.h	Thu Mar 06 20:19:49 2025 +0100
+++ b/ui/ui/toolkit.h	Fri Mar 07 21:46:52 2025 +0100
@@ -447,6 +447,8 @@
 UIEXPORT void ui_init(const char *appname, int argc, char **argv);
 UIEXPORT const char* ui_appname();
 
+UIEXPORT void ui_add_styledata(const char *styledata, int len);
+
 UIEXPORT UiContext* ui_global_context(void);
 
 UIEXPORT void ui_context_closefunc(UiContext *ctx, ui_callback fnc, void *udata);

mercurial