| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- MODULE test_snapshot ;
- (*
- m2-GTK4 test - a GdkPaintable whose snapshot uses GtkSnapshot and
- Graphene from Modula-2 (via the shim). 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 GtkPicture IMPORT gtk_picture_new, gtk_picture_set_paintable;
- FROM GtkWidget IMPORT gtk_widget_set_size_request;
- FROM M2GtkShim IMPORT m2_snapshot_paintable_new;
- FROM GtkSnapshot IMPORT gtk_snapshot_append_color,
- gtk_snapshot_append_cairo;
- FROM Graphene IMPORT GrapheneRect, graphene_rect_init;
- FROM Gdk IMPORT GdkRGBA;
- FROM Cairo IMPORT cairo_set_source_rgb, cairo_rectangle, cairo_fill,
- cairo_destroy;
- FROM GLib IMPORT g_timeout_add, GSourceRemove;
- FROM GtkUtils IMPORT Connect;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.TestSnapshot";
- VAR
- app: ADDRESS;
- passed, drew: BOOLEAN;
- (* void draw(GtkSnapshot *snapshot, int width, int height, gpointer user) *)
- PROCEDURE Draw (snapshot: ADDRESS; width, height: INTEGER; user: ADDRESS);
- VAR
- rect: GrapheneRect;
- color: GdkRGBA;
- cr: ADDRESS;
- BEGIN
- drew := TRUE;
- graphene_rect_init(rect, 0.0, 0.0, VAL(REAL, width), VAL(REAL, height));
- color.red := 0.16;
- color.green := 0.50;
- color.blue := 0.72;
- color.alpha := 1.0;
- gtk_snapshot_append_color(snapshot, color, rect);
- cr := gtk_snapshot_append_cairo(snapshot, rect);
- IF cr # NIL THEN
- cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
- cairo_rectangle(cr, 8.0, 8.0, 24.0, 24.0);
- cairo_fill(cr);
- cairo_destroy(cr)
- END
- END Draw;
- PROCEDURE AfterMap (data: ADDRESS) : INTEGER;
- BEGIN
- IF NOT drew THEN
- printf("snapshot draw did not run\n");
- passed := FALSE
- END;
- g_application_quit(app);
- RETURN GSourceRemove
- END AfterMap;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, picture, paintable: ADDRESS;
- BEGIN
- drew := FALSE;
- paintable := m2_snapshot_paintable_new(ADR(Draw), 80, 60, NIL, NIL);
- picture := gtk_picture_new();
- gtk_picture_set_paintable(picture, paintable);
- gtk_widget_set_size_request(picture, 80, 60);
- window := gtk_application_window_new(application);
- gtk_window_set_child(window, picture);
- gtk_window_present(window);
- passed := TRUE;
- 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_snapshot: 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_snapshot: PASS\n");
- HALT(0)
- ELSE
- printf("test_snapshot: FAIL\n");
- HALT(1)
- END
- END test_snapshot.
|