summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-01-02 10:01:50 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-01-04 15:02:49 -0500
commit1037f0021b1c399e200dc027b8c3f265d63108b2 (patch)
treea5c2e62eadccc4ad81dcfbd911cc40335139fcc6
parent60fc31a3860dc4740021fb66f151972bfd337a15 (diff)
downloadgtk+-matthiasc/gl-media-stream.tar.gz
gtk-demo: Add a "video view" for comparisonmatthiasc/gl-media-stream
Add a "Video view" case to the fishbowl that is like the Video case, but uses a single media stream with multiple views.
-rw-r--r--demos/gtk-demo/fishbowl.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/demos/gtk-demo/fishbowl.c b/demos/gtk-demo/fishbowl.c
index 4c596b9e48..96254029e7 100644
--- a/demos/gtk-demo/fishbowl.c
+++ b/demos/gtk-demo/fishbowl.c
@@ -146,6 +146,57 @@ create_video (void)
return w;
}
+static GtkMediaStream *view_stream;
+static int n_views;
+
+static void
+on_map_view (GtkWidget *w)
+{
+ if (n_views == 0)
+ {
+ GdkSurface *surface;
+
+ surface = gtk_native_get_surface (gtk_widget_get_native (w));
+
+ view_stream = gtk_media_file_new ();
+
+ gtk_media_stream_realize (view_stream, surface);
+ gtk_media_stream_set_loop (view_stream, TRUE);
+
+ gtk_media_file_set_resource (GTK_MEDIA_FILE (view_stream), "/images/gtk-logo.webm");
+
+ gtk_media_stream_play (view_stream);
+ }
+
+ gtk_picture_set_paintable (GTK_PICTURE (w), GDK_PAINTABLE (view_stream));
+ n_views++;
+}
+
+static void
+on_unrealize_view (GtkWidget *w)
+{
+ n_views--;
+
+ if (n_views == 0)
+ {
+ gtk_media_stream_pause (view_stream);
+ g_clear_object (&view_stream);
+ }
+}
+
+static GtkWidget *
+create_video_view (void)
+{
+ GtkWidget *w = gtk_picture_new ();
+
+ gtk_widget_set_size_request (w, 128, 128);
+
+ g_signal_connect_after (w, "map", G_CALLBACK (on_map_view), NULL);
+ g_signal_connect_after (w, "unrealize", G_CALLBACK (on_unrealize_view), NULL);
+
+ return w;
+}
+
static GtkWidget *
create_gears (void)
{
@@ -231,6 +282,7 @@ static const struct {
{ "Spinner", create_spinner },
{ "Spinbutton", create_spinbutton },
{ "Video", create_video },
+ { "Video View", create_video_view },
{ "Gears", create_gears },
{ "Switch", create_switch },
{ "Menubutton", create_menu_button },