[Goodies-commits] r7868 - in parole/trunk: . data/interfaces parole po

Ali Abdallah aliov at xfce.org
Thu Jul 30 23:46:58 CEST 2009


Author: aliov
Date: 2009-07-30 21:46:58 +0000 (Thu, 30 Jul 2009)
New Revision: 7868

Modified:
   parole/trunk/ChangeLog
   parole/trunk/TODO
   parole/trunk/configure.ac.in
   parole/trunk/data/interfaces/parole.ui
   parole/trunk/parole/Makefile.am
   parole/trunk/parole/parole-conf.c
   parole/trunk/parole/parole-conf.h
   parole/trunk/parole/parole-gst.c
   parole/trunk/parole/parole-player.c
   parole/trunk/po/POTFILES.in
Log:
	* Supports for Aspect ratio views.
	* Remember the size of the main window set.

Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/ChangeLog	2009-07-30 21:46:58 UTC (rev 7868)
@@ -1,3 +1,7 @@
+2009-07-30: Ali aliov at xfce.org
+	* Supports for Aspect ratio views.
+	* Remember the size of the main window set.
+
 2009-07-29: Ali aliov at xfce.org
 	* Added session code for session interaction.
 	* Support nice sound fading on exit.

Modified: parole/trunk/TODO
===================================================================
--- parole/trunk/TODO	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/TODO	2009-07-30 21:46:58 UTC (rev 7868)
@@ -1,10 +1,11 @@
 === Media player ===
-* Support some aspect ratio view.
+* Complete the shortcut keys.
+* Handle missing gstreamer plugins.
 * Support scale ratio view.
-* Complete the shortcut keys.
 * Better support for cdda.
-* Handle missing gstreamer plugins.
 * Support some playlist title entity.
+* Use pixel-aspect-ratio info when calculating the 
+  aspect ratio.
 * ...
 
 === Plugins === 

Modified: parole/trunk/configure.ac.in
===================================================================
--- parole/trunk/configure.ac.in	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/configure.ac.in	2009-07-30 21:46:58 UTC (rev 7868)
@@ -89,6 +89,7 @@
 
 XDT_CHECK_PACKAGE([GST], [gstreamer-0.10], [gstreamer_minimum_version])
 XDT_CHECK_PACKAGE([GST_BASE], [gstreamer-base-0.10], [gstreamer_minimum_version])
+XDT_CHECK_PACKAGE([GST_VIDEO], [gstreamer-video-0.10], [gstreamer_minimum_version])
 XDT_CHECK_PACKAGE([GST_INTERFACES], [gstreamer-interfaces-0.10], [gstreamer_minimum_version])
 
 XDT_CHECK_PACKAGE([DBUS], [dbus-1], [dbus_minimum_version])

Modified: parole/trunk/data/interfaces/parole.ui
===================================================================
--- parole/trunk/data/interfaces/parole.ui	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/data/interfaces/parole.ui	2009-07-30 21:46:58 UTC (rev 7868)
@@ -9,6 +9,7 @@
     <property name="icon_name">parole</property>
     <signal name="destroy" handler="parole_player_destroy_cb"/>
     <signal name="key_press_event" handler="parole_player_key_press"/>
+    <signal name="configure_event" handler="parole_player_configure_event_cb"/>
     <signal name="delete_event" handler="parole_player_delete_event_cb" after="yes"/>
     <child>
       <object class="GtkVBox" id="vbox1">
@@ -120,6 +121,82 @@
                   <object class="GtkMenu" id="menu2">
                     <property name="visible">True</property>
                     <child>
+                      <object class="GtkMenuItem" id="menuitem1">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">Aspect Ratio</property>
+                        <property name="use_underline">True</property>
+                        <child type="submenu">
+                          <object class="GtkMenu" id="menu5">
+                            <property name="visible">True</property>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="ratio_none">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">None</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <signal name="toggled" handler="ratio_none_toggled_cb"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="ratio_auto">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Auto</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">ratio_none</property>
+                                <signal name="toggled" handler="ratio_auto_toggled_cb"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="ratio_square">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Square</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">ratio_none</property>
+                                <signal name="toggled" handler="ratio_square_toggled_cb"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="ratio_4_3">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">4:3 (TV)</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">ratio_none</property>
+                                <signal name="toggled" handler="ratio_4_3_toggled_cb"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="ratio_16_9">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">16:9 (Widescreen)</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">ratio_none</property>
+                                <signal name="toggled" handler="ratio_16_9_toggled_cb"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioMenuItem" id="ratio_20_9">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">20:9 (DVB)</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">ratio_none</property>
+                                <signal name="toggled" handler="ratio_20_9_toggled_cb"/>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparatorMenuItem" id="separatormenuitem3">
+                        <property name="visible">True</property>
+                      </object>
+                    </child>
+                    <child>
                       <object class="GtkImageMenuItem" id="fullscreen-menu">
                         <property name="label">gtk-fullscreen</property>
                         <property name="visible">True</property>
