test_css.mod 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. MODULE test_css ;
  2. (*
  3. m2-GTK4 test - CSS styling: GtkCssProvider + provider-for-display +
  4. per-widget CSS classes. Requires a display.
  5. *)
  6. FROM Gio IMPORT g_application_run, g_application_quit;
  7. FROM GtkApplication IMPORT gtk_application_new;
  8. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child;
  9. FROM GtkWidget IMPORT gtk_widget_add_css_class, gtk_widget_remove_css_class,
  10. gtk_widget_has_css_class;
  11. FROM GtkLabel IMPORT gtk_label_new;
  12. FROM GtkCssProvider IMPORT gtk_css_provider_new,
  13. gtk_css_provider_load_from_string;
  14. FROM GtkStyleContext IMPORT gtk_style_context_add_provider_for_display,
  15. gtk_style_context_remove_provider_for_display,
  16. GtkStyleProviderPriorityApplication;
  17. FROM Gdk IMPORT gdk_display_get_default;
  18. FROM GtkUtils IMPORT Connect, Unref;
  19. FROM SYSTEM IMPORT ADDRESS, ADR;
  20. FROM libc IMPORT printf;
  21. CONST
  22. AppId = "org.example.m2gtk4.TestCss";
  23. VAR
  24. app: ADDRESS;
  25. passed: BOOLEAN;
  26. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  27. VAR
  28. window, label, provider, display: ADDRESS;
  29. ok: BOOLEAN;
  30. BEGIN
  31. ok := TRUE;
  32. provider := gtk_css_provider_new();
  33. gtk_css_provider_load_from_string (provider,
  34. ".m2card { color: red; }");
  35. display := gdk_display_get_default();
  36. gtk_style_context_add_provider_for_display (display, provider,
  37. GtkStyleProviderPriorityApplication);
  38. label := gtk_label_new("styled");
  39. gtk_widget_add_css_class(label, "m2card");
  40. IF gtk_widget_has_css_class(label, "m2card") = 0 THEN
  41. printf("css class not applied\n");
  42. ok := FALSE
  43. END;
  44. gtk_widget_remove_css_class(label, "m2card");
  45. IF gtk_widget_has_css_class(label, "m2card") # 0 THEN
  46. printf("css class not removed\n");
  47. ok := FALSE
  48. END;
  49. gtk_style_context_remove_provider_for_display (display, provider);
  50. Unref(provider);
  51. window := gtk_application_window_new(application);
  52. gtk_window_set_child(window, label);
  53. passed := ok;
  54. g_application_quit(application)
  55. END OnActivate;
  56. VAR
  57. rc: INTEGER;
  58. BEGIN
  59. passed := FALSE;
  60. app := gtk_application_new(AppId, 0);
  61. IF app = NIL THEN
  62. printf("test_css: FAIL (no app)\n");
  63. HALT(1)
  64. END;
  65. Connect(app, "activate", ADR(OnActivate), NIL);
  66. rc := g_application_run(app, 0, NIL);
  67. IF passed THEN
  68. printf("test_css: PASS\n");
  69. HALT(0)
  70. ELSE
  71. printf("test_css: FAIL\n");
  72. HALT(1)
  73. END
  74. END test_css.