MODULE test_print ; (* m2-GTK4 test - printing objects: GtkPageSetup, GtkPrintSettings and GtkPrintOperation property round-trips (the print dialog is not shown). Requires a display (GTK initialised). *) FROM Gio IMPORT g_application_run, g_application_quit; FROM GtkApplication IMPORT gtk_application_new; FROM GtkPageSetup IMPORT gtk_page_setup_new, gtk_page_setup_set_orientation, gtk_page_setup_get_orientation, gtk_page_setup_get_page_width, GtkPageLandscape, GtkUnitPoints; FROM GtkPrintSettings IMPORT gtk_print_settings_new, gtk_print_settings_set, gtk_print_settings_get, gtk_print_settings_set_printer; FROM GtkPrintOperation IMPORT gtk_print_operation_new, gtk_print_operation_set_n_pages, gtk_print_operation_set_default_page_setup, gtk_print_operation_get_default_page_setup, gtk_print_operation_set_print_settings, gtk_print_operation_get_print_settings; FROM GObject IMPORT g_object_unref; FROM GtkUtils IMPORT Connect, CStrToM2; FROM SYSTEM IMPORT ADDRESS, ADR; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.TestPrint"; VAR app: ADDRESS; passed: BOOLEAN; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR setup, settings, op: ADDRESS; buf: ARRAY [0..63] OF CHAR; width: REAL; ok: BOOLEAN; BEGIN ok := TRUE; setup := gtk_page_setup_new(); gtk_page_setup_set_orientation(setup, GtkPageLandscape); IF gtk_page_setup_get_orientation(setup) # GtkPageLandscape THEN printf("orientation wrong\n"); ok := FALSE END; width := gtk_page_setup_get_page_width(setup, GtkUnitPoints); IF width <= 0.0 THEN printf("page width wrong\n"); ok := FALSE END; settings := gtk_print_settings_new(); gtk_print_settings_set(settings, "test-key", "test-value"); CStrToM2(gtk_print_settings_get(settings, "test-key"), buf); IF (buf[0] # 't') OR (buf[10] # 0C) THEN printf("settings value wrong: [%s]\n", buf); ok := FALSE END; gtk_print_settings_set_printer(settings, "MyPrinter"); op := gtk_print_operation_new(); gtk_print_operation_set_n_pages(op, 3); gtk_print_operation_set_default_page_setup(op, setup); IF gtk_print_operation_get_default_page_setup(op) # setup THEN printf("page setup round-trip wrong\n"); ok := FALSE END; gtk_print_operation_set_print_settings(op, settings); IF gtk_print_operation_get_print_settings(op) # settings THEN printf("settings round-trip wrong\n"); ok := FALSE END; g_object_unref(op); passed := ok; g_application_quit(application) END OnActivate; VAR rc: INTEGER; BEGIN passed := FALSE; app := gtk_application_new(AppId, 0); IF app = NIL THEN printf("test_print: FAIL (no app)\n"); HALT(1) END; Connect(app, "activate", ADR(OnActivate), NIL); rc := g_application_run(app, 0, NIL); IF passed THEN printf("test_print: PASS\n"); HALT(0) ELSE printf("test_print: FAIL\n"); HALT(1) END END test_print.