totem r5811 - in trunk: . src src/backend
- From: hadess svn gnome org
- To: svn-commits-list gnome org
- Subject: totem r5811 - in trunk: . src src/backend
- Date: Mon, 1 Dec 2008 16:11:21 +0000 (UTC)
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 = >K_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]