[sushi/wip/cosimoc/no-clutter: 23/66] media-bin: adapt to Sushi design



commit 525c52f6cd7d0a2f2581268b3709941b553cc44d
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Sun Apr 2 12:59:08 2017 -0700

    media-bin: adapt to Sushi design
    
    Remove a lot of the custom theming, the big playback button and the
    value drawn over the scale. Instead, add labels before/after it, as it
    was in the former Sushi toolbar.

 src/libsushi/SushiMediaBin.ui    | 183 ++++++++++++++++++++-------------------
 src/libsushi/sushi-media-bin.c   |  22 ++---
 src/libsushi/sushi-media-bin.css | 142 ++----------------------------
 3 files changed, 113 insertions(+), 234 deletions(-)
---
diff --git a/src/libsushi/SushiMediaBin.ui b/src/libsushi/SushiMediaBin.ui
index 2933878..f8eaa67 100644
--- a/src/libsushi/SushiMediaBin.ui
+++ b/src/libsushi/SushiMediaBin.ui
@@ -10,7 +10,7 @@
   <object class="GtkImage" id="fullscreen_image">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="pixel_size">18</property>
+    <property name="icon_size">1</property>
     <property name="icon_name">view-fullscreen-symbolic</property>
   </object>
   <object class="GtkAdjustment" id="playback_adjustment">
@@ -22,7 +22,7 @@
   <object class="GtkImage" id="playback_image">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="pixel_size">18</property>
+    <property name="icon_size">1</property>
     <property name="icon_name">media-playback-start-symbolic</property>
   </object>
   <object class="GtkAdjustment" id="volume_adjustment">
@@ -113,7 +113,7 @@
                 <property name="can_focus">False</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK | 
GDK_STRUCTURE_MASK</property>
                 <property name="valign">end</property>
-                <property name="transition_type">slide-up</property>
+                <property name="transition_type">crossfade</property>
                 <signal name="leave-notify-event" handler="on_revealer_leave_notify_event" swapped="no"/>
                 <signal name="motion-notify-event" handler="on_revealer_motion_notify_event" swapped="no"/>
                 <child>
@@ -121,113 +121,125 @@
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="valign">end</property>
-                    <property name="orientation">vertical</property>
+                    <property name="orientation">horizontal</property>
+                    <property name="margin-start">32</property>
+                    <property name="margin-end">32</property>
+                    <property name="margin-bottom">32</property>
+                    <child>
+                      <object class="GtkButton" id="playback_button">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="image">playback_image</property>
+                        <property name="relief">none</property>
+                        <signal name="clicked" handler="sushi_media_bin_toggle_playback" swapped="yes"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="progress_position_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="valign">center</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
                     <child>
                       <object class="GtkScale" id="progress_scale">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="adjustment">playback_adjustment</property>
                         <property name="round_digits">2</property>
+                        <property name="draw_value">False</property>
                         <signal name="format-value" handler="on_progress_scale_format_value" swapped="no"/>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
+                        <property name="expand">True</property>
                         <property name="fill">True</property>
-                        <property name="position">0</property>
+                        <property name="position">2</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkBox">
+                      <object class="GtkLabel" id="progress_duration_label">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkButton" id="playback_button">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="image">playback_image</property>
-                            <property name="relief">none</property>
-                            <signal name="clicked" handler="sushi_media_bin_toggle_playback" swapped="yes"/>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkButton" id="fullscreen_button">
-                            <property name="visible">True</property>
+                        <property name="valign">center</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="fullscreen_button">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="image">fullscreen_image</property>
+                        <property name="relief">none</property>
+                        <signal name="clicked" handler="sushi_media_bin_toggle_fullscreen" swapped="yes"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="pack_type">end</property>
+                        <property name="position">4</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkVolumeButton" id="volume_button">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="focus_on_click">False</property>
+                        <property name="receives_default">False</property>
+                        <property name="relief">none</property>
+                        <property name="orientation">vertical</property>
+                        <property name="value">1</property>
+                        <property name="size">menu</property>
+                        <property name="adjustment">volume_adjustment</property>
+                        <child internal-child="plus_button">
+                          <object class="GtkButton">
                             <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="image">fullscreen_image</property>
