Commit a726a941 authored by Philip Withnall's avatar Philip Withnall Committed by Philip Withnall

Patches from Víctor Manuel Jáquez Leal <vjaquez@igalia.com> to use

2009-04-15  Philip Withnall  <philip@tecnocode.co.uk>

	* src/backend/bacon-video-widget-gst-0.10.c
	(bacon_video_widget_show), (bacon_video_widget_hide),
	(bacon_video_widget_expose_event),
	(bacon_video_widget_size_allocate), (bacon_video_widget_init),
	(bvw_handle_application_message), (bvw_handle_element_message),
	(bacon_video_widget_set_show_cursor):
	* src/backend/bacon-video-widget-xine.c (load_video_out_driver),
	(xine_event), (bacon_video_widget_unrealize),
	(bacon_video_widget_expose), (bacon_video_widget_show),
	(bacon_video_widget_hide), (bacon_video_widget_size_allocate),
	(bacon_video_widget_set_show_cursor),
	(bacon_video_widget_set_scale_ratio): Patches from Víctor Manuel
	Jáquez Leal <vjaquez@igalia.com> to use proper GtkWidget accessors
	in BaconVideoWidget. (Helps: #578591)


svn path=/trunk/; revision=6261
parent 03cc8cbc
2009-04-15 Philip Withnall <philip@tecnocode.co.uk>
* src/backend/bacon-video-widget-gst-0.10.c
(bacon_video_widget_show), (bacon_video_widget_hide),
(bacon_video_widget_expose_event),
(bacon_video_widget_size_allocate), (bacon_video_widget_init),
(bvw_handle_application_message), (bvw_handle_element_message),
(bacon_video_widget_set_show_cursor):
* src/backend/bacon-video-widget-xine.c (load_video_out_driver),
(xine_event), (bacon_video_widget_unrealize),
(bacon_video_widget_expose), (bacon_video_widget_show),
(bacon_video_widget_hide), (bacon_video_widget_size_allocate),
(bacon_video_widget_set_show_cursor),
(bacon_video_widget_set_scale_ratio): Patches from Víctor Manuel
Jáquez Leal <vjaquez@igalia.com> to use proper GtkWidget accessors
in BaconVideoWidget. (Helps: #578591)
2009-04-15 Philip Withnall <philip@tecnocode.co.uk>
* src/backend/bacon-video-widget-gst-0.10.c (resize_video_window),
......
......@@ -581,9 +581,11 @@ static void
bacon_video_widget_show (GtkWidget *widget)
{
BaconVideoWidget *bvw = BACON_VIDEO_WIDGET (widget);
GdkWindow *window;
if (widget->window)
gdk_window_show (widget->window);
window = gtk_widget_get_window (widget);
if (window)
gdk_window_show (window);
if (bvw->priv->video_window)
gdk_window_show (bvw->priv->video_window);
......@@ -595,9 +597,11 @@ static void
bacon_video_widget_hide (GtkWidget *widget)
{
BaconVideoWidget *bvw = BACON_VIDEO_WIDGET (widget);
GdkWindow *window;
if (widget->window)
gdk_window_hide (widget->window);
window = gtk_widget_get_window (widget);
if (window)
gdk_window_hide (window);
if (bvw->priv->video_window)
gdk_window_hide (bvw->priv->video_window);
......@@ -637,6 +641,7 @@ bacon_video_widget_expose_event (GtkWidget *widget, GdkEventExpose *event)
GstXOverlay *xoverlay;
gboolean draw_logo;
XID window;
GdkWindow *win;
if (event && event->count > 0)
return TRUE;
......@@ -658,7 +663,8 @@ bacon_video_widget_expose_event (GtkWidget *widget, GdkEventExpose *event)
gst_x_overlay_set_xwindow_id (xoverlay, window);
/* Start with a nice black canvas */
gdk_draw_rectangle (widget->window, widget->style->black_gc, TRUE, 0, 0,
win = gtk_widget_get_window (widget);
gdk_draw_rectangle (win, gtk_widget_get_style (widget)->black_gc, TRUE, 0, 0,
widget->allocation.width, widget->allocation.height);
/* if there's only audio and no visualisation, draw the logo as well */
......@@ -679,11 +685,10 @@ bacon_video_widget_expose_event (GtkWidget *widget, GdkEventExpose *event)
rect.height = widget->allocation.height;
region = gdk_region_rectangle (&rect);
gdk_window_begin_paint_region (widget->window,
region);
gdk_window_begin_paint_region (win, region);
gdk_region_destroy (region);
gdk_window_clear_area (widget->window,
gdk_window_clear_area (win,
0, 0,
widget->allocation.width,
widget->allocation.height);
......@@ -705,22 +710,22 @@ bacon_video_widget_expose_event (GtkWidget *widget, GdkEventExpose *event)
if (s_width <= 1 || s_height <= 1) {
if (xoverlay != NULL)
gst_object_unref (xoverlay);
gdk_window_end_paint (widget->window);
gdk_window_end_paint (win);
return TRUE;
}
logo = gdk_pixbuf_scale_simple (bvw->priv->logo_pixbuf,
s_width, s_height, GDK_INTERP_BILINEAR);
gdk_draw_pixbuf (widget->window, widget->style->fg_gc[0], logo,
gdk_draw_pixbuf (win, gtk_widget_get_style (widget)->fg_gc[0], logo,
0, 0, (w_width - s_width) / 2, (w_height - s_height) / 2,
s_width, s_height, GDK_RGB_DITHER_NONE, 0, 0);
gdk_window_end_paint (widget->window);
gdk_window_end_paint (win);
g_object_unref (logo);
} else if (widget->window) {
} else if (win) {
/* No pixbuf, just draw a black background then */
gdk_window_clear_area (widget->window,
gdk_window_clear_area (win,
0, 0,
widget->allocation.width,
widget->allocation.height);
......@@ -731,7 +736,7 @@ bacon_video_widget_expose_event (GtkWidget *widget, GdkEventExpose *event)
gst_x_overlay_expose (xoverlay);
else {
/* No xoverlay to expose yet */
gdk_window_clear_area (widget->window,
gdk_window_clear_area (win,
0, 0,
widget->allocation.width,
widget->allocation.height);
......@@ -895,7 +900,7 @@ bacon_video_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
if (GTK_WIDGET_REALIZED (widget)) {
gdk_window_move_resize (widget->window,
gdk_window_move_resize (gtk_widget_get_window (widget),
allocation->x, allocation->y,
allocation->width, allocation->height);
......@@ -1073,6 +1078,8 @@ bacon_video_widget_init (BaconVideoWidget * bvw)
GTK_WIDGET_SET_FLAGS (GTK_WIDGET (bvw), GTK_CAN_FOCUS);
GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (bvw), GTK_DOUBLE_BUFFERED);
gtk_event_box_set_visible_window (GTK_EVENT_BOX (bvw), TRUE);
bvw->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (bvw, BACON_TYPE_VIDEO_WIDGET, BaconVideoWidgetPrivate);
bvw->com = g_new0 (BaconVideoWidgetCommon, 1);
......@@ -1121,6 +1128,7 @@ static void
bvw_handle_application_message (BaconVideoWidget *bvw, GstMessage *msg)
{
const gchar *msg_name;
GdkWindow *window;
msg_name = gst_structure_get_name (msg->structure);
g_return_if_fail (msg_name != NULL);
......@@ -1149,10 +1157,11 @@ bvw_handle_application_message (BaconVideoWidget *bvw, GstMessage *msg)
/* Uhm, so this ugly hack here makes media loading work for
* weird laptops with NVIDIA graphics cards... Dunno what the
* bug is really, but hey, it works. :). */
if (GTK_WIDGET (bvw)->window) {
gdk_window_hide (GTK_WIDGET (bvw)->window);
gdk_window_show (GTK_WIDGET (bvw)->window);
window = gtk_widget_get_window (GTK_WIDGET (bvw));
if (window) {
gdk_window_hide (window);
gdk_window_show (window);
bacon_video_widget_expose_event (GTK_WIDGET (bvw), NULL);
}
}
......@@ -1225,7 +1234,8 @@ bvw_handle_element_message (BaconVideoWidget *bvw, GstMessage *msg)
bvw->priv->cursor = NULL;
}
}
gdk_window_set_cursor (GTK_WIDGET(bvw)->window, bvw->priv->cursor);
gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET(bvw)),
bvw->priv->cursor);
break;
}
default:
......@@ -3235,19 +3245,22 @@ void
bacon_video_widget_set_show_cursor (BaconVideoWidget * bvw,
gboolean show_cursor)
{
GdkWindow *window;
g_return_if_fail (bvw != NULL);
g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));
bvw->priv->cursor_shown = show_cursor;
if (!GTK_WIDGET (bvw)->window) {
window = gtk_widget_get_window (GTK_WIDGET (bvw));
if (!window) {
return;
}
if (show_cursor == FALSE) {
totem_gdk_window_set_invisible_cursor (GTK_WIDGET (bvw)->window);
totem_gdk_window_set_invisible_cursor (window);
} else {
gdk_window_set_cursor (GTK_WIDGET (bvw)->window, bvw->priv->cursor);
gdk_window_set_cursor (window, bvw->priv->cursor);
}
}
......
......@@ -648,7 +648,7 @@ load_video_out_driver (BaconVideoWidget *bvw, BvwUseType type)
vis.display = bvw->priv->display;
vis.screen = bvw->priv->screen;
vis.d = GDK_WINDOW_XID (GTK_WIDGET(bvw)->window);
vis.d = GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET(bvw)));
res_h = (DisplayWidth (bvw->priv->display, bvw->priv->screen) * 1000 /
DisplayWidthMM (bvw->priv->display,
bvw->priv->screen));
......@@ -1463,7 +1463,7 @@ xine_event (void *user_data, const xine_event_t *event)
bvw->priv->cursor = NULL;
}
}
gdk_window_set_cursor (GTK_WIDGET(bvw)->window,
gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET(bvw)),
bvw->priv->cursor);
break;
case XINE_EVENT_UI_PLAYBACK_FINISHED:
......@@ -1669,7 +1669,7 @@ bacon_video_widget_unrealize (GtkWidget *widget)
xine_port_send_gui_data (bvw->priv->vo_driver,
XINE_GUI_SEND_WILL_DESTROY_DRAWABLE,
(void*)widget->window);
(void*) gtk_widget_get_window (widget));
g_object_unref (bvw->priv->bacon_resize);
......@@ -1850,23 +1850,25 @@ bacon_video_widget_expose (GtkWidget *widget, GdkEventExpose *event)
gfloat ratio;
GdkRegion *region;
GdkRectangle rect;
GdkWindow *window;
rect.x = rect.y = 0;
rect.width = widget->allocation.width;
rect.height = widget->allocation.height;
region = gdk_region_rectangle (&rect);
gdk_window_begin_paint_region (widget->window,
region);
window = gtk_widget_get_window (widget);
gdk_window_begin_paint_region (window, region);
gdk_region_destroy (region);
gdk_window_clear_area (widget->window,
gdk_window_clear_area (window,
0, 0,
widget->allocation.width,
widget->allocation.height);
if (bvw->priv->logo_pixbuf == NULL) {
gdk_window_end_paint (widget->window);
gdk_window_end_paint (window);
return FALSE;
}
......@@ -1885,20 +1887,21 @@ bacon_video_widget_expose (GtkWidget *widget, GdkEventExpose *event)
s_height *= ratio;
if (s_width <= 1 || s_height <= 1) {
gdk_window_end_paint (widget->window);
gdk_window_end_paint (window);
return FALSE;
}
logo = gdk_pixbuf_scale_simple (bvw->priv->logo_pixbuf,
s_width, s_height, GDK_INTERP_BILINEAR);
gdk_draw_pixbuf (widget->window, widget->style->fg_gc[0], logo,
gdk_draw_pixbuf (window,
gtk_widget_get_style (widget)->fg_gc[0], logo,
0, 0,
(w_width - s_width) / 2,
(w_height - s_height) / 2,
s_width, s_height, GDK_RGB_DITHER_NONE, 0, 0);
gdk_window_end_paint (widget->window);
gdk_window_end_paint (window);
g_object_unref (logo);
}
......@@ -1945,8 +1948,11 @@ bacon_video_widget_button_press (GtkWidget *widget, GdkEventButton *event)
static void
bacon_video_widget_show (GtkWidget *widget)
{
if (widget->window != NULL)
gdk_window_show (widget->window);
GdkWindow *window;
window = gtk_widget_get_window (widget);
if (window != NULL)
gdk_window_show (window);
if (GTK_WIDGET_CLASS (parent_class)->show != NULL)
(* GTK_WIDGET_CLASS (parent_class)->show) (widget);
......@@ -1955,8 +1961,11 @@ bacon_video_widget_show (GtkWidget *widget)
static void
bacon_video_widget_hide (GtkWidget *widget)
{
if (widget->window != NULL)
gdk_window_hide (widget->window);
GdkWindow *window;
window = gtk_widget_get_window (widget);
if (window != NULL)
gdk_window_hide (window);
if (GTK_WIDGET_CLASS (parent_class)->hide != NULL)
(* GTK_WIDGET_CLASS (parent_class)->hide) (widget);
......@@ -1994,7 +2003,7 @@ bacon_video_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
if (GTK_WIDGET_REALIZED (widget))
{
gdk_window_move_resize (widget->window,
gdk_window_move_resize (gtk_widget_get_window (widget),
allocation->x,
allocation->y,
allocation->width,
......@@ -2997,15 +3006,17 @@ void
bacon_video_widget_set_show_cursor (BaconVideoWidget *bvw,
gboolean show_cursor)
{
GdkWindow *window;
g_return_if_fail (bvw != NULL);
g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));
window = gtk_widget_get_window (GTK_WIDGET (bvw));
if (show_cursor == FALSE)
{
totem_gdk_window_set_invisible_cursor (GTK_WIDGET(bvw)->window);
totem_gdk_window_set_invisible_cursor (window);
} else {
gdk_window_set_cursor (GTK_WIDGET(bvw)->window,
bvw->priv->cursor);
gdk_window_set_cursor (window, bvw->priv->cursor);
}
bvw->priv->cursor_shown = show_cursor;
......@@ -3559,6 +3570,7 @@ bacon_video_widget_set_scale_ratio (BaconVideoWidget *bvw, gfloat ratio)
{
GtkWidget *toplevel, *widget;
int new_w, new_h, win_w, win_h;
GdkWindow *window;
g_return_if_fail (bvw != NULL);
g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));
......@@ -3570,15 +3582,16 @@ bacon_video_widget_set_scale_ratio (BaconVideoWidget *bvw, gfloat ratio)
return;
widget = GTK_WIDGET (bvw);
window = gtk_widget_get_window (widget);
/* Try best fit for the screen */
if (ratio == 0)
{
if (totem_ratio_fits_screen (widget->window, bvw->priv->video_width, bvw->priv->video_height, 2) != FALSE) {
if (totem_ratio_fits_screen (window, bvw->priv->video_width, bvw->priv->video_height, 2) != FALSE) {
ratio = 2;
} else if (totem_ratio_fits_screen (widget->window, bvw->priv->video_width, bvw->priv->video_height, 1) != FALSE) {
} else if (totem_ratio_fits_screen (window, bvw->priv->video_width, bvw->priv->video_height, 1) != FALSE) {
ratio = 1;
} else if (totem_ratio_fits_screen (widget->window, bvw->priv->video_width, bvw->priv->video_height, 0.5) != FALSE) {
} else if (totem_ratio_fits_screen (window, bvw->priv->video_width, bvw->priv->video_height, 0.5) != FALSE) {
ratio = 0.5;
} else {
return;
......@@ -3586,14 +3599,15 @@ bacon_video_widget_set_scale_ratio (BaconVideoWidget *bvw, gfloat ratio)
} else {
/* don't scale to something bigger than the screen, and leave
* us some room */
if (totem_ratio_fits_screen (widget->window, bvw->priv->video_width, bvw->priv->video_height, ratio) == FALSE)
if (totem_ratio_fits_screen (window, bvw->priv->video_width, bvw->priv->video_height, ratio) == FALSE)
return;
}
toplevel = gtk_widget_get_toplevel (widget);
window = gtk_widget_get_window (toplevel);
/* Get the size of the toplevel window */
gdk_drawable_get_size (GDK_DRAWABLE (toplevel->window),
gdk_drawable_get_size (GDK_DRAWABLE (window),
&win_w, &win_h);
/* Calculate the new size of the window, depending on the size of the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment