| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- MODULE media ;
- (*
- m2-GTK4 example - media: a GdkTexture shown in a GtkPicture.
- Generates a PNG with Cairo at run time, loads it as a texture and
- displays it; a GtkVideo widget is added as a placeholder.
- Build: make examples
- Run: ./build/examples/media
- *)
- 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 GtkBox IMPORT gtk_box_new, gtk_box_append, gtk_box_set_spacing;
- FROM GtkEnums IMPORT GtkVertical;
- FROM GtkPicture IMPORT gtk_picture_new, gtk_picture_set_paintable;
- FROM GtkVideo IMPORT gtk_video_new;
- FROM GdkTexture IMPORT gdk_texture_new_from_filename;
- FROM GError IMPORT GError;
- FROM Cairo IMPORT cairo_image_surface_create, cairo_create, cairo_destroy,
- cairo_surface_destroy, cairo_set_source_rgb, cairo_rectangle, cairo_fill,
- cairo_surface_write_to_png, CairoFormatARGB32;
- FROM GtkClosures IMPORT Connect2;
- FROM GtkUtils IMPORT ClearError;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.Media";
- PngPath = "/tmp/opencode/m2media_demo.png";
- PROCEDURE MakePng;
- VAR
- surface, cr: ADDRESS;
- BEGIN
- surface := cairo_image_surface_create(CairoFormatARGB32, 200, 120);
- cr := cairo_create(surface);
- cairo_set_source_rgb(cr, 0.16, 0.50, 0.72);
- cairo_rectangle(cr, 0.0, 0.0, 200.0, 120.0);
- cairo_fill(cr);
- cairo_destroy(cr);
- cairo_surface_write_to_png(surface, PngPath);
- cairo_surface_destroy(surface)
- END MakePng;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box, picture, video, texture: ADDRESS;
- err: GError;
- BEGIN
- MakePng();
- err := NIL;
- texture := gdk_texture_new_from_filename(PngPath, err);
- picture := gtk_picture_new();
- IF texture # NIL THEN
- gtk_picture_set_paintable(picture, texture)
- ELSE
- printf("could not load %s\n", PngPath);
- ClearError(err)
- END;
- video := gtk_video_new();
- box := gtk_box_new(GtkVertical, 8);
- gtk_box_set_spacing(box, 8);
- gtk_box_append(box, picture);
- gtk_box_append(box, video);
- window := gtk_application_window_new(application);
- gtk_window_set_title(window, "m2-GTK4 Media");
- gtk_window_set_default_size(window, 320, 320);
- gtk_window_set_child(window, box);
- 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 media.
|