+                            <property name="receives_default">True</property>
+                            <property name="halign">center</property>
+                            <property name="valign">center</property>
                             <property name="relief">none</property>
-                            <signal name="clicked" handler="sushi_media_bin_toggle_fullscreen" 
swapped="yes"/>
                           </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="pack_type">end</property>
-                            <property name="position">1</property>
-                          </packing>
                         </child>
-                        <child>
-                          <object class="GtkVolumeButton" id="volume_button">
-                            <property name="visible">True</property>
+                        <child internal-child="minus_button">
+                          <object class="GtkButton">
                             <property name="can_focus">True</property>
-                            <property name="focus_on_click">False</property>
-                            <property name="receives_default">False</property>
+                            <property name="receives_default">True</property>
+                            <property name="halign">center</property>
+                            <property name="valign">center</property>
                             <property name="relief">none</property>
-                            <property name="orientation">vertical</property>
-                            <property name="value">1</property>
-                            <property name="size">large-toolbar</property>
-                            <property name="adjustment">volume_adjustment</property>
-                            <property name="icons">audio-volume-muted-symbolic
-audio-volume-high-symbolic
-audio-volume-low-symbolic
-audio-volume-medium-symbolic</property>
-                            <property name="use_symbolic">False</property>
-                            <child internal-child="plus_button">
-                              <object class="GtkButton">
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <property name="halign">center</property>
-                                <property name="valign">center</property>
-                                <property name="relief">none</property>
-                              </object>
-                            </child>
-                            <child internal-child="minus_button">
-                              <object class="GtkButton">
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <property name="halign">center</property>
-                                <property name="valign">center</property>
-                                <property name="relief">none</property>
-                              </object>
-                            </child>
                           </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="pack_type">end</property>
-                            <property name="position">2</property>
-                          </packing>
                         </child>
-                        <child>
-                          <placeholder/>
-                        </child>
-                        <style>
-                          <class name="overlay-bar"/>
-                          <class name="bottom"/>
-                        </style>
                       </object>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">True</property>
-                        <property name="position">1</property>
+                        <property name="pack_type">end</property>
+                        <property name="position">5</property>
                       </packing>
                     </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <style>
+                      <class name="osd"/>
+                      <class name="overlay-bar"/>
+                      <class name="bottom"/>
+                    </style>
                   </object>
                 </child>
               </object>
@@ -237,7 +249,7 @@ audio-volume-medium-symbolic</property>
             </child>
             <child type="overlay">
               <object class="GtkBox" id="play_box">
-                <property name="visible">True</property>
+                <property name="visible">False</property>
                 <property name="can_focus">False</property>
                 <property name="halign">center</property>
                 <property name="valign">center</property>
@@ -334,13 +346,8 @@ audio-volume-medium-symbolic</property>
                     <property name="relief">none</property>
                     <property name="orientation">vertical</property>
                     <property name="value">1</property>
-                    <property name="size">large-toolbar</property>
+                    <property name="size">menu</property>
                     <property name="adjustment">volume_adjustment</property>
-                    <property name="icons">audio-volume-muted-symbolic
-audio-volume-high-symbolic
-audio-volume-low-symbolic
-audio-volume-medium-symbolic</property>
-                    <property name="use_symbolic">False</property>
                     <child internal-child="plus_button">
                       <object class="GtkButton">
                         <property name="can_focus">True</property>
diff --git a/src/libsushi/sushi-media-bin.c b/src/libsushi/sushi-media-bin.c
index 4bce95d..ac37cf8 100644
--- a/src/libsushi/sushi-media-bin.c
+++ b/src/libsushi/sushi-media-bin.c
@@ -97,6 +97,8 @@ typedef struct
   GtkLabel *title_label;
   GtkLabel *info_column_label[INFO_N_COLUMNS];
   GtkLabel *duration_label;
+  GtkLabel *progress_duration_label;
+  GtkLabel *progress_position_label;
 
   /* Thanks to GSK all the blitting will be done in GL */
   GtkRevealer *top_revealer;
