test_media.mod 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. MODULE test_media ;
  2. (*
  3. m2-GTK4 test - media: GdkTexture from a generated PNG, plus GtkVideo
  4. and GtkMediaFile construction. Requires a display.
  5. *)
  6. FROM Gio IMPORT g_application_run, g_application_quit;
  7. FROM GtkApplication IMPORT gtk_application_new;
  8. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child,
  9. gtk_window_present;
  10. FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
  11. FROM GtkEnums IMPORT GtkVertical;
  12. FROM GtkPicture IMPORT gtk_picture_new, gtk_picture_set_paintable,
  13. gtk_picture_get_paintable;
  14. FROM GtkVideo IMPORT gtk_video_new, gtk_video_set_autoplay,
  15. gtk_video_get_autoplay, gtk_video_set_loop, gtk_video_get_loop;
  16. FROM GtkMediaFile IMPORT gtk_media_file_new;
  17. FROM GdkTexture IMPORT gdk_texture_new_from_filename,
  18. gdk_texture_get_width, gdk_texture_get_height;
  19. FROM GError IMPORT GError;
  20. FROM Cairo IMPORT cairo_image_surface_create, cairo_create, cairo_destroy,
  21. cairo_surface_destroy, cairo_set_source_rgb, cairo_rectangle, cairo_fill,
  22. cairo_surface_write_to_png, CairoFormatARGB32;
  23. FROM GtkUtils IMPORT Connect, ClearError;
  24. FROM SYSTEM IMPORT ADDRESS, ADR;
  25. FROM libc IMPORT printf;
  26. CONST
  27. AppId = "org.example.m2gtk4.TestMedia";
  28. PngPath = "/tmp/opencode/m2media.png";
  29. VAR
  30. app: ADDRESS;
  31. passed: BOOLEAN;
  32. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  33. VAR
  34. window, box, picture, texture, video, mediafile, surface, cr: ADDRESS;
  35. err: GError;
  36. ok: BOOLEAN;
  37. BEGIN
  38. ok := TRUE;
  39. surface := cairo_image_surface_create(CairoFormatARGB32, 40, 30);
  40. cr := cairo_create(surface);
  41. cairo_set_source_rgb(cr, 0.20, 0.60, 0.30);
  42. cairo_rectangle(cr, 0.0, 0.0, 40.0, 30.0);
  43. cairo_fill(cr);
  44. cairo_destroy(cr);
  45. IF cairo_surface_write_to_png(surface, PngPath) # 0 THEN
  46. printf("png write failed\n"); ok := FALSE
  47. END;
  48. cairo_surface_destroy(surface);
  49. err := NIL;
  50. texture := gdk_texture_new_from_filename(PngPath, err);
  51. IF texture = NIL THEN
  52. printf("texture NIL\n");
  53. ClearError(err);
  54. ok := FALSE
  55. ELSE
  56. IF gdk_texture_get_width(texture) # 40 THEN
  57. printf("texture width wrong\n"); ok := FALSE
  58. END;
  59. IF gdk_texture_get_height(texture) # 30 THEN
  60. printf("texture height wrong\n"); ok := FALSE
  61. END
  62. END;
  63. picture := gtk_picture_new();
  64. IF texture # NIL THEN gtk_picture_set_paintable(picture, texture) END;
  65. IF texture # NIL THEN
  66. IF gtk_picture_get_paintable(picture) # texture THEN
  67. printf("picture paintable wrong\n"); ok := FALSE
  68. END
  69. END;
  70. video := gtk_video_new();
  71. IF video = NIL THEN printf("video NIL\n"); ok := FALSE END;
  72. gtk_video_set_autoplay(video, 1);
  73. IF gtk_video_get_autoplay(video) # 1 THEN ok := FALSE END;
  74. gtk_video_set_loop(video, 1);
  75. IF gtk_video_get_loop(video) # 1 THEN ok := FALSE END;
  76. mediafile := gtk_media_file_new();
  77. IF mediafile = NIL THEN printf("media file NIL\n"); ok := FALSE END;
  78. box := gtk_box_new(GtkVertical, 4);
  79. gtk_box_append(box, picture);
  80. gtk_box_append(box, video);
  81. window := gtk_application_window_new(application);
  82. gtk_window_set_child(window, box);
  83. gtk_window_present(window);
  84. passed := ok;
  85. g_application_quit(application)
  86. END OnActivate;
  87. VAR
  88. rc: INTEGER;
  89. BEGIN
  90. passed := FALSE;
  91. app := gtk_application_new(AppId, 0);
  92. IF app = NIL THEN
  93. printf("test_media: FAIL (no app)\n");
  94. HALT(1)
  95. END;
  96. Connect(app, "activate", ADR(OnActivate), NIL);
  97. rc := g_application_run(app, 0, NIL);
  98. IF passed THEN
  99. printf("test_media: PASS\n");
  100. HALT(0)
  101. ELSE
  102. printf("test_media: FAIL\n");
  103. HALT(1)
  104. END
  105. END test_media.