@@ -227,6 +304,7 @@
                             <child>
                               <object class="GtkHBox" id="output">
                                 <property name="visible">True</property>
+                                <property name="app_paintable">True</property>
                                 <child>
                                   <placeholder/>
                                 </child>

Modified: parole/trunk/parole/Makefile.am
===================================================================
--- parole/trunk/parole/Makefile.am	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/parole/Makefile.am	2009-07-30 21:46:58 UTC (rev 7868)
@@ -20,6 +20,7 @@
         $(LIBXFCE4GUI_CFLAGS)                   \
         $(LIBXFCE4UTIL_CFLAGS)			\
 	$(GST_CFLAGS)				\
+	$(GST_VIDEO_CFLAGS)			\
 	$(GST_BASE_CFLAGS)			\
 	$(GST_INTERFACES_CFLAGS)
 
@@ -40,6 +41,7 @@
         $(LIBXFCE4UTIL_LIBS)			\
 	$(GST_LIBS)				\
 	$(GST_BASE_LIBS)			\
+	$(GST_VIDEO_LIBS)			\
 	$(GST_INTERFACES_LIBS)
 
 GENERATED_FILES =				\
@@ -142,7 +144,8 @@
 	parole-gst.h				\
 	parole-plugin.h				\
 	parole-pl-parser.h			\
-	parole-stream.h
+	parole-stream.h				\
+	parole-conf.h
 
 if MAINTAINER_MODE
 
@@ -176,6 +179,7 @@
 		--fhead "#include \"parole-plugin.h\"\n\n" \
 		--fhead "#include \"parole-pl-parser.h\"\n\n" \
 		--fhead "#include \"parole-stream.h\"\n\n" \
+		--fhead "#include \"parole-conf.h\"\n\n" \
 		--fprod "\n/* enumerations from \"@filename@\" */" \
 		--vhead "GType\n at enum_name@_get_type (void)\n{\n  static GType etype = 0;\n  if (etype == 0) {\n    static const G at Type@Value values[] = {" \
 		--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \

Modified: parole/trunk/parole/parole-conf.c
===================================================================
--- parole/trunk/parole/parole-conf.c	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/parole/parole-conf.c	2009-07-30 21:46:58 UTC (rev 7868)
@@ -30,6 +30,7 @@
 
 #include "parole-conf.h"
 #include "parole-rc-utils.h"
+#include "enum-gtypes.h"
 
 #define PAROLE_CONF_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_CONF, ParoleConfPrivate))
@@ -49,6 +50,9 @@
     gint         contrast;
     gint         hue;
     gint         saturation;
+    ParoleAspectRatio aspect_ratio;
+    gint 	 window_width;
+    gint	 window_height;
 };
 
 static gpointer parole_conf_object = NULL;
@@ -68,7 +72,11 @@
     PROP_BRIGHTNESS,
     PROP_CONTRAST,
     PROP_HUE,
