| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- MODULE snapshot ;
- (*
- m2-GTK4 example - a custom GdkPaintable drawn with GtkSnapshot and
- Graphene from Modula-2 (via the shim).
- Build: make examples
- Run: ./build/examples/snapshot
- *)
- FROM Gio IMPORT g_application_run;
- FROM GtkApplication IMPORT gtk_application_new;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
- gtk_window_set_default_size, 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_arc, cairo_fill, cairo_destroy;
- FROM GtkClosures IMPORT Connect2;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.Snapshot";
- PROCEDURE Draw (snapshot: ADDRESS; width, height: INTEGER; user: ADDRESS);
- VAR
- rect: GrapheneRect;
- color: GdkRGBA;
- cr: ADDRESS;
- BEGIN
- graphene_rect_init(rect, 0.0, 0.0, VAL(REAL, width), VAL(REAL, height));
- color.red := 0.12;
- color.green := 0.16;
- color.blue := 0.22;
- 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, 0.20, 0.60, 0.90);
- cairo_arc(cr, VAL(REAL, width) / 2.0, VAL(REAL, height) / 2.0, 60.0,
- 0.0, 6.2831853);
- cairo_fill(cr);
- cairo_destroy(cr)
- END
- END Draw;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, picture, paintable: ADDRESS;
- BEGIN
- paintable := m2_snapshot_paintable_new(ADR(Draw), 240, 160, NIL, NIL);
- picture := gtk_picture_new();
- gtk_picture_set_paintable(picture, paintable);
- gtk_widget_set_size_request(picture, 240, 160);
- window := gtk_application_window_new(application);
- gtk_window_set_title(window, "m2-GTK4 Snapshot");
- gtk_window_set_default_size(window, 280, 200);
- gtk_window_set_child(window, picture);
- gtk_window_present(window)
- END OnActivate;
- VAR
- app: ADDRESS;
- BEGIN
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("gtk_application_new failed\n");
- HALT(1)
- END;
- Connect2(app, "activate", OnActivate, NIL);
- g_application_run(app, 0, NIL)
- END snapshot.
|