38 static LiVESWidgetClosure *stop_closure;
39 static LiVESWidgetClosure *fullscreen_closure;
40 static LiVESWidgetClosure *dblsize_closure;
41 static LiVESWidgetClosure *sepwin_closure;
42 static LiVESWidgetClosure *loop_closure;
43 static LiVESWidgetClosure *loop_cont_closure;
44 static LiVESWidgetClosure *fade_closure;
45 static LiVESWidgetClosure *showfct_closure;
46 static LiVESWidgetClosure *showsubs_closure;
47 static LiVESWidgetClosure *rec_closure;
48 static LiVESWidgetClosure *mute_audio_closure;
49 static LiVESWidgetClosure *ping_pong_closure;
51 static void _resize_play_window(
void);
53 static boolean pb_added =
FALSE;
56 static int vspace = -1;
68 LiVESError *
error = NULL;
84 lives_error_free(
error);
107 lives_error_free(
error);
136 #if GTK_CHECK_VERSION(3, 0, 0)
137 boolean expose_sim(LiVESWidget * widget, lives_painter_t *cr, livespointer user_data) {
147 boolean expose_eim(LiVESWidget * widget, lives_painter_t *cr, livespointer user_data) {
157 boolean expose_pim(LiVESWidget * widget, lives_painter_t *cr, livespointer user_data) {
168 void set_colours(LiVESWidgetColor * colf, LiVESWidgetColor * colb, LiVESWidgetColor * colf2,
169 LiVESWidgetColor * colb2, LiVESWidgetColor * colt, LiVESWidgetColor * coli) {
222 #if GTK_CHECK_VERSION(3, 16, 0)
252 LIVES_WIDGET_STATE_INSENSITIVE,
"",
"opacity",
"1.0");
255 LIVES_WIDGET_STATE_NORMAL,
"",
"opacity",
"1.0");
258 LIVES_WIDGET_STATE_INSENSITIVE,
"",
"opacity",
"1.0");
261 LIVES_WIDGET_STATE_NORMAL,
"",
"opacity",
"1.0");
283 LIVES_WIDGET_STATE_NORMAL, colb);
285 LIVES_WIDGET_STATE_NORMAL, colf);
297 LIVES_WIDGET_STATE_NORMAL, colb);
368 #if !GTK_CHECK_VERSION(3, 0, 0)
369 LiVESWidget *alignment;
375 LiVESWidget *menuitem;
376 LiVESWidget *select_submenu_menu;
377 LiVESWidget *submenu_menu;
378 LiVESWidget *export_submenu_menu;
379 LiVESWidget *trimaudio_submenu_menu;
380 LiVESWidget *delaudio_submenu_menu;
381 LiVESWidget *menuitemsep;
382 #if LIVES_HAS_IMAGE_MENU_ITEM
385 LiVESWidget *rfx_menu;
386 LiVESWidget *rfx_submenu;
387 LiVESWidget *midi_menu;
388 LiVESWidget *midi_submenu;
389 LiVESWidget *midi_load;
392 LiVESWidget *show_manual;
393 LiVESWidget *email_author;
395 LiVESWidget *report_bug;
396 LiVESWidget *suggest_feature;
397 LiVESWidget *help_translate;
401 LiVESWidget *hseparator;
402 LiVESWidget *t_label;
404 #if defined HAVE_YUV4MPEG || defined HAVE_UNICAP
405 LiVESWidget *submenu;
408 LiVESWidget *new_test_rfx;
409 LiVESWidget *copy_rfx;
410 LiVESWidget *import_custom_rfx;
411 LiVESWidget *rebuild_rfx;
412 LiVESWidget *assign_rte_keys;
414 LiVESWidget *tmp_toolbar_icon;
416 LiVESAdjustment *adj;
425 boolean new_lives =
FALSE;
430 stop_closure = fullscreen_closure = dblsize_closure = sepwin_closure = loop_closure = NULL;
431 loop_cont_closure = fade_closure = showfct_closure = showsubs_closure = NULL;
432 rec_closure = mute_audio_closure = ping_pong_closure = NULL;
441 LIVES_WIDGET_CONFIGURE_EVENT, LIVES_GUI_CALLBACK(
config_event), NULL);
463 LiVESWidgetColor normal;
464 #if !GTK_CHECK_VERSION(3, 0, 0)
493 (GdkDragAction)(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK));
584 LIVES_KEY_o, LIVES_CONTROL_MASK,
585 LIVES_ACCEL_VISIBLE);
608 #ifdef ENABLE_DVD_GRAB
639 #if defined(HAVE_UNICAP) || defined(HAVE_YUV4MPEG)
648 LIVES_GUI_CALLBACK(on_open_vdev_activate), NULL);
668 #endif // defined HAVE_UNICAP || defined HAVE_YUV4MPEG
681 for (
register int j = 0; buff[j]; j++) {
682 if (buff[j] ==
'\n') {
706 #ifdef LIBAV_TRANSCODE
725 LIVES_KEY_w, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
739 LIVES_KEY_b, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
747 LIVES_KEY_r, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
782 LIVES_KEY_u, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
784 #if LIVES_HAS_IMAGE_MENU_ITEM
795 LIVES_KEY_z, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
797 #if LIVES_HAS_IMAGE_MENU_ITEM
811 LIVES_KEY_m, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
818 LIVES_KEY_c, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
825 LIVES_KEY_t, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
832 LIVES_KEY_i, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
834 #if LIVES_HAS_IMAGE_MENU_ITEM
845 LIVES_KEY_n, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
856 #if LIVES_HAS_IMAGE_MENU_ITEM
862 LIVES_KEY_d, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
888 LIVES_KEY_a, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
894 LIVES_KEY_Home, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
899 LIVES_KEY_End, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
922 LIVES_KEY_Slash, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
936 LIVES_KEY_p, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
941 #if LIVES_HAS_IMAGE_MENU_ITEM
949 LIVES_KEY_y, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
959 LIVES_KEY_c, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
961 #if LIVES_HAS_IMAGE_MENU_ITEM
967 #if LIVES_HAS_IMAGE_MENU_ITEM
977 LIVES_KEY_q, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
979 #if LIVES_HAS_IMAGE_MENU_ITEM
988 #if LIVES_HAS_IMAGE_MENU_ITEM
995 LIVES_KEY_w, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1002 LIVES_KEY_r, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1012 LIVES_KEY_f, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1018 LIVES_KEY_d, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1024 LIVES_KEY_s, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1029 LIVES_KEY_b, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1037 LIVES_KEY_l, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1044 LIVES_KEY_o, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1050 LIVES_KEY_g, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1057 LIVES_KEY_z, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1070 LIVES_KEY_h, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1076 LIVES_KEY_v, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1123 LIVES_KEY_x, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
1177 LIVES_KEY_p, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
1179 #if LIVES_HAS_IMAGE_MENU_ITEM
1311 LIVES_KEY_i, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
1324 #if LIVES_HAS_IMAGE_MENU_ITEM
1419 #ifdef HAVE_YUV4MPEG
1468 LIVES_KEY_v, LIVES_CONTROL_MASK, LIVES_ACCEL_VISIBLE);
1482 (
_(
"Save real time effect defaults so they will be restored each time you use LiVES.")));
1489 (
_(
"Decode all frames to images. This will unlock reverse playback and can "
1490 "improve random seek times,\n"
1491 "but may require additional diskspace.")));
1497 (
_(
"Reset all playback positions to frame 1, and reset all playback frame rates.")));
1596 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
show_devopts), LIVES_WIDGET_ACTIVATE_SIGNAL,
1631 _(
"Show the play window (s)"));
1639 _(
"Rewind to start (w)"));
1655 _(
"Stop playback (q)"));
1662 _(
"Play selection (y)"));
1671 _(
"Switch continuous looping on (o)"));
1679 _(
"Mute the audio (z)"));
1683 for (i = 0; i < 3; i++) {
1695 #if GTK_CHECK_VERSION(3, 0, 0)
1739 #if GTK_CHECK_VERSION(3, 0, 0)
1781 #if GTK_CHECK_VERSION(3, 0, 0)
1789 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
ext_audio_mon), LIVES_WIDGET_EXPOSE_EVENT,
1798 #ifdef TEST_VOL_LIGHTS
1799 #if GTK_CHECK_VERSION(3, 0, 0)
1809 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
vol_checkbuttons[i][0]), LIVES_WIDGET_EXPOSE_EVENT,
1815 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
vol_checkbuttons[i][0]), LIVES_WIDGET_TOGGLED_SIGNAL,
1854 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
volume_scale), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
1932 t_label =
lives_label_new(
_(
"Press \"s\" to toggle separate play window for improved performance, \"q\" to stop."));
1954 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox), LIVES_WIDGET_SCROLL_EVENT,
1981 #if GTK_CHECK_VERSION(3, 16, 0)
2002 #if GTK_CHECK_VERSION(3, 0, 0)
2019 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
2058 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
2067 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
2098 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
play_image), LIVES_WIDGET_EXPOSE_EVENT,
2112 #if GTK_CHECK_VERSION(3, 0, 0)
2121 LIVES_BOX(
mainw->
hbox3),
_(
"The first selected frame in this clip"));
2166 (tmp = (
_(
"Select all frames in this clip"))));
2175 #if GTK_CHECK_VERSION(3, 0, 0)
2183 LIVES_BOX(
mainw->
hbox3),
_(
"The last selected frame in this clip"));
2208 mainw->
hruler = giw_timeline_new_with_adjustment(LIVES_ORIENTATION_HORIZONTAL, 0., 0., 1000000., 1000000.);
2218 | LIVES_BUTTON_RELEASE_MASK | LIVES_BUTTON_PRESS_MASK | LIVES_ENTER_NOTIFY_MASK);
2229 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
eventbox2), LIVES_WIDGET_EXPOSE_EVENT,
2244 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
video_draw), LIVES_WIDGET_EXPOSE_EVENT,
2247 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
video_draw), LIVES_WIDGET_CONFIGURE_EVENT,
2268 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
laudio_draw), LIVES_WIDGET_EXPOSE_EVENT,
2271 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
laudio_draw), LIVES_WIDGET_CONFIGURE_EVENT,
2291 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
raudio_draw), LIVES_WIDGET_EXPOSE_EVENT,
2294 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
raudio_draw), LIVES_WIDGET_CONFIGURE_EVENT,
2321 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
msg_adj), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
2324 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
msg_area), LIVES_WIDGET_SCROLL_EVENT,
2345 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2350 (LiVESXModifierType)(LIVES_CONTROL_MASK | LIVES_SHIFT_MASK),
2351 (LiVESAccelFlags)0, lives_cclosure_new(LIVES_GUI_CALLBACK(
slower_callback),
2355 (LIVES_CONTROL_MASK | LIVES_ALT_MASK), (LiVESAccelFlags)0,
2356 lives_cclosure_new(LIVES_GUI_CALLBACK(
less_callback), NULL, NULL));
2361 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2366 (LiVESXModifierType)(LIVES_CONTROL_MASK | LIVES_SHIFT_MASK),
2372 (LiVESXModifierType)(LIVES_CONTROL_MASK | LIVES_ALT_MASK),
2374 lives_cclosure_new(LIVES_GUI_CALLBACK(
more_callback), NULL, NULL));
2377 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2381 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2385 (LiVESXModifierType)(LIVES_CONTROL_MASK),
2390 (LiVESXModifierType)(LIVES_CONTROL_MASK | LIVES_ALT_MASK),
2395 (LiVESXModifierType)(LIVES_CONTROL_MASK),
2400 (LiVESXModifierType)(LIVES_CONTROL_MASK | LIVES_SHIFT_MASK),
2405 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2410 (LiVESXModifierType)(LIVES_CONTROL_MASK | LIVES_SHIFT_MASK), (LiVESAccelFlags)0,
2415 (LiVESAccelFlags)0, lives_cclosure_new(LIVES_GUI_CALLBACK(
voldown_callback), NULL, NULL));
2418 (LiVESAccelFlags)0, lives_cclosure_new(LIVES_GUI_CALLBACK(
volup_callback), NULL, NULL));
2421 lives_cclosure_new(LIVES_GUI_CALLBACK(
grabkeys_callback), LIVES_INT_TO_POINTER(-1), NULL));
2431 (LiVESAccelFlags)0, lives_cclosure_new(LIVES_GUI_CALLBACK(
rtemode_callback),
2452 lives_cclosure_new(LIVES_GUI_CALLBACK(
storeclip_callback), LIVES_INT_TO_POINTER(1), NULL));
2455 lives_cclosure_new(LIVES_GUI_CALLBACK(
storeclip_callback), LIVES_INT_TO_POINTER(2), NULL));
2458 lives_cclosure_new(LIVES_GUI_CALLBACK(
storeclip_callback), LIVES_INT_TO_POINTER(3), NULL));
2461 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2462 lives_cclosure_new(LIVES_GUI_CALLBACK(
storeclip_callback), LIVES_INT_TO_POINTER(4), NULL));
2465 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2466 lives_cclosure_new(LIVES_GUI_CALLBACK(
storeclip_callback), LIVES_INT_TO_POINTER(5), NULL));
2469 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2471 LIVES_INT_TO_POINTER(6), NULL));
2474 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2476 LIVES_INT_TO_POINTER(7), NULL));
2479 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2481 LIVES_INT_TO_POINTER(8), NULL));
2484 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2486 LIVES_INT_TO_POINTER(9), NULL));
2489 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2491 LIVES_INT_TO_POINTER(10), NULL));
2494 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2496 LIVES_INT_TO_POINTER(11), NULL));
2499 (LiVESXModifierType)0, (LiVESAccelFlags)0,
2501 LIVES_INT_TO_POINTER(12), NULL));
2508 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(0), NULL));
2511 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(1), NULL));
2514 lives_cclosure_new(LIVES_GUI_CALLBACK(
grabkeys_callback), LIVES_INT_TO_POINTER(0), NULL));
2517 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(2), NULL));
2520 lives_cclosure_new(LIVES_GUI_CALLBACK(
grabkeys_callback), LIVES_INT_TO_POINTER(1), NULL));
2523 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(3), NULL));
2526 lives_cclosure_new(LIVES_GUI_CALLBACK(
grabkeys_callback), LIVES_INT_TO_POINTER(2), NULL));
2529 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(4), NULL));
2532 lives_cclosure_new(LIVES_GUI_CALLBACK(
grabkeys_callback), LIVES_INT_TO_POINTER(3), NULL));
2535 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(5), NULL));
2538 lives_cclosure_new(LIVES_GUI_CALLBACK(
grabkeys_callback), LIVES_INT_TO_POINTER(4), NULL));
2541 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2543 LIVES_INT_TO_POINTER(6), NULL));
2546 lives_cclosure_new(LIVES_GUI_CALLBACK(
grabkeys_callback), LIVES_INT_TO_POINTER(5), NULL));
2549 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2551 LIVES_INT_TO_POINTER(7), NULL));
2555 LIVES_INT_TO_POINTER(6), NULL));
2558 LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2560 LIVES_INT_TO_POINTER(8), NULL));
2562 LIVES_CONTROL_MASK | LIVES_ALT_MASK,
2565 LIVES_INT_TO_POINTER(7), NULL));
2568 LIVES_KEY_9, LIVES_CONTROL_MASK, (LiVESAccelFlags)0,
2570 LIVES_INT_TO_POINTER(9), NULL));
2572 LIVES_CONTROL_MASK | LIVES_ALT_MASK,
2575 LIVES_INT_TO_POINTER(8), NULL));
2582 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(10), NULL));
2586 lives_cclosure_new(LIVES_GUI_CALLBACK(
rte_on_off_callback), LIVES_INT_TO_POINTER(11), NULL));
2598 LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
2600 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
open), LIVES_WIDGET_ACTIVATE_SIGNAL,
2613 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
open_utube), LIVES_WIDGET_ACTIVATE_SIGNAL,
2625 #ifdef HAVE_YUV4MPEG
2639 #ifdef LIBAV_TRANSCODE
2640 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->transcode), LIVES_WIDGET_ACTIVATE_SIGNAL,
2641 LIVES_GUI_CALLBACK(on_transcode_activate), NULL);
2647 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
import_proj), LIVES_WIDGET_ACTIVATE_SIGNAL,
2649 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
export_proj), LIVES_WIDGET_ACTIVATE_SIGNAL,
2651 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
export_theme), LIVES_WIDGET_ACTIVATE_SIGNAL,
2653 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
import_theme), LIVES_WIDGET_ACTIVATE_SIGNAL,
2657 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
quit), LIVES_WIDGET_ACTIVATE_SIGNAL,
2659 LIVES_INT_TO_POINTER(0));
2662 LIVES_INT_TO_POINTER(1));
2669 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
mt_menu), LIVES_WIDGET_ACTIVATE_SIGNAL,
2711 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
stop), LIVES_WIDGET_ACTIVATE_SIGNAL,
2716 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
sw_sound), LIVES_WIDGET_ACTIVATE_SIGNAL,
2719 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
showsubs), LIVES_WIDGET_ACTIVATE_SIGNAL,
2723 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
aload_subs), LIVES_WIDGET_ACTIVATE_SIGNAL,
2725 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
ccpd_sound), LIVES_WIDGET_ACTIVATE_SIGNAL,
2728 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
dsize), LIVES_WIDGET_ACTIVATE_SIGNAL,
2732 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
fade), LIVES_WIDGET_ACTIVATE_SIGNAL,
2734 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
loop_video), LIVES_WIDGET_ACTIVATE_SIGNAL,
2738 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
loop_ping_pong), LIVES_WIDGET_ACTIVATE_SIGNAL,
2742 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
sticky), LIVES_WIDGET_ACTIVATE_SIGNAL,
2744 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
showfct), LIVES_WIDGET_ACTIVATE_SIGNAL,
2748 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
change_speed), LIVES_WIDGET_ACTIVATE_SIGNAL,
2752 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
load_subs), LIVES_WIDGET_ACTIVATE_SIGNAL,
2760 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
export_selaudio), LIVES_WIDGET_ACTIVATE_SIGNAL,
2762 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
export_allaudio), LIVES_WIDGET_ACTIVATE_SIGNAL,
2764 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
append_audio), LIVES_WIDGET_ACTIVATE_SIGNAL,
2792 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
load_audio), LIVES_WIDGET_ACTIVATE_SIGNAL,
2803 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
show_file_info), LIVES_WIDGET_ACTIVATE_SIGNAL,
2809 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
show_messages), LIVES_WIDGET_ACTIVATE_SIGNAL,
2813 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
show_quota), LIVES_WIDGET_ACTIVATE_SIGNAL,
2815 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
rename), LIVES_WIDGET_ACTIVATE_SIGNAL,
2830 lives_signal_sync_connect(LIVES_GUI_OBJECT(rebuild_rfx), LIVES_WIDGET_ACTIVATE_SIGNAL,
2851 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
vj_show_keys), LIVES_WIDGET_ACTIVATE_SIGNAL,
2853 lives_signal_sync_connect(LIVES_GUI_OBJECT(assign_rte_keys), LIVES_WIDGET_ACTIVATE_SIGNAL,
2855 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
save_rte_defs), LIVES_WIDGET_ACTIVATE_SIGNAL,
2857 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
vj_reset), LIVES_WIDGET_ACTIVATE_SIGNAL,
2864 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
midi_save), LIVES_WIDGET_ACTIVATE_SIGNAL,
2866 lives_signal_sync_connect(LIVES_GUI_OBJECT(midi_load), LIVES_WIDGET_ACTIVATE_SIGNAL,
2873 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
mainw->
autolives), LIVES_WIDGET_ACTIVATE_SIGNAL,
2877 LIVES_WIDGET_ACTIVATE_SIGNAL,
2884 lives_signal_sync_connect(LIVES_GUI_OBJECT(about), LIVES_WIDGET_ACTIVATE_SIGNAL,
2890 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
expl_missing), LIVES_WIDGET_ACTIVATE_SIGNAL,
2912 LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
2916 LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
2920 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
m_sepwinbutton), LIVES_WIDGET_CLICKED_SIGNAL,
2924 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
m_stopbutton), LIVES_WIDGET_CLICKED_SIGNAL,
2930 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
m_mutebutton), LIVES_WIDGET_CLICKED_SIGNAL,
2932 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
m_loopbutton), LIVES_WIDGET_CLICKED_SIGNAL,
2936 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_stopbutton), LIVES_WIDGET_CLICKED_SIGNAL,
2938 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_sepwin), LIVES_WIDGET_CLICKED_SIGNAL,
2940 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_fullscreen), LIVES_WIDGET_CLICKED_SIGNAL,
2942 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_infobutton), LIVES_WIDGET_CLICKED_SIGNAL,
2944 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_hide), LIVES_WIDGET_CLICKED_SIGNAL,
2946 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_slower), LIVES_WIDGET_CLICKED_SIGNAL,
2949 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_faster), LIVES_WIDGET_CLICKED_SIGNAL,
2952 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_back), LIVES_WIDGET_CLICKED_SIGNAL,
2954 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
t_forward), LIVES_WIDGET_CLICKED_SIGNAL,
2962 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox2), LIVES_WIDGET_BUTTON_RELEASE_EVENT,
2965 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox2), LIVES_WIDGET_BUTTON_PRESS_EVENT,
2969 adj = giw_timeline_get_adjustment(GIW_TIMELINE(
mainw->
hruler));
2970 lives_signal_sync_connect_swapped(LIVES_GUI_OBJECT(adj), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
2971 LIVES_GUI_CALLBACK(on_hrule_value_changed),
mainw->
hruler);
2973 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox5), LIVES_WIDGET_MOTION_NOTIFY_EVENT,
2975 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox5), LIVES_WIDGET_BUTTON_RELEASE_EVENT,
2977 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox5), LIVES_WIDGET_BUTTON_PRESS_EVENT,
2981 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
sa_button), LIVES_WIDGET_CLICKED_SIGNAL,
2983 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox3), LIVES_WIDGET_BUTTON_PRESS_EVENT,
2984 LIVES_GUI_CALLBACK(
frame_context), LIVES_INT_TO_POINTER(1));
2985 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
eventbox4), LIVES_WIDGET_BUTTON_PRESS_EVENT,
2986 LIVES_GUI_CALLBACK(
frame_context), LIVES_INT_TO_POINTER(2));
3026 #ifdef LIVES_TV_CHANNEL1
3074 LiVESWidget *parent;
3080 if (parent && LIVES_IS_CONTAINER(parent)) {
3090 if (parent && LIVES_IS_CONTAINER(parent)) {
3271 if (!stop_closure) {
3274 (stop_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
stop_callback), NULL, NULL)));
3280 (rec_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
rec_callback), NULL, NULL)));
3284 (fullscreen_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
fullscreen_callback), NULL, NULL)));
3288 (showfct_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
showfct_callback), NULL, NULL)));
3292 (sepwin_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
sepwin_callback), NULL, NULL)));
3297 (loop_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
loop_callback), NULL, NULL)));
3301 (loop_cont_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
loop_cont_callback), NULL, NULL)));
3306 (ping_pong_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
ping_pong_callback), NULL, NULL)));
3309 (mute_audio_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
mute_audio_callback), NULL, NULL)));
3312 (dblsize_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
dblsize_callback), NULL, NULL)));
3315 (fade_closure = lives_cclosure_new(LIVES_GUI_CALLBACK(
fade_callback), NULL, NULL)));
3375 LIVES_KEY_q, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3379 LIVES_KEY_r, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3383 LIVES_KEY_f, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3387 LIVES_KEY_s, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3391 LIVES_KEY_z, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3395 LIVES_KEY_g, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3400 LIVES_KEY_l, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3404 LIVES_KEY_o, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3408 LIVES_KEY_h, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3412 LIVES_KEY_v, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3416 LIVES_KEY_s, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3420 LIVES_KEY_d, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3424 LIVES_KEY_b, (LiVESXModifierType)0, LIVES_ACCEL_VISIBLE);
3425 stop_closure = NULL;
3517 LiVESWidget *eventbox;
3518 LiVESWidget *hbox_buttons;
3519 LiVESWidget *radiobutton_free;
3520 LiVESWidget *radiobutton_start;
3521 LiVESWidget *radiobutton_end;
3522 LiVESWidget *radiobutton_ptr;
3523 LiVESWidget *rewind_img;
3524 LiVESWidget *playsel_img;
3525 LiVESWidget *play_img;
3526 LiVESWidget *loop_img;
3528 LiVESSList *radiobutton_group = NULL;
3537 lives_signal_sync_connect(LIVES_GUI_OBJECT(eventbox), LIVES_WIDGET_SCROLL_EVENT,
3542 lives_signal_sync_connect(LIVES_GUI_OBJECT(eventbox), LIVES_WIDGET_BUTTON_PRESS_EVENT,
3543 LIVES_GUI_CALLBACK(
frame_context), LIVES_INT_TO_POINTER(3));
3594 (tmp2 = (
_(
"Frame number is linked to start frame"))));
3601 (tmp2 = (
_(
"Frame number is linked to end frame"))));
3608 (tmp2 = (
_(
"Frame number is linked to playback pointer"))));
3644 LIVES_ICON_SIZE_LARGE_TOOLBAR);
3655 LIVES_ICON_SIZE_LARGE_TOOLBAR);
3670 lives_signal_sync_connect(LIVES_GUI_OBJECT(radiobutton_free), LIVES_WIDGET_TOGGLED_SIGNAL,
3673 lives_signal_sync_connect(LIVES_GUI_OBJECT(radiobutton_start), LIVES_WIDGET_TOGGLED_SIGNAL,
3676 lives_signal_sync_connect(LIVES_GUI_OBJECT(radiobutton_end), LIVES_WIDGET_TOGGLED_SIGNAL,
3678 LIVES_INT_TO_POINTER(
PRV_END));
3679 lives_signal_sync_connect(LIVES_GUI_OBJECT(radiobutton_ptr), LIVES_WIDGET_TOGGLED_SIGNAL,
3681 LIVES_INT_TO_POINTER(
PRV_PTR));
3687 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
p_rewindbutton), LIVES_WIDGET_CLICKED_SIGNAL,
3689 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
p_mutebutton), LIVES_WIDGET_CLICKED_SIGNAL,
3691 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
p_loopbutton), LIVES_WIDGET_CLICKED_SIGNAL,
3695 LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
3733 xtrabit = lives_strdup(
"");
3757 boolean need_mt =
FALSE, fake_evlist;
3770 weed_plant_t *event_list = weed_plant_new(WEED_PLANT_EVENT_LIST);
3847 static void _make_play_window(
void) {
3869 LIVES_KEY_PRESS_MASK | LIVES_KEY_RELEASE_MASK);
3886 _resize_play_window();
3922 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
play_window), LIVES_WIDGET_DELETE_EVENT,
3924 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
play_window), LIVES_WIDGET_KEY_PRESS_EVENT,
3926 lives_signal_sync_connect(LIVES_GUI_OBJECT(
mainw->
play_window), LIVES_WIDGET_KEY_RELEASE_EVENT,
3944 #if !GTK_CHECK_VERSION(3, 22, 0)
3969 #define TEST_CE_THUMBS 0
3971 static void _resize_play_window(
void) {
3974 boolean fullscreen =
TRUE;
3975 boolean ext_audio =
FALSE;
3977 int width = -1, height = -1, nwidth, nheight = 0;
3984 uint64_t xwinid = 0;
4000 scr_width_safety += 2 * bx;
4001 scr_height_safety += 2 * by;
4038 scr_width_safety >>= 1;
4039 scr_height_safety >>= 1;
4044 if (pmonitor == 0) {
4071 if (pmonitor == 0) {
4085 if (opwx * opwy > 0) {
4091 if (pmonitor == 0) {
4114 #if GTK_CHECK_VERSION(3, 20, 0)
4117 gdk_window_set_fullscreen_mode(xwin, GDK_FULLSCREEN_ON_ALL_MONITORS);
4119 gdk_window_set_fullscreen_mode(xwin, GDK_FULLSCREEN_ON_CURRENT_MONITOR);
4141 if (pmonitor == 0) {
4146 #if GTK_CHECK_VERSION(3, 0, 0)
4149 LiVESXScreen *screen;
4152 #if GTK_CHECK_VERSION(3, 0, 0)
4173 if (pmonitor != 0) {
4178 if (xwinid == -1)
return;
4210 #ifdef HAVE_PULSE_AUDIO
4296 int xnwidth, xnheight;
4304 nheight = (nheight >> 2) << 1;
4305 nwidth = (nwidth >> 2) << 1;
4308 while (nwidth >
mainw->
mgeom[pmonitor - 1].
width - scr_width_safety ||
4310 nheight = (nheight >> 2) << 1;
4311 nwidth = (nwidth >> 2) << 1;
4324 if (xnwidth <= mainw->mgeom[pmonitor - 1].width - scr_width_safety &&
4325 nheight <= mainw->mgeom[pmonitor - 1].height - scr_height_safety) {
4354 static void _kill_play_window(
void) {
4391 #define ASPECT_DIFF_LMT 0.01625f // (fabs) ratio differences in aspect ratios within this limit considered irrelevant
4406 void get_letterbox_sizes(
int *pwidth,
int *pheight,
int *lb_width,
int *lb_height,
boolean player_can_upscale) {
4407 float frame_aspect, player_aspect;
4408 if (!player_can_upscale) {
4412 frame_aspect = (float) * lb_width / (
float) * lb_height;
4413 player_aspect = (float) * pwidth / (
float) * pheight;
4415 if (*lb_width > *pwidth) *lb_width = *pwidth;
4416 if (*lb_height > *pheight) *lb_height = *pheight;
4417 if (*pwidth > *lb_width) *pwidth = *lb_width;
4418 if (*pheight > *lb_height) *pheight = *lb_height;
4423 if (frame_aspect > player_aspect) {
4425 if (*lb_width > *pwidth) {
4427 *lb_width = *pwidth;
4428 *lb_height = (float) * lb_width / frame_aspect + .5;
4429 *lb_height = (*lb_height >> 1) << 1;
4433 *pwidth = *lb_width;
4434 *pheight = (float) * pwidth / player_aspect + .5;
4435 *pheight = (*pheight >> 1) << 1;
4439 if (*lb_height > *pheight) {
4440 *lb_height = *pheight;
4441 *lb_width = (float) * lb_height * frame_aspect + .5;;
4442 *lb_width = (*lb_width >> 2) << 2;
4444 *pheight = *lb_height;
4445 *pwidth = (float) * pheight * player_aspect + .5;
4446 *pwidth = (*pwidth >> 2) << 2;
4485 #define MAX_DISP_SETNAME_LEN 10
4489 char *extra, *menuname;
4491 if (!sfile)
return NULL;
4493 char *shortened_set_name;
4501 }
else extra = lives_strdup(
"");
4503 clipname = lives_path_get_basename(sfile->
name);
4504 else clipname = lives_strdup(sfile->
name);
4520 #ifndef GTK_RADIO_MENU_BUG
4538 cfile->menuentry_func = lives_signal_sync_connect(LIVES_GUI_OBJECT(
cfile->menuentry), LIVES_WIDGET_TOGGLED_SIGNAL,
4561 #ifndef GTK_RADIO_MENU_BUG
4587 #ifndef GTK_RADIO_MENU_BUG
4592 fileno = LIVES_POINTER_TO_INT(list->data);
4606 LiVESWidget *vbox, *hbox;
4607 LiVESWidget *splash_img;
4608 LiVESPixbuf *splash_pix;
4610 LiVESError *
error = NULL;
4619 gtk_window_set_type_hint(LIVES_WINDOW(
mainw->
splash_window), GDK_WINDOW_TYPE_HINT_SPLASHSCREEN);
4642 #ifdef PROGBAR_IS_ENTRY
4690 #ifdef PROGBAR_IS_ENTRY
4692 char *tmp = lives_strdup(msg);