| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- MODULE test_gestures ;
- (*
- m2-GTK4 test - event controllers and gestures.
- Adds several gestures to a widget, checks the controller properties,
- connects a 5-argument "pressed" handler to a GtkGestureClick and emits
- the signal to verify the callback ABI. Requires a display.
- *)
- FROM Gio IMPORT g_application_run, g_application_quit;
- FROM GtkApplication IMPORT gtk_application_new;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child;
- FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
- FROM GtkLabel IMPORT gtk_label_new;
- FROM GtkEnums IMPORT GtkVertical, GtkHorizontal;
- FROM GtkWidget IMPORT gtk_widget_add_controller;
- FROM GtkEventController IMPORT gtk_event_controller_set_propagation_phase,
- gtk_event_controller_get_propagation_phase, gtk_event_controller_set_name,
- GtkPhaseBubble, gtk_event_controller_motion_new;
- FROM GtkGestures IMPORT gtk_gesture_click_new, gtk_gesture_drag_new,
- gtk_gesture_swipe_new, gtk_gesture_zoom_new, gtk_gesture_rotate_new,
- gtk_gesture_pan_new, gtk_gesture_long_press_new,
- gtk_gesture_single_set_button, gtk_gesture_single_get_button;
- FROM GObject IMPORT g_signal_connect_data, g_signal_emit_by_name,
- GConnectDefault;
- FROM GtkUtils IMPORT Connect;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.TestGestures";
- VAR
- app: ADDRESS;
- passed: BOOLEAN;
- gotN: INTEGER;
- gotX, gotY: REAL;
- (* void pressed(GtkGestureClick *g, int n_press, double x, double y, gpointer u) *)
- PROCEDURE OnPressed (g: ADDRESS; n_press: INTEGER; x, y: REAL; user: ADDRESS);
- BEGIN
- gotN := n_press;
- gotX := x;
- gotY := y
- END OnPressed;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box, click, drag, swipe, zoom, rotate, pan, longpress, motion: ADDRESS;
- ex, ey: REAL;
- ok: BOOLEAN;
- BEGIN
- ok := TRUE;
- gotN := 0;
- gotX := 0.0;
- gotY := 0.0;
- box := gtk_box_new(GtkVertical, 4);
- click := gtk_gesture_click_new();
- IF click = NIL THEN printf("click NIL\n"); ok := FALSE END;
- gtk_widget_add_controller(box, click);
- gtk_event_controller_set_propagation_phase(click, GtkPhaseBubble);
- IF gtk_event_controller_get_propagation_phase(click) # GtkPhaseBubble THEN
- printf("propagation phase wrong\n"); ok := FALSE
- END;
- gtk_event_controller_set_name(click, "click-1");
- gtk_gesture_single_set_button(click, 1);
- IF gtk_gesture_single_get_button(click) # 1 THEN
- printf("gesture button wrong\n"); ok := FALSE
- END;
- drag := gtk_gesture_drag_new();
- swipe := gtk_gesture_swipe_new();
- zoom := gtk_gesture_zoom_new();
- rotate := gtk_gesture_rotate_new();
- pan := gtk_gesture_pan_new(GtkHorizontal);
- longpress := gtk_gesture_long_press_new();
- motion := gtk_event_controller_motion_new();
- gtk_widget_add_controller(box, drag);
- gtk_widget_add_controller(box, swipe);
- gtk_widget_add_controller(box, zoom);
- gtk_widget_add_controller(box, rotate);
- gtk_widget_add_controller(box, pan);
- gtk_widget_add_controller(box, longpress);
- gtk_widget_add_controller(box, motion);
- IF (drag = NIL) OR (swipe = NIL) OR (zoom = NIL) OR (rotate = NIL)
- OR (pan = NIL) OR (longpress = NIL) OR (motion = NIL) THEN
- printf("a gesture is NIL\n"); ok := FALSE
- END;
- g_signal_connect_data(click, "pressed", ADR(OnPressed), NIL, NIL,
- GConnectDefault);
- ex := 10.0;
- ey := 20.0;
- g_signal_emit_by_name(click, "pressed", 1, ex, ey);
- IF gotN # 1 THEN printf("n_press wrong\n"); ok := FALSE END;
- IF ABS(gotX - 10.0) > 0.001 THEN printf("x wrong\n"); ok := FALSE END;
- IF ABS(gotY - 20.0) > 0.001 THEN printf("y wrong\n"); ok := FALSE END;
- gtk_box_append(box, gtk_label_new("gestures"));
- window := gtk_application_window_new(application);
- gtk_window_set_child(window, box);
- 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_gestures: 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_gestures: PASS\n");
- HALT(0)
- ELSE
- printf("test_gestures: FAIL\n");
- HALT(1)
- END
- END test_gestures.
|