@@ -843,10 +845,6 @@ sushi_media_bin_init_volume_button (SushiMediaBin    *self,
     }
 
   gtk_style_context_add_class (gtk_widget_get_style_context (popup), "sushi-media-bin");
-
-  /* Hide volume popup buttons */
-  gtk_widget_hide (gtk_scale_button_get_plus_button (button));
-  gtk_widget_hide (gtk_scale_button_get_minus_button (button));
 }
 
 static void
@@ -1061,8 +1059,8 @@ sushi_media_bin_get_preferred_width (GtkWidget *self,
     }
   else
     {
-      *minimum_width = 320;
-      *natural_width = priv->video_width ? priv->video_width : 640;
+      *minimum_width = priv->video_width ? 320 : 0;
+      *natural_width = priv->video_width ? priv->video_width : 0;
     }
 }
 
@@ -1080,8 +1078,8 @@ sushi_media_bin_get_preferred_height (GtkWidget *self,
     }
   else
     {
-      *minimum_height = 240;
-      *natural_height = priv->video_height ? priv->video_height : 480;
+      *minimum_height = priv->video_height ? 240 : 0;
+      *natural_height = priv->video_height ? priv->video_height : 0;
     }
 }
 
@@ -1201,6 +1199,8 @@ sushi_media_bin_class_init (SushiMediaBinClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, SushiMediaBin, title_label);
   gtk_widget_class_bind_template_child_private (widget_class, SushiMediaBin, info_box);
   gtk_widget_class_bind_template_child_private (widget_class, SushiMediaBin, duration_label);
+  gtk_widget_class_bind_template_child_private (widget_class, SushiMediaBin, progress_duration_label);
+  gtk_widget_class_bind_template_child_private (widget_class, SushiMediaBin, progress_position_label);
   gtk_widget_class_bind_template_child_private (widget_class, SushiMediaBin, top_revealer);
   gtk_widget_class_bind_template_child_private (widget_class, SushiMediaBin, bottom_revealer);
 
@@ -1437,6 +1437,7 @@ sushi_media_bin_update_duration (SushiMediaBin *self)
 
   duration = GST_TIME_AS_SECONDS (duration);
   gtk_label_set_label (priv->duration_label, format_time (duration));
+  gtk_label_set_label (priv->progress_duration_label, format_time (duration));
   gtk_adjustment_set_upper (priv->playback_adjustment, duration);
 }
 
@@ -1455,6 +1456,7 @@ sushi_media_bin_update_position (SushiMediaBin *self)
   gtk_adjustment_set_value (priv->playback_adjustment, position);
   priv->ignore_adjustment_changes = FALSE;
 
+  gtk_label_set_label (priv->progress_position_label, format_time (position));
   gtk_label_set_label (priv->audio_position_label, format_time (position));
 }
 
@@ -1582,7 +1584,7 @@ sushi_media_bin_handle_msg_state_changed (SushiMediaBin *self, GstMessage *msg)
   if (old_state == GST_STATE_READY && new_state == GST_STATE_PAUSED)
     {
       gtk_image_set_from_icon_name (priv->playback_image, SMB_ICON_NAME_PLAY, SMB_ICON_SIZE);
-      widget_set_visible (priv->play_box, TRUE);
+      widget_set_visible (priv->play_box, FALSE);
       sushi_media_bin_update_duration (self);
     }
   else if (new_state == GST_STATE_PLAYING)
@@ -1594,7 +1596,7 @@ sushi_media_bin_handle_msg_state_changed (SushiMediaBin *self, GstMessage *msg)
   else
     {
       gtk_image_set_from_icon_name (priv->playback_image, SMB_ICON_NAME_PLAY, SMB_ICON_SIZE);
-      widget_set_visible (priv->play_box, TRUE);
+      widget_set_visible (priv->play_box, FALSE);
       priv->position = 0;
       sushi_media_bin_set_tick_enabled (self, FALSE);
     }
diff --git a/src/libsushi/sushi-media-bin.css b/src/libsushi/sushi-media-bin.css
index 6cd6450..fb09bb6 100644
--- a/src/libsushi/sushi-media-bin.css
+++ b/src/libsushi/sushi-media-bin.css
@@ -23,40 +23,12 @@
  *
  */
 