-    PROP_SATURATION
+    PROP_SATURATION,
+    PROP_ASPECT_RATIO,
+    PROP_WINDOW_WIDTH,
+    PROP_WINDOW_HEIGHT,
+    N_PROP
 };
 
 static void parole_conf_set_property (GObject *object,
@@ -132,6 +140,18 @@
 	    conf->priv->brightness = g_value_get_int (value);
 	    parole_rc_write_entry_int ("BRIGHTNESS", PAROLE_RC_GROUP_GENERAL, conf->priv->brightness);
 	    break;
+	case PROP_ASPECT_RATIO:
+	    conf->priv->aspect_ratio = g_value_get_enum (value);
+	    parole_rc_write_entry_int ("ASPECT_RATIO", PAROLE_RC_GROUP_GENERAL, conf->priv->aspect_ratio);
+	    break;
+	case PROP_WINDOW_WIDTH:
+	    conf->priv->window_width = g_value_get_int (value);
+	    parole_rc_write_entry_int ("WINDOW_WIDTH", PAROLE_RC_GROUP_GENERAL, conf->priv->window_width);
+	    break;
+	case PROP_WINDOW_HEIGHT:
+	    conf->priv->window_height = g_value_get_int (value);
+	    parole_rc_write_entry_int ("WINDOW_HEIGHT", PAROLE_RC_GROUP_GENERAL, conf->priv->window_height);
+	    break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
             goto out;
@@ -185,6 +205,15 @@
 	case PROP_BRIGHTNESS:
 	    g_value_set_int (value, conf->priv->brightness);
 	    break;
+	case PROP_ASPECT_RATIO:
+	    g_value_set_enum (value, conf->priv->aspect_ratio);
+	    break;
+	case PROP_WINDOW_WIDTH:
+	    g_value_set_int (value, conf->priv->window_width);
+	    break;
+	case PROP_WINDOW_HEIGHT:
+	    g_value_set_int (value, conf->priv->window_height);
+	    break;
 	default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
             break;
@@ -299,6 +328,32 @@
 						       0,
                                                        G_PARAM_READWRITE));
 						       
+    g_object_class_install_property (object_class,
+                                     PROP_ASPECT_RATIO,
+                                     g_param_spec_enum ("aspect-ratio",
+                                                        NULL, NULL,
+							ENUM_GTYPE_ASPECT_RATIO,
+							PAROLE_ASPECT_RATIO_NONE,
+                                                        G_PARAM_READWRITE));
+						       
+    g_object_class_install_property (object_class,
+                                     PROP_WINDOW_WIDTH,
+                                     g_param_spec_int ("window-width",
+                                                       NULL, NULL,
+                                                       320,
+						       G_MAXINT16,
+						       780,
+                                                       G_PARAM_READWRITE));
+						       
+    g_object_class_install_property (object_class,
+                                     PROP_WINDOW_HEIGHT,
+                                     g_param_spec_int ("window-height",
+                                                       NULL, NULL,
+                                                       220,
+						       G_MAXINT16,
+						       480,
+                                                       G_PARAM_READWRITE));
+						       
     g_type_class_add_private (klass, sizeof (ParoleConfPrivate));
 }
 
@@ -318,6 +373,9 @@
     conf->priv->hue = parole_rc_read_entry_int ("HUE", PAROLE_RC_GROUP_GENERAL, 0);
     conf->priv->contrast = parole_rc_read_entry_int ("CONTRAST", PAROLE_RC_GROUP_GENERAL, 0);
     conf->priv->brightness = parole_rc_read_entry_int ("BRIGHTNESS", PAROLE_RC_GROUP_GENERAL, 0);
+    conf->priv->aspect_ratio = parole_rc_read_entry_int ("ASPECT_RATIO", PAROLE_RC_GROUP_GENERAL, PAROLE_ASPECT_RATIO_NONE);
+    conf->priv->window_width = parole_rc_read_entry_int ("WINDOW_WIDTH", PAROLE_RC_GROUP_GENERAL, 780);
+    conf->priv->window_height = parole_rc_read_entry_int ("WINDOW_HEIGHT", PAROLE_RC_GROUP_GENERAL, 480);
 }
 
 ParoleConf *

Modified: parole/trunk/parole/parole-conf.h
===================================================================
--- parole/trunk/parole/parole-conf.h	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/parole/parole-conf.h	2009-07-30 21:46:58 UTC (rev 7868)
@@ -31,10 +31,11 @@
 
 typedef enum
 {
-    PAROLE_ASPECT_RATIO_AUTO ,
+    PAROLE_ASPECT_RATIO_NONE,
+    PAROLE_ASPECT_RATIO_AUTO,
     PAROLE_ASPECT_RATIO_SQUARE,
     PAROLE_ASPECT_RATIO_4_3,
-    PAROLE_ASPECT_RATIO_0,
+    PAROLE_ASPECT_RATIO_16_9,
     PAROLE_ASPECT_RATIO_DVB
 	
 } ParoleAspectRatio;

Modified: parole/trunk/parole/parole-gst.c
===================================================================
--- parole/trunk/parole/parole-gst.c	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/parole/parole-gst.c	2009-07-30 21:46:58 UTC (rev 7868)
@@ -31,6 +31,8 @@
 #include <gst/interfaces/xoverlay.h>
 #include <gst/interfaces/navigation.h>
 
