| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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.
|