-@define-color transparent-light rgba (1,1,1,.1);
-@define-color transparent-dark  rgba (.11,.11,.11,.8);
-@define-color highlight-color   #ff6835;
 @define-color audio-bg-color    #4c4c4c;
 
-/* hiden/shown  */
-sushi-media-bin *.hide {
-  transition: opacity .32s;
-  opacity: 0;
-}
-
-sushi-media-bin *.show {
-  transition: opacity .32s;
-  opacity: 1;
-}
-
 sushi-media-bin {
   background: black;
 }
 
-sushi-media-bin label,
-sushi-media-bin scale value {
-  color: white;
-}
-
-sushi-media-bin label:backdrop,
-sushi-media-bin scale value:backdrop {
-  color: darker(white);
-}
-
-sushi-media-bin box.overlay-bar {
-  background: @transparent-dark;
-}
-
 sushi-media-bin box.overlay-bar.top {
   padding: 12px;
 }
@@ -65,116 +37,14 @@ sushi-media-bin label.title {
   font: 18px Sans;
 }
 
-sushi-media-bin box.bottom button {
-  border: 0px;
-  border-radius: 0px;
-  box-shadow: none;
-  outline: 0px;
-  background: none;
-  padding: 8px;
-}
-
-sushi-media-bin box.bottom button:hover {
-  box-shadow: none;
-  background: rgba (0,0,0,.6);
-}
-
-/* Main play button */
-sushi-media-bin overlay > box {
-  font-size: 18px;
-  border: 0px;
-  border-radius: 2em;
-  padding: .7em 1em;
-  box-shadow: none;
-  background: @transparent-dark;
-}
-
-sushi-media-bin overlay > box > label {
-  padding-left: .64em;
-}
-
-/* Style media playback scale */
-sushi-media-bin scale {
-  margin-top: .5em;
-  padding: 3px 0px;
-  background-image: linear-gradient(to top, @transparent-dark 3px, transparent 3px);
-}
-
-sushi-media-bin scale trough {
-  border: 0;
-  border-radius: 0px;
-  padding: 1px;
-  background: @transparent-light;
-}
-
-sushi-media-bin scale slider {
-  min-height: 12px;
-  min-width: 12px;
-  margin: -4px;
-  border: 0px;
-  border-radius: 6px;
-  box-shadow: none;
-  background: none;
-}
-
-sushi-media-bin scale highlight {
-  border: 0px;
-  padding: 0px;
-  border-radius: 0px 4px 4px 0px;
-  background: @highlight-color;
-}
-
-sushi-media-bin scale value {
-  padding: 2px 0px;
-  border-radius: 1em;
-  background: @transparent-dark;
-}
-
-sushi-media-bin scale:hover slider {
-  background: white;
-}
-
-/* Volume popover */
-popover.sushi-media-bin {
-  border: 0px;
-  border-radius: 0px;
-  box-shadow: none;
-  background: none;
-}
-
-popover.sushi-media-bin scale {
-  border-radius: 18px;
-  padding: 6px;
-  background: @transparent-dark;
-}
-
-popover.sushi-media-bin scale trough {
-  outline: 0px;
-  border: 0px;
-  border-radius: 3px;
-  padding: 1px;
-  background: @transparent-light;
-}
-
-popover.sushi-media-bin scale highlight {
-  border: 0px;
-  padding: 0px;
-  border-radius: 4px;
-  background: @highlight-color;
-}
-
-popover.sushi-media-bin scale slider {
-  min-height: 12px;
-  min-width: 12px;
-  margin: -3px;
-  border: 0px;
-  border-radius: 6px;
-  box-shadow: none;
-  background: none;
+/* Controls */
+sushi-media-bin box.overlay-bar.bottom {
+    padding: 13px;
+    border-radius: 5px;
 }
 
-popover.sushi-media-bin scale:hover slider {
-  background: white;
+sushi-media-bin box.overlay-bar.bottom label {
+    margin: 0px 6px;
 }
 
 /* Audio nodes */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]