+#include <gst/video/video.h>
+
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 
@@ -75,6 +77,7 @@
     gboolean      buffering;
     gboolean      update_color_balance;
     
+    ParoleAspectRatio aspect_ratio;
     
     /*
      * xvimage sink has brightness+hue+aturation+contrast.
@@ -113,7 +116,7 @@
     g_object_unref (gst->priv->stream);
     g_object_unref (gst->priv->playbin);
     g_object_unref (gst->priv->bus);
-    
+ 
     g_object_unref (gst->priv->logo);
     g_mutex_free (gst->priv->lock);
 
@@ -144,8 +147,23 @@
 static gboolean
 parole_gst_configure_event_cb (GtkWidget *widget, GdkEventConfigure *ev, ParoleGst *gst)
 {
+    return FALSE;
+}
+
+static gboolean
+parole_gst_parent_expose_event (GtkWidget *w, GdkEventExpose *ev, ParoleGst *gst)
+{
+    cairo_t *cr;
     
+    cr = gdk_cairo_create (w->window);
     
+    cairo_set_source_rgb (cr, 0.0f, 0.0f, 0.0f);
+    
+    cairo_rectangle (cr, w->allocation.x, w->allocation.y, w->allocation.width, w->allocation.height);
+    
+    cairo_fill (cr);
+    cairo_destroy (cr);
+    
     return FALSE;
 }
 
@@ -190,6 +208,9 @@
     
     g_signal_connect (gtk_widget_get_toplevel (widget), "configure_event",
 		      G_CALLBACK (parole_gst_configure_event_cb), gst);
+		      
+    g_signal_connect (gtk_widget_get_parent (widget), "expose_event",
+		      G_CALLBACK (parole_gst_parent_expose_event), gst);
 }
 
 static void
@@ -206,6 +227,85 @@
 }
 
 static void
+parole_gst_get_video_output_size (ParoleGst *gst, gint *ret_w, gint *ret_h)
+{
+    /*
+     * Default values returned if:
+     * 1) We are not playing.
+     * 2) Playing audio.
+     * 3) Playing video but we don't have its correct size yet.
+     */
+    *ret_w = GTK_WIDGET (gst)->allocation.width;
+    *ret_h = GTK_WIDGET (gst)->allocation.height;
+		
+    if ( gst->priv->state >= GST_STATE_PAUSED )
+    {
+	gboolean has_video;
+	guint video_w, video_h;
+	guint video_par_n, video_par_d;
+	guint dar_n, dar_d;
+	
+	g_object_get (G_OBJECT (gst->priv->stream),
+		      "has-video", &has_video,
+		      "video-width", &video_w,
+		      "video-height", &video_h,
+		      NULL);
+		      
+	if ( has_video )
+	{
+	    if ( video_w != 0 && video_h != 0 )
+	    {
+		switch ( gst->priv->aspect_ratio )
+		{
+		    case PAROLE_ASPECT_RATIO_NONE:
+			return;
+		    case PAROLE_ASPECT_RATIO_AUTO:
+			*ret_w = video_w;
+			*ret_h = video_h;
+			return;
+		    case PAROLE_ASPECT_RATIO_SQUARE:
+			video_par_n = 1;
+			video_par_d = 1;
+			break;
+		    case PAROLE_ASPECT_RATIO_16_9:
+			video_par_n = 16 * video_h;
+			video_par_d = 9 * video_w;
+			break;
+		    case PAROLE_ASPECT_RATIO_4_3:
+			video_par_n = 4 * video_h;
+			video_par_d = 3 * video_w;
+			break;
+		    case PAROLE_ASPECT_RATIO_DVB:
+			video_par_n = 20 * video_h;
+			video_par_d = 9 * video_w;
+			break;
+		    default:
+			return;
+		}
+		
+		if ( gst_video_calculate_display_ratio (&dar_n, &dar_d,
+							video_w, video_h,
+							video_par_n, video_par_d,
+							1, 1) )
+		{
+		    if (video_w % dar_n == 0) 
+		    {
+			*ret_w = video_w;
+			*ret_h = (guint) gst_util_uint64_scale (video_w, dar_d, dar_n);
+		    } 
+		    else 
+		    {
+			*ret_w = (guint) gst_util_uint64_scale (video_h, dar_n, dar_d);
+			*ret_h = video_w;
+		    }
+		    TRACE ("Got best video size %dx%d\n", *ret_w, *ret_h);
+		}
+	    }
+	}
+    }
+}
+
+static void
 parole_gst_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 {
     g_return_if_fail (allocation != NULL);
@@ -214,9 +314,30 @@
 
     if ( GTK_WIDGET_REALIZED (widget) )
     {
+	gint w, h;
+	gdouble ratio, width, height;
+	
+	w = allocation->width;
+	h = allocation->height;
+	
+	parole_gst_get_video_output_size (PAROLE_GST (widget), &w, &h);
+
+	width = w;
+	height = h;
+
+	if ( (gdouble) allocation->width / width > allocation->height / height)
+	    ratio = (gdouble) allocation->height / height;
+	else
+	    ratio = (gdouble) allocation->width / width;
+
+	width *= ratio;
+	height *= ratio;
+
 	gdk_window_move_resize (widget->window,
-                                allocation->x, allocation->y,
-                                allocation->width, allocation->height);
+                                allocation->x + (allocation->width - width)/2, 
+				allocation->y + (allocation->height - height)/2,
+                                width, 
+				height);
 				
 	gtk_widget_queue_draw (widget);
     }
