148
111
brasero_player_video_zoom_out (BraseroPlayer *player)
152
GtkAllocation player_allocation, bacon_allocation;
154
gtk_widget_set_sensitive (GTK_WIDGET (player->priv->video_zoom_in), TRUE);
156
gtk_widget_get_allocation (GTK_WIDGET (player->priv->bacon), &bacon_allocation);
157
width = bacon_allocation.width;
158
height = bacon_allocation.height;
160
width -= PLAYER_BACON_WIDTH / 3;
161
height -= PLAYER_BACON_HEIGHT / 3;
163
gtk_widget_get_allocation (GTK_WIDGET (player), &player_allocation);
164
parent = gtk_widget_get_parent (player->priv->controls);
165
if (width < player_allocation.width / 2 &&
166
gtk_widget_get_parent (player->priv->controls) == player->priv->vbox) {
167
g_object_ref (player->priv->controls);
168
gtk_container_remove (GTK_CONTAINER (player->priv->vbox),
169
player->priv->controls);
171
gtk_box_pack_start (GTK_BOX (player->priv->hbox),
172
player->priv->controls,
176
g_object_unref (player->priv->controls);
178
gtk_box_set_child_packing (GTK_BOX (player->priv->hbox),
179
gtk_widget_get_parent (player->priv->notebook),
186
if (width <= PLAYER_BACON_WIDTH ||
187
height <= PLAYER_BACON_HEIGHT) {
188
width = PLAYER_BACON_WIDTH;
189
height = PLAYER_BACON_HEIGHT;
190
gtk_widget_set_sensitive (GTK_WIDGET (player->priv->video_zoom_out), FALSE);
193
player->priv->video_width = width;
194
player->priv->video_height = height;
113
player->priv->video_width -= PLAYER_BACON_WIDTH / 3;
114
player->priv->video_height -= PLAYER_BACON_HEIGHT / 3;
116
if (player->priv->video_width <= PLAYER_BACON_WIDTH ||
117
player->priv->video_height <= PLAYER_BACON_HEIGHT) {
118
player->priv->video_width = PLAYER_BACON_WIDTH;
119
player->priv->video_height = PLAYER_BACON_HEIGHT;
196
122
gtk_widget_set_size_request (GTK_WIDGET (player->priv->bacon),
202
brasero_player_video_zoom_out_button_cb (GtkButton *button,
203
BraseroPlayer *player)
205
brasero_player_video_zoom_out (player);
123
player->priv->video_width,
124
player->priv->video_height);
209
128
brasero_player_video_zoom_in (BraseroPlayer *player)
211
GtkAllocation player_allocation, bacon_allocation;
214
gtk_widget_set_sensitive (GTK_WIDGET (player->priv->video_zoom_out), TRUE);
216
gtk_widget_get_allocation (player->priv->bacon, &bacon_allocation);
217
width = bacon_allocation.width;
218
height = bacon_allocation.height;
220
width += PLAYER_BACON_WIDTH / 3;
221
height += PLAYER_BACON_HEIGHT / 3;
223
gtk_widget_get_allocation (GTK_WIDGET (player), &player_allocation);
224
if (width >= (player_allocation.width / 2) &&
225
gtk_widget_get_parent (player->priv->controls) == player->priv->hbox) {
226
g_object_ref (player->priv->controls);
227
gtk_container_remove (GTK_CONTAINER (player->priv->hbox),
228
player->priv->controls);
230
gtk_box_pack_start (GTK_BOX (player->priv->vbox),
231
player->priv->controls,
235
g_object_unref (player->priv->controls);
237
gtk_box_set_child_packing (GTK_BOX (player->priv->hbox),
238
gtk_widget_get_parent (player->priv->notebook),
245
if (width >= PLAYER_BACON_WIDTH * 3 ||
246
height >= PLAYER_BACON_HEIGHT * 3) {
247
width = PLAYER_BACON_WIDTH * 3;
248
height = PLAYER_BACON_HEIGHT * 3;
249
gtk_widget_set_sensitive (GTK_WIDGET (player->priv->video_zoom_in), FALSE);
252
player->priv->video_width = width;
253
player->priv->video_height = height;
130
player->priv->video_width += PLAYER_BACON_WIDTH / 3;
131
player->priv->video_height += PLAYER_BACON_HEIGHT / 3;
133
if (player->priv->video_width >= PLAYER_BACON_WIDTH * 3 ||
134
player->priv->video_height >= PLAYER_BACON_HEIGHT * 3) {
135
player->priv->video_width = PLAYER_BACON_WIDTH * 3;
136
player->priv->video_height = PLAYER_BACON_HEIGHT * 3;
255
139
gtk_widget_set_size_request (GTK_WIDGET (player->priv->bacon),
261
brasero_player_video_zoom_in_button_cb (GtkButton *button,
262
BraseroPlayer *player)
264
brasero_player_video_zoom_in (player);
268
brasero_player_video_scroll (BraseroPlayerBacon *bacon,
269
GdkEventScroll *event,
270
BraseroPlayer *player)
272
if (event->direction == GDK_SCROLL_UP)
273
brasero_player_video_zoom_in (player);
275
brasero_player_video_zoom_out (player);
281
brasero_player_update_position (BraseroPlayer *player)
284
GtkAdjustment *adjustment;
285
gchar *pos_string, *len_string, *result;
287
if (!player->priv->progress || !player->priv->size)
290
adjustment = gtk_range_get_adjustment (GTK_RANGE (player->priv->progress));
291
len_string = brasero_units_get_time_string (player->priv->end - player->priv->start, FALSE, FALSE);
293
value = gtk_range_get_value (GTK_RANGE (player->priv->progress));
294
pos_string = brasero_units_get_time_string (value, FALSE, FALSE);
297
* Translators: this is the position being played in the stream. The
298
* first %s is the position and the second %s is the whole length of
299
* the stream. I chose to make that translatable in case some languages
300
* don't allow the "/" */
301
result = g_strdup_printf (_("%s / %s"), pos_string, len_string);
305
gtk_label_set_text (GTK_LABEL (player->priv->size), result);
310
brasero_player_range_value_changed (GtkRange *range,
311
BraseroPlayer *player)
313
if (player->priv->state >= BACON_STATE_PAUSED && !player->priv->update_scale_id) {
316
/* user changed the value tell the player/pipeline */
317
pos = gtk_range_get_value (GTK_RANGE (player->priv->progress));
318
brasero_player_bacon_set_pos (BRASERO_PLAYER_BACON (player->priv->bacon), (gint64) pos + player->priv->start);
321
brasero_player_update_position (player);
325
brasero_player_set_length (BraseroPlayer *player)
327
if (player->priv->progress && player->priv->end - player->priv->start != 0)
328
gtk_range_set_range (GTK_RANGE (player->priv->progress),
330
(gdouble) player->priv->end - player->priv->start);
332
brasero_player_update_position (player);
336
brasero_player_update_progress_cb (BraseroPlayer *player)
340
if (brasero_player_bacon_get_pos (BRASERO_PLAYER_BACON (player->priv->bacon), &pos) == TRUE) {
341
gtk_range_set_value (GTK_RANGE (player->priv->progress), (gdouble) pos - player->priv->start);
343
/* This is done on purpose with videos it wouldn't redraw automatically
344
* I don't know why */
345
gtk_widget_queue_draw (GTK_WIDGET (player->priv->progress));
352
brasero_player_range_button_pressed_cb (GtkWidget *widget,
354
BraseroPlayer *player)
356
/* stop the automatic update of progress bar position */
357
if (player->priv->update_scale_id) {
358
g_source_remove (player->priv->update_scale_id);
359
player->priv->update_scale_id = 0;
366
brasero_player_range_button_released_cb (GtkWidget *widget,
368
BraseroPlayer *player)
370
/* restart the automatic update of progress bar */
371
if (player->priv->state == BACON_STATE_PLAYING && !player->priv->update_scale_id)
372
player->priv->update_scale_id = g_timeout_add (500,
373
(GSourceFunc) brasero_player_update_progress_cb,
380
brasero_player_button_clicked_cb (GtkButton *button,
381
BraseroPlayer *player)
383
if (player->priv->state == BACON_STATE_READY) {
384
gtk_notebook_set_current_page (GTK_NOTEBOOK (player->priv->notebook), 2);
385
brasero_player_bacon_set_uri (BRASERO_PLAYER_BACON (player->priv->bacon), player->priv->uri);
386
brasero_player_bacon_play (BRASERO_PLAYER_BACON (player->priv->bacon));
388
else if (player->priv->state == BACON_STATE_PAUSED)
389
brasero_player_bacon_play (BRASERO_PLAYER_BACON (player->priv->bacon));
390
else if (player->priv->state == BACON_STATE_PLAYING)
391
brasero_player_bacon_stop (BRASERO_PLAYER_BACON (player->priv->bacon));
395
brasero_player_volume_changed_cb (GtkScaleButton *button,
397
BraseroPlayer *player)
399
brasero_player_bacon_set_volume (BRASERO_PLAYER_BACON (player->priv->bacon),
404
brasero_player_create_controls_stream (BraseroPlayer *player,
407
GtkAllocation allocation;
408
GtkWidget *box = NULL;
409
GtkWidget *header_box;
410
GtkWidget *alignment;
414
if (player->priv->controls)
415
brasero_player_destroy_controls (player);
417
player->priv->controls = gtk_vbox_new (FALSE, 4);
419
/* first line title */
420
header_box = gtk_hbox_new (FALSE, 12);
421
gtk_box_pack_start (GTK_BOX (player->priv->controls),
427
player->priv->header = gtk_label_new (_("No file"));
428
gtk_label_set_use_markup (GTK_LABEL (player->priv->header), TRUE);
429
gtk_label_set_justify (GTK_LABEL (player->priv->header), GTK_JUSTIFY_LEFT);
430
gtk_misc_set_alignment (GTK_MISC (player->priv->header), 0.0, 0.5);
431
gtk_box_pack_start (GTK_BOX (header_box),
432
player->priv->header,
437
player->priv->size = gtk_label_new (NULL);
438
gtk_widget_get_allocation (GTK_WIDGET (player), &allocation);
439
if (allocation.width > allocation.height) {
440
gtk_label_set_justify (GTK_LABEL (player->priv->size), GTK_JUSTIFY_RIGHT);
441
gtk_misc_set_alignment (GTK_MISC (player->priv->size), 1.0, 0.0);
443
gtk_box_pack_start (GTK_BOX (header_box),
450
gtk_label_set_justify (GTK_LABEL (player->priv->size), GTK_JUSTIFY_LEFT);
451
gtk_misc_set_alignment (GTK_MISC (player->priv->size), 0.0, 0.0);
453
gtk_box_pack_start (GTK_BOX (player->priv->controls),
460
/* second line : play, progress, volume button */
461
box = gtk_hbox_new (FALSE, 12);
462
gtk_box_pack_start (GTK_BOX (player->priv->controls),
468
alignment = gtk_alignment_new (0.0, 0.0, 0.0, 0.0);
469
player->priv->button = gtk_toggle_button_new ();
470
gtk_widget_set_tooltip_text (player->priv->button, _("Start and stop playing"));
471
gtk_container_add (GTK_CONTAINER (alignment), player->priv->button);
472
gtk_box_pack_start (GTK_BOX (box),
478
image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_BUTTON);
479
gtk_container_add (GTK_CONTAINER (player->priv->button), image);
480
g_signal_connect (G_OBJECT (player->priv->button), "clicked",
481
G_CALLBACK (brasero_player_button_clicked_cb),
484
player->priv->progress = gtk_hscale_new_with_range (0, 1, 500000000);
485
gtk_scale_set_digits (GTK_SCALE (player->priv->progress), 0);
486
gtk_scale_set_draw_value (GTK_SCALE (player->priv->progress), FALSE);
487
gtk_widget_set_size_request (player->priv->progress, 80, -1);
488
gtk_range_set_update_policy (GTK_RANGE (player->priv->progress), GTK_UPDATE_CONTINUOUS);
489
gtk_box_pack_start (GTK_BOX (box),
490
player->priv->progress,
495
g_signal_connect (G_OBJECT (player->priv->progress),
496
"button-press-event",
497
G_CALLBACK (brasero_player_range_button_pressed_cb), player);
498
g_signal_connect (G_OBJECT (player->priv->progress),
499
"button-release-event",
500
G_CALLBACK (brasero_player_range_button_released_cb), player);
501
g_signal_connect (G_OBJECT (player->priv->progress),
503
G_CALLBACK (brasero_player_range_value_changed),
506
volume = gtk_volume_button_new ();
507
gtk_widget_show (volume);
508
gtk_box_pack_start (GTK_BOX (box),
514
if (player->priv->bacon)
515
gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume),
516
brasero_player_bacon_get_volume (BRASERO_PLAYER_BACON (player->priv->bacon)));
518
g_signal_connect (volume,
520
G_CALLBACK (brasero_player_volume_changed_cb),
523
/* zoom in/out, only if video */
529
box = gtk_hbox_new (FALSE, 12);
530
gtk_box_pack_start (GTK_BOX (player->priv->controls),
536
hbox = gtk_hbox_new (FALSE, 0);
537
alignment = gtk_alignment_new (1.0, 0.0, 0.0, 0.0);
539
gtk_container_add (GTK_CONTAINER (alignment), hbox);
540
gtk_box_pack_start (GTK_BOX (box),
546
image = gtk_image_new_from_stock (GTK_STOCK_ZOOM_OUT, GTK_ICON_SIZE_BUTTON);
547
zoom = gtk_button_new ();
548
gtk_button_set_image (GTK_BUTTON (zoom), image);
549
gtk_button_set_relief (GTK_BUTTON (zoom), GTK_RELIEF_NONE);
550
gtk_button_set_focus_on_click (GTK_BUTTON (zoom), FALSE);
551
g_signal_connect (zoom,
553
G_CALLBACK (brasero_player_video_zoom_out_button_cb),
555
gtk_box_pack_start (GTK_BOX (hbox),
560
player->priv->video_zoom_out = zoom;
562
image = gtk_image_new_from_stock (GTK_STOCK_ZOOM_IN, GTK_ICON_SIZE_BUTTON);
563
zoom = gtk_button_new ();
564
gtk_button_set_image (GTK_BUTTON (zoom), image);
565
gtk_button_set_relief (GTK_BUTTON (zoom), GTK_RELIEF_NONE);
566
gtk_button_set_focus_on_click (GTK_BUTTON (zoom), FALSE);
567
g_signal_connect (zoom,
569
G_CALLBACK (brasero_player_video_zoom_in_button_cb),
571
gtk_box_pack_start (GTK_BOX (hbox),
576
player->priv->video_zoom_in = zoom;
578
if (player->priv->video_height <= PLAYER_BACON_HEIGHT
579
|| player->priv->video_width <= PLAYER_BACON_WIDTH)
580
gtk_widget_set_sensitive (player->priv->video_zoom_out, FALSE);
582
gtk_widget_set_sensitive (player->priv->video_zoom_out, TRUE);
584
if (player->priv->video_height >= PLAYER_BACON_HEIGHT * 3
585
|| player->priv->video_width >= PLAYER_BACON_WIDTH * 3)
586
gtk_widget_set_sensitive (player->priv->video_zoom_in, FALSE);
588
gtk_widget_set_sensitive (player->priv->video_zoom_in, TRUE);
590
if (player->priv->video_width >= (allocation.width / 2)) {
591
gtk_box_pack_start (GTK_BOX (player->priv->vbox),
592
player->priv->controls,
596
gtk_box_set_child_packing (GTK_BOX (player->priv->hbox),
597
gtk_widget_get_parent (player->priv->notebook),
603
else if (player->priv->video_width < (allocation.width / 2))
604
gtk_box_pack_start (GTK_BOX (player->priv->hbox),
605
player->priv->controls,
611
gtk_box_pack_end (GTK_BOX (player->priv->hbox),
612
player->priv->controls,
617
gtk_widget_show_all (player->priv->controls);
618
gtk_alignment_set_padding (GTK_ALIGNMENT (player), 12, 0, 0, 0);
140
player->priv->video_width,
141
player->priv->video_height);
695
213
/* the image itself */
696
214
if (player->priv->image_width <= min_width ||
697
215
player->priv->image_height <= min_height) {
698
gtk_widget_set_sensitive (player->priv->image_zoom_out, FALSE);
699
216
player->priv->image_width = min_width;
700
217
player->priv->image_height = min_height;
703
brasero_player_scale_image (player);
707
brasero_player_image_zoom_out_button_cb (GtkButton *button,
708
BraseroPlayer *player)
220
if (player->priv->pixbuf)
221
brasero_player_scale_image (player);
225
brasero_player_zoom_in_cb (GtkButton *button,
226
BraseroPlayer *player)
228
brasero_player_image_zoom_in (player);
229
brasero_player_video_zoom_in (player);
233
brasero_player_zoom_out_cb (GtkButton *button,
234
BraseroPlayer *player)
710
236
brasero_player_image_zoom_out (player);
714
brasero_player_image_scroll (BraseroPlayerBacon *bacon,
715
GdkEventScroll *event,
716
BraseroPlayer *player)
718
if (event->direction == GDK_SCROLL_UP)
719
brasero_player_image_zoom_in (player);
721
brasero_player_image_zoom_out (player);
727
brasero_player_create_controls_image (BraseroPlayer *player)
729
GtkWidget *box, *zoom;
731
GtkAllocation allocation;
733
if (player->priv->image_display)
734
gtk_widget_set_sensitive (player->priv->image_display, TRUE);
736
player->priv->controls = gtk_vbox_new (FALSE, 4);
738
gtk_widget_get_allocation (GTK_WIDGET (player), &allocation);
739
if (allocation.width > allocation.height)
740
gtk_box_pack_end (GTK_BOX (player->priv->hbox),
741
player->priv->controls,
746
gtk_box_pack_end (GTK_BOX (player->priv->vbox),
747
player->priv->controls,
752
player->priv->header = gtk_label_new (NULL);
753
gtk_misc_set_alignment (GTK_MISC (player->priv->header), 0.0, 0.5);
754
gtk_box_pack_start (GTK_BOX (player->priv->controls),
755
player->priv->header,
760
player->priv->size = gtk_label_new (NULL);
761
gtk_misc_set_alignment (GTK_MISC (player->priv->size), 0.0, 0.5);
762
gtk_box_pack_start (GTK_BOX (player->priv->controls),
768
box = gtk_hbox_new (FALSE, 0);
769
gtk_box_pack_start (GTK_BOX (player->priv->controls),
775
image = gtk_image_new_from_stock (GTK_STOCK_ZOOM_OUT, GTK_ICON_SIZE_BUTTON);
776
zoom = gtk_button_new ();
777
gtk_button_set_image (GTK_BUTTON (zoom), image);
778
gtk_button_set_relief (GTK_BUTTON (zoom), GTK_RELIEF_NONE);
779
gtk_button_set_focus_on_click (GTK_BUTTON (zoom), FALSE);
780
g_signal_connect (zoom,
782
G_CALLBACK (brasero_player_image_zoom_out_button_cb),
784
gtk_box_pack_start (GTK_BOX (box),
789
player->priv->image_zoom_out = zoom;
791
image = gtk_image_new_from_stock (GTK_STOCK_ZOOM_IN, GTK_ICON_SIZE_BUTTON);
792
zoom = gtk_button_new ();
793
gtk_button_set_image (GTK_BUTTON (zoom), image);
794
gtk_button_set_relief (GTK_BUTTON (zoom), GTK_RELIEF_NONE);
795
gtk_button_set_focus_on_click (GTK_BUTTON (zoom), FALSE);
796
g_signal_connect (zoom,
798
G_CALLBACK (brasero_player_image_zoom_in_button_cb),
800
gtk_box_pack_start (GTK_BOX (box),
805
player->priv->image_zoom_in = zoom;
807
gtk_widget_show_all (player->priv->controls);
808
gtk_alignment_set_padding (GTK_ALIGNMENT (player), 12, 0, 0, 0);
237
brasero_player_video_zoom_out (player);
241
brasero_bacon_scroll (BraseroPlayerBacon *bacon,
242
GdkEventScroll *event,
243
BraseroPlayer *player)
245
switch (gtk_notebook_get_current_page (GTK_NOTEBOOK (player->priv->notebook))) {
248
if (event->direction == GDK_SCROLL_UP)
249
brasero_player_bacon_forward (bacon, GST_SECOND);
251
brasero_player_bacon_backward (bacon, GST_SECOND);
258
if (event->direction == GDK_SCROLL_UP) {
259
brasero_player_image_zoom_in (player);
260
brasero_player_video_zoom_in (player);
263
brasero_player_image_zoom_out (player);
264
brasero_player_video_zoom_out (player);
273
brasero_bacon_button_release (BraseroPlayerBacon *bacon,
274
GdkEventButton *event,
275
BraseroPlayer *player)
277
if (event->button != 1)
280
if (player->priv->state == BACON_STATE_READY) {
281
/* This will probably never happen as we display a play button */
282
gtk_image_set_from_stock (GTK_IMAGE (player->priv->play_image), GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_DIALOG);
283
gtk_notebook_set_current_page (GTK_NOTEBOOK (player->priv->notebook), 1);
284
brasero_player_bacon_set_uri (BRASERO_PLAYER_BACON (player->priv->bacon), player->priv->uri);
285
brasero_player_bacon_play (BRASERO_PLAYER_BACON (player->priv->bacon));
287
else if (player->priv->state == BACON_STATE_PAUSED) {
288
gtk_image_set_from_stock (GTK_IMAGE (player->priv->play_image), GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_DIALOG);
289
gtk_notebook_set_current_page (GTK_NOTEBOOK (player->priv->notebook), 1);
290
brasero_player_bacon_play (BRASERO_PLAYER_BACON (player->priv->bacon));
292
else if (player->priv->state == BACON_STATE_PLAYING) {
293
gtk_image_set_from_stock (GTK_IMAGE (player->priv->play_image), GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_DIALOG);
294
gtk_notebook_set_current_page (GTK_NOTEBOOK (player->priv->notebook), 4);
295
brasero_player_bacon_stop (BRASERO_PLAYER_BACON (player->priv->bacon));
302
brasero_player_button_release (GtkWidget *widget,
303
GdkEventButton *event,
304
BraseroPlayer *player)
306
if (event->button != 1)
309
if (gtk_notebook_get_current_page (GTK_NOTEBOOK (player->priv->notebook)) == 4) {
310
if (player->priv->state == BACON_STATE_READY) {
311
gtk_image_set_from_stock (GTK_IMAGE (player->priv->play_image), GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_DIALOG);
312
if (player->priv->is_video)
313
gtk_notebook_set_current_page (GTK_NOTEBOOK (player->priv->notebook), 1);
315
brasero_player_bacon_set_uri (BRASERO_PLAYER_BACON (player->priv->bacon), player->priv->uri);
316
brasero_player_bacon_play (BRASERO_PLAYER_BACON (player->priv->bacon));
318
else if (player->priv->state == BACON_STATE_PAUSED) {
319
gtk_image_set_from_stock (GTK_IMAGE (player->priv->play_image), GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_DIALOG);
320
if (player->priv->is_video)
321
gtk_notebook_set_current_page (GTK_NOTEBOOK (player->priv->notebook), 1);
323
brasero_player_bacon_play (BRASERO_PLAYER_BACON (player->priv->bacon));
325
else if (player->priv->state == BACON_STATE_PLAYING) {
326
gtk_image_set_from_stock (GTK_IMAGE (player->priv->play_image), GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_DIALOG);
327
brasero_player_bacon_stop (BRASERO_PLAYER_BACON (player->priv->bacon));
335
brasero_player_scroll (GtkWidget *widget,
336
GdkEventScroll *event,
337
BraseroPlayer *player)
339
switch (gtk_notebook_get_current_page (GTK_NOTEBOOK (player->priv->notebook))) {
342
if (event->direction == GDK_SCROLL_UP)
343
brasero_player_bacon_forward (BRASERO_PLAYER_BACON (player->priv->bacon), GST_SECOND);
345
brasero_player_bacon_backward (BRASERO_PLAYER_BACON (player->priv->bacon), GST_SECOND);
352
if (event->direction == GDK_SCROLL_UP) {
353
brasero_player_image_zoom_in (player);
354
brasero_player_video_zoom_in (player);
357
brasero_player_image_zoom_out (player);
358
brasero_player_video_zoom_out (player);
812
367
brasero_player_image (BraseroPlayer *player)
814
369
GError *error = NULL;
820
372
if (player->priv->pixbuf) {
821
373
g_object_unref (player->priv->pixbuf);
836
388
brasero_player_no_multimedia_stream (player);
842
height = gdk_pixbuf_get_height (player->priv->pixbuf);
843
width = gdk_pixbuf_get_width (player->priv->pixbuf);
845
393
brasero_player_scale_image (player);
847
/* display information about the image */
848
brasero_player_create_controls_image (player);
850
if (player->priv->image_height <= MIN (PLAYER_BACON_HEIGHT, gdk_pixbuf_get_height (player->priv->pixbuf))
851
|| player->priv->image_width <= MIN (PLAYER_BACON_WIDTH, gdk_pixbuf_get_width (player->priv->pixbuf)))
852
gtk_widget_set_sensitive (player->priv->image_zoom_out, FALSE);
854
gtk_widget_set_sensitive (player->priv->image_zoom_out, TRUE);
856
if (player->priv->image_height >= PLAYER_BACON_HEIGHT * 3
857
|| player->priv->image_width >= PLAYER_BACON_WIDTH * 3)
858
gtk_widget_set_sensitive (player->priv->image_zoom_in, FALSE);
860
gtk_widget_set_sensitive (player->priv->image_zoom_in, TRUE);
862
BRASERO_GET_BASENAME_FOR_DISPLAY (path, name);
865
string = g_strdup_printf ("<span weight=\"bold\">%s</span>\t %s",
870
gtk_label_set_markup (GTK_LABEL (player->priv->header), string);
873
string = g_strdup_printf (_("<span weight=\"bold\">Size:</span>\t<i><span size=\"smaller\"> %i \303\227 %i pixels</span></i>"), width, height);
874
gtk_label_set_markup (GTK_LABEL (player->priv->size), string);
877
gtk_widget_hide (player->priv->bacon);
878
gtk_widget_show (player->priv->image_event);
879
395
gtk_widget_show (player->priv->notebook);
880
gtk_alignment_set_padding (GTK_ALIGNMENT (player), 12, 0, 0, 0);
396
gtk_notebook_set_current_page (GTK_NOTEBOOK (player->priv->notebook), 0);
882
397
g_signal_emit (player,
883
398
brasero_player_signals [READY_SIGNAL],
888
brasero_player_update_info_real (BraseroPlayer *player,
403
brasero_player_update_tooltip (BraseroPlayer *player,
894
brasero_player_set_length (player);
895
if (artist && title) {
896
header = g_markup_printf_escaped (_("<span weight=\"bold\">%s</span>\nby <span size=\"smaller\"><i>%s</i></span>"),
899
gtk_label_set_ellipsize (GTK_LABEL (player->priv->header),
900
PANGO_ELLIPSIZE_END);
904
header = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>\n", title);
905
gtk_label_set_ellipsize (GTK_LABEL (player->priv->header),
906
PANGO_ELLIPSIZE_END);
411
/* Update the tooltip */
412
len_string = brasero_units_get_time_string (g_file_info_get_attribute_uint64 (info, BRASERO_IO_LEN), TRUE, FALSE);
413
title = g_file_info_get_attribute_string (info, BRASERO_IO_TITLE);
414
artist = g_file_info_get_attribute_string (info, BRASERO_IO_ARTIST);
416
gchar *artist_string;
418
/* Translators: %s is the name of the artist */
419
artist_string = g_strdup_printf (_("by %s"), artist);
420
string = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>"
421
"\n<i><span size=\"smaller\">%s</span></i>"
426
g_free (artist_string);
429
string = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>"
435
gchar *unescaped_uri;
911
BRASERO_GET_BASENAME_FOR_DISPLAY (player->priv->uri, name);
912
header = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>\n", name);
437
unescaped_uri = g_uri_unescape_string (player->priv->uri, NULL);
438
name = g_path_get_basename (unescaped_uri);
439
g_free (unescaped_uri);
440
string = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>"
914
gtk_label_set_ellipsize (GTK_LABEL (player->priv->header),
915
PANGO_ELLIPSIZE_END);
918
gtk_label_set_markup (GTK_LABEL (player->priv->header), header);
449
gtk_widget_set_tooltip_markup (GTK_WIDGET (player), string);
764
brasero_player_volume_changed_cb (GtkScaleButton *button,
766
BraseroPlayer *player)
768
brasero_player_bacon_set_volume (BRASERO_PLAYER_BACON (player->priv->bacon), volume);
1392
772
brasero_player_init (BraseroPlayer *obj)
1394
GtkWidget *alignment;
1395
777
GtkWidget *event;
1398
784
obj->priv = g_new0 (BraseroPlayerPrivate, 1);
1400
obj->priv->vbox = gtk_vbox_new (FALSE, 0);
1401
gtk_widget_show (obj->priv->vbox);
1402
gtk_container_set_border_width (GTK_CONTAINER (obj->priv->vbox), 0);
1403
gtk_container_add (GTK_CONTAINER (obj), obj->priv->vbox);
1405
obj->priv->hbox = gtk_hbox_new (FALSE, 0);
1406
gtk_widget_show (obj->priv->hbox);
1407
gtk_box_pack_start (GTK_BOX (obj->priv->vbox),
1413
alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1414
gtk_widget_show (alignment);
1415
gtk_box_pack_start (GTK_BOX (obj->priv->hbox),
1421
obj->priv->notebook = gtk_notebook_new ();
1422
gtk_container_set_border_width (GTK_CONTAINER (obj->priv->notebook), 6);
1423
gtk_container_add (GTK_CONTAINER (alignment), obj->priv->notebook);
1424
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (obj->priv->notebook), FALSE);
1425
gtk_notebook_set_show_border (GTK_NOTEBOOK (obj->priv->notebook), FALSE);
786
gtk_alignment_set (GTK_ALIGNMENT (obj), 0.5, 0.5, 0.0, 0.0);
788
vbox = gtk_vbox_new (FALSE, 2);
789
gtk_widget_show (vbox);
790
gtk_container_add (GTK_CONTAINER (obj), vbox);
792
/* The notebook and all views */
1427
793
event = gtk_event_box_new ();
1428
obj->priv->image_event = event;
794
gtk_box_pack_start (GTK_BOX (vbox), event, FALSE, FALSE, 0);
1429
795
gtk_event_box_set_above_child (GTK_EVENT_BOX (event), TRUE);
1430
796
gtk_event_box_set_visible_window (GTK_EVENT_BOX (event), FALSE);
1431
gtk_notebook_append_page (GTK_NOTEBOOK (obj->priv->notebook),
797
g_signal_connect (event,
798
"button-release-event",
799
G_CALLBACK (brasero_player_button_release),
1434
801
g_signal_connect (event,
1436
G_CALLBACK (brasero_player_image_scroll),
803
G_CALLBACK (brasero_player_scroll),
1438
805
gtk_widget_show (event);
807
obj->priv->notebook = gtk_notebook_new ();
808
gtk_widget_show (obj->priv->notebook);
809
gtk_container_add (GTK_CONTAINER (event), obj->priv->notebook);
810
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (obj->priv->notebook), FALSE);
1440
813
obj->priv->image_display = gtk_image_new ();
1441
814
gtk_widget_show (obj->priv->image_display);
1442
gtk_misc_set_alignment (GTK_MISC (obj->priv->image_display), 1.0, 0.0);
1443
gtk_container_add (GTK_CONTAINER (event), obj->priv->image_display);
815
gtk_misc_set_alignment (GTK_MISC (obj->priv->image_display), 0.5, 0.5);
816
gtk_notebook_append_page (GTK_NOTEBOOK (obj->priv->notebook),
817
obj->priv->image_display,
1445
821
obj->priv->bacon = brasero_player_bacon_new ();
1446
822
gtk_widget_show (obj->priv->bacon);
1447
823
g_signal_connect (obj->priv->bacon,
824
"button-release-event",
825
G_CALLBACK (brasero_bacon_button_release),
827
g_signal_connect (obj->priv->bacon,
829
G_CALLBACK (brasero_bacon_scroll),
831
g_signal_connect (obj->priv->bacon,
1449
833
G_CALLBACK (brasero_player_state_changed_cb),