totem r5811 - in trunk: . src src/backend



Author: hadess
Date: Mon Dec  1 16:11:20 2008
New Revision: 5811
URL: http://svn.gnome.org/viewvc/totem?rev=5811&view=rev

Log:
2008-12-01  Bastien Nocera  <hadess hadess net>

	* src/backend/bacon-video-widget-gst-0.10.c (resize_video_window),
	(bacon_video_widget_size_allocate), (bacon_video_widget_set_zoom),
	(bacon_video_widget_get_zoom):
	Patch from Robin Stocker <robin nibor org> to add zoom support
	to the GStreamer backend (Closes: #171916)
	* src/backend/bacon-video-widget-xine.c:
	* src/backend/bacon-video-widget.h:
	* src/totem.c (totem_callback_connect):
	Remove _can_set_zoom() function, both our backends can



Modified:
   trunk/ChangeLog
   trunk/src/backend/bacon-video-widget-gst-0.10.c
   trunk/src/backend/bacon-video-widget-xine.c
   trunk/src/backend/bacon-video-widget.h
   trunk/src/totem.c

Modified: trunk/src/backend/bacon-video-widget-gst-0.10.c
==============================================================================
--- trunk/src/backend/bacon-video-widget-gst-0.10.c	(original)
+++ trunk/src/backend/bacon-video-widget-gst-0.10.c	Mon Dec  1 16:11:20 2008
@@ -184,6 +184,8 @@
 
   guint                        init_width;
   guint                        init_height;
+
+  gint                         zoom;
   
   gchar                       *media_device;
 
@@ -890,6 +892,51 @@
 }
 
 static void
+resize_video_window (BaconVideoWidget *bvw)
+{
+  const GtkAllocation *allocation;
+  gfloat width, height, ratio, x, y;
+  int w, h;
+
+  g_return_if_fail (bvw != NULL);
+  g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));
+
+  allocation = &GTK_WIDGET (bvw)->allocation;
+
+  get_media_size (bvw, &w, &h);
+  if (!w || !h) {
+    w = allocation->width;
+    h = allocation->height;
+  }
+  width = w;
+  height = h;
+
+  /* calculate ratio for fitting video into the available space */
+  if ((gfloat) allocation->width / width >
+      (gfloat) allocation->height / height) {
+    ratio = (gfloat) allocation->height / height;
+  } else {
+    ratio = (gfloat) allocation->width / width;
+  }
+
+  /* apply zoom factor */
+  ratio = ratio * bvw->priv->zoom / 100;
+
+  width *= ratio;
+  height *= ratio;
+  x = (allocation->width - width) / 2;
+  y = (allocation->height - height) / 2;
+
+  bvw->priv->video_window_allocation.width = width;
+  bvw->priv->video_window_allocation.height = height;
+  bvw->priv->video_window_allocation.x = x;
+  bvw->priv->video_window_allocation.y = y;
+
+  gdk_window_move_resize (bvw->priv->video_window, x, y, width, height);
+  gtk_widget_queue_draw (GTK_WIDGET (bvw));
+}
+
+static void
 bacon_video_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 {
   BaconVideoWidget *bvw = BACON_VIDEO_WIDGET (widget);
@@ -900,41 +947,12 @@
   widget->allocation = *allocation;
 
   if (GTK_WIDGET_REALIZED (widget)) {
-    gfloat width, height, ratio;
-    int w, h;
 
     gdk_window_move_resize (widget->window,
                             allocation->x, allocation->y,
                             allocation->width, allocation->height);
 
-    /* resize video_window */
-    get_media_size (bvw, &w, &h);
-    if (!w || !h) {
-      w = allocation->width;
-      h = allocation->height;
-    }
-    width = w;
-    height = h;
-
-    if ((gfloat) allocation->width / width >
-        (gfloat) allocation->height / height) {
-      ratio = (gfloat) allocation->height / height;
-    } else {
-      ratio = (gfloat) allocation->width / width;
-    }
-
-    width *= ratio;
-    height *= ratio;
-
-    bvw->priv->video_window_allocation.width = width;
-    bvw->priv->video_window_allocation.height = height;
-    bvw->priv->video_window_allocation.x = (allocation->width - width) / 2;
-    bvw->priv->video_window_allocation.y = (allocation->height - height) / 2;
-    gdk_window_move_resize (bvw->priv->video_window,
-                            (allocation->width - width) / 2,
-                            (allocation->height - height) / 2,
-                            width, height);
-    gtk_widget_queue_draw (widget);
+    resize_video_window (bvw);
   }
 }
 
@@ -3656,12 +3674,6 @@
   totem_widget_set_preferred_size (GTK_WIDGET (bvw), w, h);
 }
 
-gboolean
-bacon_video_widget_can_set_zoom (BaconVideoWidget *bvw)
-{
-  return FALSE;
-}
-
 void
 bacon_video_widget_set_zoom (BaconVideoWidget *bvw,
                              int               zoom)
@@ -3669,7 +3681,9 @@
   g_return_if_fail (bvw != NULL);
   g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));
 
-  /* implement me */
+  bvw->priv->zoom = zoom;
+  if (bvw->priv->video_window != NULL)
+    resize_video_window (bvw);
 }
 
 int
@@ -3678,7 +3692,7 @@
   g_return_val_if_fail (bvw != NULL, 100);
   g_return_val_if_fail (BACON_IS_VIDEO_WIDGET (bvw), 100);
 
-  return 100;
+  return bvw->priv->zoom;
 }
 
 /* Search for the color balance channel corresponding to type and return it. */

Modified: trunk/src/backend/bacon-video-widget-xine.c
==============================================================================
--- trunk/src/backend/bacon-video-widget-xine.c	(original)
+++ trunk/src/backend/bacon-video-widget-xine.c	Mon Dec  1 16:11:20 2008
@@ -3713,12 +3713,6 @@
 	totem_widget_set_preferred_size (toplevel, new_w, new_h);
 }
 
-gboolean
-bacon_video_widget_can_set_zoom (BaconVideoWidget *bvw)
-{
-	return TRUE;
-}
-
 void
 bacon_video_widget_set_zoom (BaconVideoWidget *bvw, int zoom)
 {

Modified: trunk/src/backend/bacon-video-widget.h
==============================================================================
--- trunk/src/backend/bacon-video-widget.h	(original)
+++ trunk/src/backend/bacon-video-widget.h	Mon Dec  1 16:11:20 2008
@@ -258,7 +258,6 @@
 void bacon_video_widget_set_scale_ratio          (BaconVideoWidget *bvw,
 						  float ratio);
 
-gboolean bacon_video_widget_can_set_zoom	 (BaconVideoWidget *bvw);
 void bacon_video_widget_set_zoom		 (BaconVideoWidget *bvw,
 						  int zoom);
 int bacon_video_widget_get_zoom			 (BaconVideoWidget *bvw);

Modified: trunk/src/totem.c
==============================================================================
--- trunk/src/totem.c	(original)
+++ trunk/src/totem.c	Mon Dec  1 16:11:20 2008
@@ -3150,8 +3150,6 @@
 	GtkBox *box;
 
 	/* Menu items */
-	gtk_action_group_set_visible (totem->zoom_action_group,
-		bacon_video_widget_can_set_zoom (totem->bvw));
 	action = GTK_ACTION (gtk_builder_get_object (totem->xml, "deinterlace"));
 	gtk_action_set_visible (action, bacon_video_widget_can_deinterlace (totem->bvw));
 



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