@@ -343,7 +464,8 @@
 
     parole_gst_set_x_overlay (gst);
 
-    if ( (gst->priv->state < GST_STATE_PAUSED || !gst->priv->with_vis ) && !playing_video && !gst->priv->buffering)
+    if ( (gst->priv->state < GST_STATE_PAUSED || !gst->priv->with_vis ) && 
+	!playing_video && !gst->priv->buffering)
 	parole_gst_draw_logo (gst);
     else 
     {
@@ -545,24 +667,6 @@
 }
 
 static void
-parole_gst_set_size (GtkWidget *widget, gint w, gint h)
-{
-    GdkScreen *screen;
-    GtkWidget *toplevel;
-    gint monitor;
-    
-    toplevel = gtk_widget_get_toplevel (widget);
-    
-    gtk_widget_set_size_request (GTK_WIDGET (widget), w, h);
-    
-    screen = gtk_window_get_screen (GTK_WINDOW (toplevel));
-    
-    monitor = gdk_screen_get_monitor_at_window (screen, toplevel->window),
-    
-    xfce_gtk_window_center_on_monitor (GTK_WINDOW (toplevel), screen, monitor);
-}
-
-static void
 parole_gst_get_pad_capabilities (GObject *object, GParamSpec *pspec, ParoleGst *gst)
 {
     GstPad *pad;
@@ -587,13 +691,17 @@
 		      "video-width", width,
 		      "video-height", height,
 		      NULL);
-	parole_gst_set_size (GTK_WIDGET (gst), width, height);
+
 	if ( ( value = gst_structure_get_value (st, "pixel-aspect-ratio")) )
 	{
 	    num = gst_value_get_fraction_numerator (value),
 	    den = gst_value_get_fraction_denominator (value);
 	    TRACE ("FIXME: Use these value num=%d den=%d \n", num, den);
 	}
+		      
+	parole_gst_get_video_output_size (gst, &width, &height);
+	
+	parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
     }
 }
 
@@ -756,6 +864,7 @@
 	    }
 	    else if ( gst->priv->target == GST_STATE_READY)
 	    {
+		parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
 		parole_gst_draw_logo (gst);
 	    }
 	    break;
@@ -859,9 +968,9 @@
     {
 	parole_gst_update_stream_info (gst);
     }
-    else 
+    else if ( !g_strcmp0 (name, "video-size") )
     {
-	//FIXME: Handle video size message.
+	parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
     }
 }
 
@@ -1103,6 +1212,7 @@
     parole_gst_load_logo (gst);
     parole_gst_set_subtitle_encoding (gst);
     parole_gst_set_subtitle_font (gst);
+    
 }
 
 static gboolean
@@ -1222,6 +1332,14 @@
 	if ( gst->priv->state >= GST_STATE_PAUSED )
 	    parole_gst_set_video_color_balance (gst);
     }
+    else if ( !g_strcmp0 ("aspect-ratio", spec->name) )
+    {
+	g_object_get (G_OBJECT (gst->priv->conf),
+		      "aspect-ratio", &gst->priv->aspect_ratio,
+		      NULL);
+		  
+	parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
+    }
 }
 
 static void
