[snappy] ui: fix fullscreen responsiveness when paused
- From: Luis de Bethencourt <luisbg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [snappy] ui: fix fullscreen responsiveness when paused
- Date: Thu, 18 Apr 2013 21:09:37 +0000 (UTC)
commit 18b6833f15afe4e2cc48fae96cb12b4c836e5011
Author: Luis de Bethencourt <luis debethencourt com>
Date: Thu Apr 18 17:09:30 2013 -0400
ui: fix fullscreen responsiveness when paused
src/user_interface.c | 119 ++++++++++++++++++++++++++++++++-------------------
src/user_interface.h | 4 +-
2 files changed, 77 insertions(+), 46 deletions(-)
---
diff --git a/src/user_interface.c b/src/user_interface.c
index b11a611..7801fd2 100644
--- a/src/user_interface.c
+++ b/src/user_interface.c
@@ -42,6 +42,8 @@ static gboolean event_cb (ClutterStage * stage, ClutterEvent * event,
UserInterface * ui);
static void hide_cursor (UserInterface * ui);
static void load_controls (UserInterface * ui);
+static void new_video_size (UserInterface * ui, gfloat width, gfloat height,
+ gfloat * new_width, gfloat * new_height);
static gboolean penalty_box (gpointer data);
static gchar *position_ns_to_str (gint64 nanoseconds);
static void progress_timing (UserInterface * ui);
@@ -905,6 +907,42 @@ load_controls (UserInterface * ui)
size_change (CLUTTER_STAGE (ui->stage), NULL, 0, ui);
}
+static void
+new_video_size (UserInterface * ui, gfloat width, gfloat height,
+ gfloat * new_width, gfloat * new_height)
+{
+ gfloat tmp_width, tmp_height;
+ gfloat media_width, media_height;
+ gfloat stage_ar, media_ar;
+
+ media_width = clutter_actor_get_width (ui->texture);
+ media_height = clutter_actor_get_height (ui->texture);
+
+ stage_ar = width / height;
+ tmp_width = width;
+ tmp_height = height;
+
+ if (media_height > 0.0f && media_width > 0.0f) {
+ media_ar = media_width / media_height;
+
+ /* calculate new width and height
+ * note: when we're done, new_width/new_height should equal media_ar */
+ if (media_ar > stage_ar) {
+ /* media has wider aspect than stage so use new width as stage width and
+ * scale down height */
+ tmp_height = width / media_ar;
+ } else {
+ tmp_width = height * media_ar;
+ }
+ } else {
+ g_debug ("Warning: not considering texture dimensions %fx%f", media_width,
+ media_height);
+ }
+
+ *new_width = tmp_width;
+ *new_height = tmp_height;
+}
+
static gboolean
penalty_box (gpointer data)
{
@@ -1025,41 +1063,15 @@ size_change (ClutterStage * stage,
ClutterAllocationFlags flags, UserInterface * ui)
{
gfloat stage_width, stage_height;
- gfloat new_width, new_height;
- gfloat media_width, media_height;
- gfloat stage_ar, media_ar;
-
- media_width = clutter_actor_get_width (ui->texture);
- media_height = clutter_actor_get_height (ui->texture);
-
- stage_width = clutter_actor_get_width (ui->stage);
- stage_height = clutter_actor_get_height (ui->stage);
+ gfloat video_width, video_height;
- stage_ar = stage_width / stage_height;
- new_width = stage_width;
- new_height = stage_height;
-
- if (media_height > 0.0f && media_width > 0.0f) {
- media_ar = media_width / media_height;
+ ui->stage_width = clutter_actor_get_width (ui->stage);
+ ui->stage_height = clutter_actor_get_height (ui->stage);
- /* calculate new width and height
- * note: when we're done, new_width/new_height should equal media_ar */
- if (media_ar > stage_ar) {
- /* media has wider aspect than stage so use new width as stage width and
- * scale down height */
- new_height = stage_width / media_ar;
- } else {
- new_width = stage_height * media_ar;
- }
- } else {
- g_debug ("Warning: not considering texture dimensions %fx%f", media_width,
- media_height);
- }
-
- ui->stage_width = new_width;
- ui->stage_height = new_height;
-
- clutter_actor_set_size (CLUTTER_ACTOR (ui->texture), new_width, new_height);
+ new_video_size (ui, ui->stage_width, ui->stage_height, &video_width,
+ &video_height);
+ clutter_actor_set_size (CLUTTER_ACTOR (ui->texture), video_width,
+ video_height);
update_controls_size (ui);
progress_timing (ui);
@@ -1115,12 +1127,27 @@ show_controls (UserInterface * ui, gboolean vis)
static void
toggle_fullscreen (UserInterface * ui)
{
- if (ui->fullscreen) {
+ gfloat new_width, new_height;
+
+ if (!ui->fullscreen) {
+ ui->windowed_width = clutter_actor_get_width (ui->stage);
+ ui->windowed_height = clutter_actor_get_height (ui->stage);
+
+ new_video_size (ui, ui->screen_width, ui->screen_height, &new_width,
+ &new_height);
+ clutter_actor_set_size (CLUTTER_ACTOR (ui->texture), new_width, new_height);
gtk_window_fullscreen (GTK_WINDOW (ui->window));
- ui->fullscreen = FALSE;
+
+ ui->fullscreen = TRUE;
+
} else {
gtk_window_unfullscreen (GTK_WINDOW (ui->window));
- ui->fullscreen = TRUE;
+
+ new_video_size (ui, ui->windowed_width, ui->windowed_height, &new_width,
+ &new_height);
+ clutter_actor_set_size (CLUTTER_ACTOR (ui->texture), new_width, new_height);
+
+ ui->fullscreen = FALSE;
}
}
@@ -1354,6 +1381,8 @@ interface_load_uri (UserInterface * ui, gchar * uri)
ui->duration_str = position_ns_to_str (ui->engine->media_duration);
ui->media_width = ui->engine->media_width;
ui->media_height = ui->engine->media_height;
+ ui->windowed_width = ui->media_width;
+ ui->windowed_height = ui->media_height;
clutter_actor_set_size (CLUTTER_ACTOR (ui->texture), ui->media_width,
ui->media_height);
@@ -1427,7 +1456,6 @@ interface_start (UserInterface * ui, gchar * uri)
{
GtkSettings *gtk_settings;
GdkScreen *screen;
- gint screen_width, screen_height;
g_print ("Loading ui!\n");
@@ -1442,10 +1470,11 @@ interface_start (UserInterface * ui, gchar * uri)
// Get screen size
screen = gdk_screen_get_default ();
- screen_width = gdk_screen_get_width (screen);
- screen_height = gdk_screen_get_height (screen);
+ ui->screen_width = gdk_screen_get_width (screen);
+ ui->screen_height = gdk_screen_get_height (screen);
- if (ui->media_width < screen_width && ui->media_height < screen_height) {
+ if (ui->media_width < ui->screen_width &&
+ ui->media_height < ui->screen_height) {
ui->stage_width = ui->media_width;
ui->stage_height = ui->media_height;
@@ -1455,13 +1484,13 @@ interface_start (UserInterface * ui, gchar * uri)
aspect_ratio = (float) ui->media_width / ui->media_height;
// Scale down to screen width proportionally
- ui->stage_width = screen_width;
- ui->stage_height = screen_width / aspect_ratio;
+ ui->stage_width = ui->screen_width;
+ ui->stage_height = ui->screen_width / aspect_ratio;
- if (ui->stage_height > screen_height) {
+ if (ui->stage_height > ui->screen_height) {
// Stage height still too big, scale down to screen height
- ui->stage_width = screen_height * aspect_ratio;
- ui->stage_height = screen_height;
+ ui->stage_width = ui->screen_height * aspect_ratio;
+ ui->stage_height = ui->screen_height;
}
}
diff --git a/src/user_interface.h b/src/user_interface.h
index 7f7b119..0c9c35f 100644
--- a/src/user_interface.h
+++ b/src/user_interface.h
@@ -78,8 +78,10 @@ struct _UserInterface
gint title_length, controls_timeout, progress_id;
guint media_width, media_height;
- guint stage_width, stage_height;
gint64 media_duration;
+ gfloat stage_width, stage_height;
+ gfloat screen_width, screen_height;
+ gfloat windowed_width, windowed_height;
gfloat playback_position, volume;
gfloat seek_width, seek_height;
gfloat volume_width, volume_height;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]