[gthumb] video viewer: added a loop button
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] video viewer: added a loop button
- Date: Mon, 31 Jul 2017 06:07:32 +0000 (UTC)
commit 46748d4ab6184e662fda05d54fae365f0aa3ec29
Author: Paolo Bacchilega <paobac src gnome org>
Date: Tue Jul 4 15:30:21 2017 +0200
video viewer: added a loop button
extensions/gstreamer_tools/data/ui/mediabar.ui | 25 ++++++-
extensions/gstreamer_tools/gth-media-viewer-page.c | 74 +++++++++++++++-----
2 files changed, 77 insertions(+), 22 deletions(-)
---
diff --git a/extensions/gstreamer_tools/data/ui/mediabar.ui b/extensions/gstreamer_tools/data/ui/mediabar.ui
index 36321f0..42c7c72 100644
--- a/extensions/gstreamer_tools/data/ui/mediabar.ui
+++ b/extensions/gstreamer_tools/data/ui/mediabar.ui
@@ -24,7 +24,6 @@
<property name="spacing">6</property>
<child>
<object class="GtkButton" id="play_button">
- <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -46,7 +45,6 @@
</child>
<child>
<object class="GtkButton" id="play_slower_button">
- <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -69,7 +67,6 @@
</child>
<child>
<object class="GtkButton" id="play_faster_button">
- <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -90,6 +87,27 @@
<property name="position">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkToggleButton" id="loop_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text" translatable="yes">Restart when finished</property>
+ <property name="relief">none</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">view-refresh-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -208,7 +226,6 @@
<property name="receives_default">True</property>
<property name="relief">none</property>
<property name="orientation">vertical</property>
- <property name="size">menu</property>
<property name="adjustment">volume_adjustment</property>
<property name="icons">audio-volume-muted-symbolic
audio-volume-high-symbolic
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c
b/extensions/gstreamer_tools/gth-media-viewer-page.c
index eb0f529..8c3674a 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -57,6 +57,7 @@ struct _GthMediaViewerPagePrivate {
gboolean visible;
gboolean playing;
gboolean paused;
+ gboolean loop;
gint64 duration;
int video_fps_n;
int video_fps_d;
@@ -274,15 +275,6 @@ video_area_scroll_event_cb (GtkWidget *widget,
}
-static gboolean
-video_area_key_press_cb (GtkWidget *widget,
- GdkEventKey *event,
- GthMediaViewerPage *self)
-{
- return gth_browser_viewer_key_press_cb (self->priv->browser, event);
-}
-
-
static void
volume_value_changed_cb (GtkAdjustment *adjustment,
gpointer user_data)
@@ -513,6 +505,15 @@ play_faster_button_clicked_cb (GtkButton *button,
}
+static void
+loop_button_clicked_cb (GtkButton *button,
+ gpointer user_data)
+{
+ GthMediaViewerPage *self = user_data;
+ self->priv->loop = ! self->priv->loop;
+}
+
+
static gboolean
update_volume_from_playbin (GthMediaViewerPage *self)
{
@@ -664,10 +665,6 @@ gth_media_viewer_page_real_activate (GthViewerPage *base,
"scroll_event",
G_CALLBACK (video_area_scroll_event_cb),
self);
- g_signal_connect (G_OBJECT (self->priv->audio_area),
- "key_press_event",
- G_CALLBACK (video_area_key_press_cb),
- self);
/* mediabar */
@@ -683,6 +680,8 @@ gth_media_viewer_page_real_activate (GthViewerPage *base,
"media-seek-forward-symbolic",
GTK_ICON_SIZE_MENU);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("loop_button")), self->priv->loop);
+
g_signal_connect (GET_WIDGET ("volume_adjustment"),
"value-changed",
G_CALLBACK (volume_value_changed_cb),
@@ -703,6 +702,10 @@ gth_media_viewer_page_real_activate (GthViewerPage *base,
"clicked",
G_CALLBACK (play_faster_button_clicked_cb),
self);
+ g_signal_connect (GET_WIDGET ("loop_button"),
+ "clicked",
+ G_CALLBACK (loop_button_clicked_cb),
+ self);
self->priv->mediabar_revealer = gtk_revealer_new ();
gtk_revealer_set_transition_type (GTK_REVEALER (self->priv->mediabar_revealer),
GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP);
@@ -853,6 +856,27 @@ update_stream_info (GthMediaViewerPage *self)
}
+/*
+static char *
+state_description (GstState state)
+{
+ switch (state) {
+ case GST_STATE_VOID_PENDING:
+ return "void pending";
+ case GST_STATE_NULL:
+ return "null";
+ case GST_STATE_READY:
+ return "ready";
+ case GST_STATE_PAUSED:
+ return "paused";
+ case GST_STATE_PLAYING:
+ return "playing";
+ }
+ return "error";
+}
+*/
+
+
static void
bus_message_cb (GstBus *bus,
GstMessage *message,
@@ -874,6 +898,13 @@ bus_message_cb (GstBus *bus,
if (old_state == new_state)
break;
+ /*
+ g_print ("old state: %s\n", state_description (old_state));
+ g_print ("new state: %s\n", state_description (new_state));
+ g_print ("pending state: %s\n", state_description (pending_state));
+ g_print ("\n");
+ */
+
self->priv->paused = (new_state == GST_STATE_PAUSED);
update_current_position_bar (self);
@@ -900,7 +931,17 @@ bus_message_cb (GstBus *bus,
break;
case GST_MESSAGE_EOS:
- reset_player_state (self);
+ if (self->priv->loop && self->priv->playing)
+ gst_element_seek (self->priv->playbin,
+ self->priv->rate,
+ GST_FORMAT_TIME,
+ GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
+ GST_SEEK_TYPE_SET,
+ 0.0,
+ GST_SEEK_TYPE_NONE,
+ 0.0);
+ else
+ reset_player_state (self);
break;
case GST_MESSAGE_BUFFERING: {
@@ -980,10 +1021,6 @@ create_playbin (GthMediaViewerPage *self)
"scroll_event",
G_CALLBACK (video_area_scroll_event_cb),
self);
- g_signal_connect (G_OBJECT (self->priv->video_area),
- "key_press_event",
- G_CALLBACK (video_area_key_press_cb),
- self);
gtk_stack_add_named (GTK_STACK (self->priv->area_box), self->priv->video_area, "video-area");
gtk_widget_show (self->priv->video_area);
@@ -1314,6 +1351,7 @@ gth_media_viewer_page_init (GthMediaViewerPage *self)
self->priv->background_painted = FALSE;
self->priv->file_data = NULL;
self->priv->updated_info = NULL;
+ self->priv->loop = FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]