| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- MODULE test_drawing ;
- (*
- m2-GTK4 test - GtkDrawingArea with a Cairo draw callback.
- Presents a window with a drawing area and checks (from a timeout,
- once it has been drawn) that the callback ran. 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,
- gtk_window_present;
- FROM GtkDrawingArea IMPORT gtk_drawing_area_new,
- gtk_drawing_area_set_content_width, gtk_drawing_area_set_content_height,
- gtk_drawing_area_get_content_width, gtk_drawing_area_get_content_height,
- gtk_drawing_area_set_draw_func;
- FROM Cairo IMPORT cairo_set_source_rgb, cairo_rectangle, cairo_fill;
- FROM GtkUtils IMPORT Connect;
- FROM GLib IMPORT g_timeout_add, GSourceRemove;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.TestDrawing";
- VAR
- app: ADDRESS;
- passed, drew: BOOLEAN;
- (* void draw(GtkDrawingArea *area, cairo_t *cr, int w, int h, gpointer data) *)
- PROCEDURE Draw (area: ADDRESS; cr: ADDRESS; width, height: INTEGER;
- data: ADDRESS);
- BEGIN
- drew := TRUE;
- cairo_set_source_rgb(cr, 0.90, 0.30, 0.20);
- cairo_rectangle(cr, 0.0, 0.0, VAL(REAL, width), VAL(REAL, height));
- cairo_fill(cr);
- cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
- cairo_rectangle(cr, 20.0, 20.0, 60.0, 40.0);
- cairo_fill(cr)
- END Draw;
- PROCEDURE AfterMap (data: ADDRESS) : INTEGER;
- BEGIN
- IF NOT drew THEN
- printf("draw callback did not run\n");
- passed := FALSE
- END;
- g_application_quit(app);
- RETURN GSourceRemove
- END AfterMap;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, area: ADDRESS;
- ok: BOOLEAN;
- BEGIN
- ok := TRUE;
- drew := FALSE;
- area := gtk_drawing_area_new();
- gtk_drawing_area_set_content_width(area, 200);
- gtk_drawing_area_set_content_height(area, 120);
- IF gtk_drawing_area_get_content_width(area) # 200 THEN
- printf("content width wrong\n"); ok := FALSE
- END;
- IF gtk_drawing_area_get_content_height(area) # 120 THEN
- printf("content height wrong\n"); ok := FALSE
- END;
- gtk_drawing_area_set_draw_func(area, ADR(Draw), NIL, NIL);
- window := gtk_application_window_new(application);
- gtk_window_set_child(window, area);
- gtk_window_present(window);
- passed := ok;
- g_timeout_add(300, AfterMap, NIL)
- END OnActivate;
- VAR
- rc: INTEGER;
- BEGIN
- passed := FALSE;
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("test_drawing: 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_drawing: PASS\n");
- HALT(0)
- ELSE
- printf("test_drawing: FAIL\n");
- HALT(1)
- END
- END test_drawing.
|