MODULE styling ; (* m2-GTK4 example - CSS styling. Loads a stylesheet from a string and installs it for the display, then toggles a CSS class on a label. Build: make examples Run: ./build/examples/styling *) FROM Gio IMPORT g_application_run; FROM GtkApplication IMPORT gtk_application_new; FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title, gtk_window_set_default_size, gtk_window_set_child, gtk_window_present; FROM GtkBox IMPORT gtk_box_new, gtk_box_append, gtk_box_set_spacing; FROM GtkEnums IMPORT GtkVertical; FROM GtkLabel IMPORT gtk_label_new; FROM GtkButton IMPORT gtk_button_new_with_label; FROM GtkWidget IMPORT gtk_widget_add_css_class, gtk_widget_remove_css_class, gtk_widget_set_margin_top, gtk_widget_set_margin_bottom, gtk_widget_set_margin_start, gtk_widget_set_margin_end; FROM GtkCssProvider IMPORT gtk_css_provider_new, gtk_css_provider_load_from_string; FROM GtkStyleContext IMPORT gtk_style_context_add_provider_for_display, GtkStyleProviderPriorityApplication; FROM Gdk IMPORT gdk_display_get_default; FROM GtkClosures IMPORT Connect2; FROM SYSTEM IMPORT ADDRESS; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.Styling"; Css = ".m2accent { color: #e01b24; font-weight: bold; }"; VAR label: ADDRESS; accented: BOOLEAN; PROCEDURE OnToggle (button: ADDRESS; user: ADDRESS); BEGIN IF accented THEN gtk_widget_remove_css_class(label, "m2accent"); accented := FALSE ELSE gtk_widget_add_css_class(label, "m2accent"); accented := TRUE END END OnToggle; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR window, box, provider, toggle: ADDRESS; BEGIN provider := gtk_css_provider_new(); gtk_css_provider_load_from_string(provider, Css); gtk_style_context_add_provider_for_display(gdk_display_get_default(), provider, GtkStyleProviderPriorityApplication); label := gtk_label_new("Styled label"); accented := FALSE; toggle := gtk_button_new_with_label("Toggle accent"); Connect2(toggle, "clicked", OnToggle, NIL); box := gtk_box_new(GtkVertical, 12); gtk_box_set_spacing(box, 12); gtk_widget_set_margin_top(box, 14); gtk_widget_set_margin_bottom(box, 14); gtk_widget_set_margin_start(box, 14); gtk_widget_set_margin_end(box, 14); gtk_box_append(box, label); gtk_box_append(box, toggle); window := gtk_application_window_new(application); gtk_window_set_title(window, "m2-GTK4 Styling"); gtk_window_set_default_size(window, 360, 160); gtk_window_set_child(window, box); gtk_window_present(window) END OnActivate; VAR app: ADDRESS; BEGIN app := gtk_application_new(AppId, 0); IF app = NIL THEN printf("gtk_application_new failed\n"); HALT(1) END; Connect2(app, "activate", OnActivate, NIL); g_application_run(app, 0, NIL) END styling.