test_print.mod 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. MODULE test_print ;
  2. (*
  3. m2-GTK4 test - printing objects: GtkPageSetup, GtkPrintSettings and
  4. GtkPrintOperation property round-trips (the print dialog is not
  5. shown). Requires a display (GTK initialised).
  6. *)
  7. FROM Gio IMPORT g_application_run, g_application_quit;
  8. FROM GtkApplication IMPORT gtk_application_new;
  9. FROM GtkPageSetup IMPORT gtk_page_setup_new, gtk_page_setup_set_orientation,
  10. gtk_page_setup_get_orientation, gtk_page_setup_get_page_width,
  11. GtkPageLandscape, GtkUnitPoints;
  12. FROM GtkPrintSettings IMPORT gtk_print_settings_new, gtk_print_settings_set,
  13. gtk_print_settings_get, gtk_print_settings_set_printer;
  14. FROM GtkPrintOperation IMPORT gtk_print_operation_new,
  15. gtk_print_operation_set_n_pages,
  16. gtk_print_operation_set_default_page_setup,
  17. gtk_print_operation_get_default_page_setup,
  18. gtk_print_operation_set_print_settings,
  19. gtk_print_operation_get_print_settings;
  20. FROM GObject IMPORT g_object_unref;
  21. FROM GtkUtils IMPORT Connect, CStrToM2;
  22. FROM SYSTEM IMPORT ADDRESS, ADR;
  23. FROM libc IMPORT printf;
  24. CONST
  25. AppId = "org.example.m2gtk4.TestPrint";
  26. VAR
  27. app: ADDRESS;
  28. passed: BOOLEAN;
  29. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  30. VAR
  31. setup, settings, op: ADDRESS;
  32. buf: ARRAY [0..63] OF CHAR;
  33. width: REAL;
  34. ok: BOOLEAN;
  35. BEGIN
  36. ok := TRUE;
  37. setup := gtk_page_setup_new();
  38. gtk_page_setup_set_orientation(setup, GtkPageLandscape);
  39. IF gtk_page_setup_get_orientation(setup) # GtkPageLandscape THEN
  40. printf("orientation wrong\n"); ok := FALSE
  41. END;
  42. width := gtk_page_setup_get_page_width(setup, GtkUnitPoints);
  43. IF width <= 0.0 THEN printf("page width wrong\n"); ok := FALSE END;
  44. settings := gtk_print_settings_new();
  45. gtk_print_settings_set(settings, "test-key", "test-value");
  46. CStrToM2(gtk_print_settings_get(settings, "test-key"), buf);
  47. IF (buf[0] # 't') OR (buf[10] # 0C) THEN
  48. printf("settings value wrong: [%s]\n", buf); ok := FALSE
  49. END;
  50. gtk_print_settings_set_printer(settings, "MyPrinter");
  51. op := gtk_print_operation_new();
  52. gtk_print_operation_set_n_pages(op, 3);
  53. gtk_print_operation_set_default_page_setup(op, setup);
  54. IF gtk_print_operation_get_default_page_setup(op) # setup THEN
  55. printf("page setup round-trip wrong\n"); ok := FALSE
  56. END;
  57. gtk_print_operation_set_print_settings(op, settings);
  58. IF gtk_print_operation_get_print_settings(op) # settings THEN
  59. printf("settings round-trip wrong\n"); ok := FALSE
  60. END;
  61. g_object_unref(op);
  62. passed := ok;
  63. g_application_quit(application)
  64. END OnActivate;
  65. VAR
  66. rc: INTEGER;
  67. BEGIN
  68. passed := FALSE;
  69. app := gtk_application_new(AppId, 0);
  70. IF app = NIL THEN
  71. printf("test_print: FAIL (no app)\n");
  72. HALT(1)
  73. END;
  74. Connect(app, "activate", ADR(OnActivate), NIL);
  75. rc := g_application_run(app, 0, NIL);
  76. IF passed THEN
  77. printf("test_print: PASS\n");
  78. HALT(0)
  79. ELSE
  80. printf("test_print: FAIL\n");
  81. HALT(1)
  82. END
  83. END test_print.