static void bus_message_cb (GstBus *bus, GstMessage *message, gpointer user_data) { GthMediaViewerPage *self = user_data; switch (GST_MESSAGE_TYPE (message)) { case GST_MESSAGE_STATE_CHANGED: { GstState old_state; GstState new_state; GstState pending_state; old_state = new_state = GST_STATE_NULL; gst_message_parse_state_changed (message, &old_state, &new_state, &pending_state); self->priv->paused = (new_state == GST_STATE_PAUSED); if (old_state == new_state) break; if (GST_MESSAGE_SRC (message) != GST_OBJECT (self->priv->playbin)) break; update_current_position_bar (self, TRUE); if ((old_state == GST_STATE_READY) && (new_state == GST_STATE_PAUSED)) { update_stream_info (self); gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (self)); } if ((old_state == GST_STATE_READY) || (new_state == GST_STATE_PAUSED)) update_volume_from_playbin (self); if ((old_state == GST_STATE_PLAYING) || (new_state == GST_STATE_PLAYING)) update_play_button (self, new_state); break; } case GST_MESSAGE_DURATION: { GstFormat format; format = GST_FORMAT_TIME; gst_message_parse_duration (message, &format, &self->priv->duration); update_current_position_bar (self, TRUE); break; } case GST_MESSAGE_EOS: reset_player_state (self); break; case GST_MESSAGE_BUFFERING: { int percent = 0; gst_message_parse_buffering (message, &percent); g_print ("Buffering (%%%u percent done)", percent); break; } default: break; } }
static void update_play_button (GthMediaViewerPage *self, GstState new_state) { if (! self->priv->playing && (new_state == GST_STATE_PLAYING)) { self->priv->playing = TRUE; gtk_image_set_from_stock (GTK_IMAGE (GET_WIDGET ("button_play_image")), GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_widget_set_tooltip_text (GET_WIDGET ("button_play_image"), _("Pause")); if (self->priv->update_progress_id == 0) self->priv->update_progress_id = gdk_threads_add_timeout (PROGRESS_DELAY, update_progress_cb, self); } else if (self->priv->playing && (new_state != GST_STATE_PLAYING)) { self->priv->playing = FALSE; gtk_image_set_from_stock (GTK_IMAGE (GET_WIDGET ("button_play_image")), GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_widget_set_tooltip_text (GET_WIDGET ("button_play_image"), _("Play")); if (self->priv->update_progress_id != 0) { g_source_remove (self->priv->update_progress_id); self->priv->update_progress_id = 0; } } gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (self)); }
static void gth_file_tool_adjust_contrast_destroy_options (GthFileTool *base) { GthFileToolAdjustContrast *self; GtkWidget *window; GtkWidget *viewer_page; self = (GthFileToolAdjustContrast *) base; if (self->priv->apply_event != 0) { g_source_remove (self->priv->apply_event); self->priv->apply_event = 0; } window = gth_file_tool_get_window (GTH_FILE_TOOL (self)); viewer_page = gth_browser_get_viewer_page (GTH_BROWSER (window)); gth_image_viewer_page_reset_viewer_tool (GTH_IMAGE_VIEWER_PAGE (viewer_page)); gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (viewer_page)); _g_clear_object (&self->priv->builder); _cairo_clear_surface (&self->priv->preview); _cairo_clear_surface (&self->priv->destination); self->priv->method = GTH_FILTER_GRID_NO_FILTER; self->priv->last_applied_method = GTH_FILTER_GRID_NO_FILTER; }
void gth_browser_activate_toggle_animation (GSimpleAction *action, GVariant *state, gpointer user_data) { GthBrowser *browser = user_data; GthViewerPage *viewer_page; GthImageViewer *image_viewer; g_simple_action_set_state (action, state); viewer_page = gth_browser_get_viewer_page (browser); image_viewer = GTH_IMAGE_VIEWER (gth_image_viewer_page_get_image_viewer (GTH_IMAGE_VIEWER_PAGE (viewer_page))); if (gth_image_viewer_is_playing_animation (image_viewer)) gth_image_viewer_stop_animation (image_viewer); else gth_image_viewer_start_animation (image_viewer); gth_viewer_page_update_sensitivity (viewer_page); }
static void update_play_button (GthMediaViewerPage *self, GstState new_state) { if (! self->priv->playing && (new_state == GST_STATE_PLAYING)) { set_playing_state (self, TRUE); gtk_image_set_from_icon_name (GTK_IMAGE (GET_WIDGET ("play_button_image")), "media-playback-pause-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_widget_set_tooltip_text (GET_WIDGET ("play_button_image"), _("Pause")); if (self->priv->update_progress_id == 0) self->priv->update_progress_id = gdk_threads_add_timeout (PROGRESS_DELAY, update_progress_cb, self); update_playback_info (self); } else if (self->priv->playing && (new_state != GST_STATE_PLAYING)) { GtkWidget *play_button = GET_WIDGET ("play_button_image"); gboolean rtl; rtl = gtk_widget_get_direction (play_button) == GTK_TEXT_DIR_RTL; set_playing_state (self, FALSE); gtk_image_set_from_icon_name (GTK_IMAGE (play_button), rtl ? "media-playback-start-rtl-symbolic" : "media-playback-start-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_widget_set_tooltip_text (GET_WIDGET ("play_button_image"), _("Play")); if (self->priv->update_progress_id != 0) { g_source_remove (self->priv->update_progress_id); self->priv->update_progress_id = 0; } update_playback_info (self); } gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (self)); }
static void bus_message_cb (GstBus *bus, GstMessage *message, gpointer user_data) { GthMediaViewerPage *self = user_data; if (GST_MESSAGE_SRC (message) != GST_OBJECT (self->priv->playbin)) return; switch (GST_MESSAGE_TYPE (message)) { case GST_MESSAGE_STATE_CHANGED: { GstState old_state; GstState new_state; GstState pending_state; old_state = new_state = GST_STATE_NULL; gst_message_parse_state_changed (message, &old_state, &new_state, &pending_state); if (old_state == new_state) break; self->priv->paused = (new_state == GST_STATE_PAUSED); update_current_position_bar (self); if ((old_state == GST_STATE_NULL) && (new_state == GST_STATE_READY) && (pending_state != GST_STATE_PAUSED)) { update_stream_info (self); gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (self)); gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), self->priv->file_data, TRUE); } if ((old_state == GST_STATE_READY) && (new_state == GST_STATE_PAUSED)) { update_stream_info (self); gth_viewer_page_update_sensitivity (GTH_VIEWER_PAGE (self)); gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), self->priv->file_data, TRUE); } if ((old_state == GST_STATE_READY) || (new_state == GST_STATE_PAUSED)) update_volume_from_playbin (self); if ((old_state == GST_STATE_PLAYING) || (new_state == GST_STATE_PLAYING)) update_play_button (self, new_state); break; } case GST_MESSAGE_DURATION_CHANGED: self->priv->duration = 0; update_current_position_bar (self); break; case GST_MESSAGE_EOS: reset_player_state (self); break; case GST_MESSAGE_BUFFERING: { int percent = 0; gst_message_parse_buffering (message, &percent); gst_element_set_state (self->priv->playbin, (percent == 100) ? GST_STATE_PLAYING : GST_STATE_PAUSED); break; } case GST_MESSAGE_ERROR: gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), self->priv->file_data, FALSE); break; default: break; } }