@@ -1313,6 +1431,10 @@
     
     gst->priv->conf = parole_conf_new ();
     
+    g_object_get (G_OBJECT (gst->priv->conf),
+		  "aspect-ratio", &gst->priv->aspect_ratio,
+		  NULL);
+    
     g_signal_connect (G_OBJECT (gst->priv->conf), "notify",
 		      G_CALLBACK (parole_gst_conf_notify_cb), gst);
     
@@ -1434,7 +1556,7 @@
 		step = volume - volume / 10;
 		parole_gst_set_volume (gst, step < 0.01 ? 0 : step);
 		volume = parole_gst_get_volume (gst);
-		g_usleep (30000);
+		g_usleep (35000);
 	    }
 	}
     }

Modified: parole/trunk/parole/parole-player.c
===================================================================
--- parole/trunk/parole/parole-player.c	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/parole/parole-player.c	2009-07-30 21:46:58 UTC (rev 7868)
@@ -54,6 +54,10 @@
 /*
  * GtkBuilder Callbacks
  */
+gboolean        parole_player_configure_event_cb        (GtkWidget *widget, 
+							 GdkEventConfigure *ev, 
+							 ParolePlayer *player);
+							 
 gboolean	parole_player_range_button_press 	(GtkWidget *widget, 
 							 GdkEventButton *ev, 
 							 ParolePlayer *player);
@@ -128,6 +132,27 @@
 void		parole_player_repeat_toggled_cb		(GtkWidget *widget,
 							 ParolePlayer *player);
 
+/*
+ * Aspect ratio
+ */
+void		ratio_none_toggled_cb			(GtkWidget *widget,
+							 ParolePlayer *player);
+
+void		ratio_auto_toggled_cb			(GtkWidget *widget,
+							 ParolePlayer *player);
+
+void		ratio_square_toggled_cb			(GtkWidget *widget,
+							 ParolePlayer *player);
+
+void		ratio_4_3_toggled_cb			(GtkWidget *widget,
+							 ParolePlayer *player);
+
+void		ratio_16_9_toggled_cb			(GtkWidget *widget,
+							 ParolePlayer *player);
+
+void		ratio_20_9_toggled_cb			(GtkWidget *widget,
+							 ParolePlayer *player);
+
 void	        parole_show_about			(GtkWidget *widget);
 
 gboolean	parole_player_key_press 		(GtkWidget *widget, 
@@ -193,6 +218,48 @@
     parole_about (_("Parole Media Player"));
 }
 
+void ratio_none_toggled_cb (GtkWidget *widget, ParolePlayer *player)
+{
+    g_object_set (G_OBJECT (player->priv->conf),
+		  "aspect-ratio", PAROLE_ASPECT_RATIO_NONE,
+		  NULL);
+}
+
+void ratio_auto_toggled_cb (GtkWidget *widget, ParolePlayer *player)
+{
+    g_object_set (G_OBJECT (player->priv->conf),
+		  "aspect-ratio", PAROLE_ASPECT_RATIO_AUTO,
+		  NULL);
+}
+
+void ratio_square_toggled_cb (GtkWidget *widget, ParolePlayer *player)
+{
+     g_object_set (G_OBJECT (player->priv->conf),
+		  "aspect-ratio", PAROLE_ASPECT_RATIO_SQUARE,
+		  NULL);
+}
+
+void ratio_4_3_toggled_cb (GtkWidget *widget, ParolePlayer *player)
+{
+    g_object_set (G_OBJECT (player->priv->conf),
+		  "aspect-ratio", PAROLE_ASPECT_RATIO_4_3,
+		  NULL);
+}
+
+void ratio_16_9_toggled_cb (GtkWidget *widget, ParolePlayer *player)
+{
+    g_object_set (G_OBJECT (player->priv->conf),
+		  "aspect-ratio", PAROLE_ASPECT_RATIO_16_9,
+		  NULL);
+}
+
+void ratio_20_9_toggled_cb (GtkWidget *widget, ParolePlayer *player)
+{
+    g_object_set (G_OBJECT (player->priv->conf),
+		  "aspect-ratio", PAROLE_ASPECT_RATIO_DVB,
+		  NULL);
+}
+
 void parole_player_show_hide_playlist (GtkButton *button, ParolePlayer *player)
 {
     GtkWidget *img;
@@ -779,7 +846,6 @@
 				     gdk_screen_get_monitor_at_window (screen, player->priv->window->window),
 				     &rect);
     
