diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-01-02 10:01:50 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-01-04 15:02:49 -0500 |
commit | 1037f0021b1c399e200dc027b8c3f265d63108b2 (patch) | |
tree | a5c2e62eadccc4ad81dcfbd911cc40335139fcc6 | |
parent | 60fc31a3860dc4740021fb66f151972bfd337a15 (diff) | |
download | gtk+-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.c | 52 |
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 }, |