-    
     gtk_window_resize (GTK_WINDOW (player->priv->fs_window), 
 		       rect.width, 
 		       player->priv->play_box->allocation.width);
@@ -1111,7 +1177,7 @@
 
 void parole_player_volume_muted (GtkWidget *widget, ParolePlayer *player)
 {
-    
+    gtk_range_set_value (GTK_RANGE (player->priv->volume), 0);
 }
 
 static void
@@ -1199,10 +1265,68 @@
 }
 
 static void
+parole_gst_set_default_aspect_ratio (ParolePlayer *player, GtkBuilder *builder)
+{
+    ParoleAspectRatio ratio;
+    const gchar *widget_name;
+    
+    g_object_get (G_OBJECT (player->priv->conf),
+		  "aspect-ratio", &ratio,
+		  NULL);
+		  
+    switch (ratio )
+    {
+	case PAROLE_ASPECT_RATIO_NONE:
+	    widget_name = "ratio_none";
+	    break;
+	case PAROLE_ASPECT_RATIO_AUTO:
+	    widget_name = "ratio_auto";
+	    break;
+	case PAROLE_ASPECT_RATIO_SQUARE:
+	    widget_name = "ratio_square";
+	    break;
+	case PAROLE_ASPECT_RATIO_16_9:
+	    widget_name = "ratio_16_9";
+	    break;
+	case PAROLE_ASPECT_RATIO_4_3:
+	    widget_name = "ratio_4_3";
+	    break;
+	case PAROLE_ASPECT_RATIO_DVB:
+	    widget_name = "ratio_20_9";
+	    break;
+	default:
+	    g_warn_if_reached ();
+	    return;
+    }
+	
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_builder_get_object (builder, widget_name)), 
+				    TRUE);
+}
+
+gboolean
+parole_player_configure_event_cb (GtkWidget *widget, GdkEventConfigure *ev, ParolePlayer *player)
+{
+    gint w,h;
+    
+    if ( !player->priv->full_screen )
+    {
+	gtk_window_get_size (GTK_WINDOW (widget), &w, &h);
+	g_object_set (G_OBJECT (player->priv->conf),
+		      "window-width", w,
+		      "window-height", h,
+		      NULL);
+    }
+    
+    return FALSE;
+}
+
+static void
 parole_player_init (ParolePlayer *player)
 {
     GtkBuilder *builder;
     GdkScreen *screen;
+    gint w, h;
+    
     gboolean repeat, shuffle;
     
     player->priv = PAROLE_PLAYER_GET_PRIVATE (player);
@@ -1296,10 +1420,14 @@
     gtk_notebook_append_page (GTK_NOTEBOOK (player->priv->playlist_nt), 
 			      GTK_WIDGET (player->priv->list),
 			      gtk_label_new (_("Playlist")));
+			      
+    g_object_get (G_OBJECT (player->priv->conf),
+		  "window-width", &w,
+		  "window-height", &h,
+		  NULL);
     
-    /*
-     * Pack the statusbar.
-     */
+    gtk_window_set_default_size (GTK_WINDOW (player->priv->window), w, h);
+    
     gtk_widget_show_all (player->priv->window);
     
     gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "output")), 
@@ -1335,6 +1463,8 @@
     player->priv->fs_window = gtk_window_new (GTK_WINDOW_POPUP);
     gtk_window_set_skip_pager_hint (GTK_WINDOW (player->priv->fs_window), TRUE);
     gtk_window_set_skip_taskbar_hint (GTK_WINDOW (player->priv->fs_window), TRUE);
+
+    parole_gst_set_default_aspect_ratio (player, builder);
 	
     gtk_builder_connect_signals (builder, player);
     

Modified: parole/trunk/po/POTFILES.in
===================================================================
--- parole/trunk/po/POTFILES.in	2009-07-30 11:18:58 UTC (rev 7867)
+++ parole/trunk/po/POTFILES.in	2009-07-30 21:46:58 UTC (rev 7868)
@@ -17,5 +17,6 @@
 parole/parole-about.c
 parole/parole-disc.c
 parole/parole-subtitle-encoding.c
+parole/parole-open-location.c
 plugins/properties/stream-properties.c
 plugins/tray/tray-icon.c




More information about the Goodies-commits mailing list