/* gveejay - Linux VeeJay - GVeejay GTK+-2/Glade User Interface * (C) 2002-2005 Niels Elburg * (C) 2006 Matthijs van Henten * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include static int config_file_status = 0; static gchar *config_file = NULL; static int srt_locked_ = 0; static int srt_seq_ = 0; static int bg_[4]; static int fg_[4]; static int ln_[4]; static void change_box_color_rgb( GtkWidget *box, int r, int g, int b,int a, int fill ); void text_defaults() { bg_[0] = 255; bg_[1] = 255; bg_[2] = 255; bg_[3] = 0; fg_[0] = 0; fg_[1] = 0; fg_[2] = 0; fg_[3] = 0; ln_[0] = 200; ln_[1] = 255; ln_[1] = 255; ln_[3] = 0; srt_seq_ = 0; } void on_no_caching_clicked( GtkWidget *widget, gpointer user_data) { single_vims( VIMS_NO_CACHING ); } void on_button_085_clicked(GtkWidget *widget, gpointer user_data) { single_vims(VIMS_VIDEO_SKIP_SECOND); } void on_button_086_clicked(GtkWidget *widget, gpointer user_data) { single_vims(VIMS_VIDEO_PREV_SECOND ); } void on_button_080_clicked(GtkWidget *widget, gpointer user_data) { single_vims(VIMS_VIDEO_PLAY_FORWARD); } void on_button_081_clicked(GtkWidget *widget, gpointer user_data) { single_vims(VIMS_VIDEO_PLAY_BACKWARD); } void on_button_082_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_VIDEO_PLAY_STOP ); } void on_button_083_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_VIDEO_SKIP_FRAME ); } void on_button_084_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_VIDEO_PREV_FRAME ); } void on_button_087_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_VIDEO_GOTO_START ); } void on_button_088_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_VIDEO_GOTO_END); } void on_videobar_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { gdouble slider_val = GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value; gint val = 0; switch(info->status_tokens[PLAY_MODE]) { case MODE_PLAIN: val = slider_val * info->status_tokens[TOTAL_FRAMES]; break; case MODE_SAMPLE: val = slider_val * (info->status_tokens[SAMPLE_END] - info->status_tokens[SAMPLE_START]); val += info->status_tokens[SAMPLE_START]; break; default: return; } multi_vims( VIMS_VIDEO_SET_FRAME, "%d", val ); } } /* void on_audiovolume_value_changed(GtkWidget *widget, gpointer user_data) { GtkWidget *w = glade_xml_get_widget(info->main_window, "audiovolume"); gdouble val = GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value; multi_vims( VIMS_SET_VOLUME, "%d", (gint) (val * 100.0) ); vj_msg(VEEJAY_MSG_INFO,"Set volume to %d", (gint)(val * 100.0)); }*/ void on_audiovolume_knob_value_changed(GtkAdjustment *adj, gpointer user_data) { gdouble val = gtk_adjustment_get_value(adj); multi_vims( VIMS_SET_VOLUME, "%d", (gint) val ); update_label_i( "volume_label", (gint)val,0); } void on_button_001_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_SET_PLAIN_MODE ); } void on_button_252_clicked( GtkWidget *widget, gpointer user_data) { single_vims( VIMS_DEBUG_LEVEL ); if(is_button_toggled( "button_252" )) vims_verbosity = 1; else vims_verbosity = 0; vj_msg(VEEJAY_MSG_INFO, "%s debug information", vims_verbosity ? "Displaying" : "Not displaying" ); } void on_button_251_clicked( GtkWidget *widget, gpointer user_data) { single_vims( VIMS_BEZERK ); vj_msg(VEEJAY_MSG_INFO, "Bezerk mode toggled"); } void on_button_054_clicked(GtkWidget *widget, gpointer user_data) { gchar *ext = get_text( "screenshotformat" ); if(ext) { gchar filename[100]; sprintf(filename, "frame-%d.%s", info->status_tokens[FRAME_NUM] + 1 , ext); gint w = get_nums("screenshot_width"); gint h = get_nums("screenshot_height"); multi_vims( VIMS_SCREENSHOT,"%d %d %s",w,h,filename ); vj_msg(VEEJAY_MSG_INFO, "Requested screenshot '%s' of frame %d", filename, info->status_tokens[FRAME_NUM] + 1 ); } } void on_button_200_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_EFFECT_SET_BG ); vj_msg(VEEJAY_MSG_INFO, "Requested background mask of frame %d", info->status_tokens[FRAME_NUM] + 1 ); } void on_button_5_4_clicked(GtkWidget *widget, gpointer user_data) { if( is_button_toggled("button_5_4") ) { single_vims( VIMS_AUDIO_ENABLE ); vj_msg(VEEJAY_MSG_INFO, "Audio is enabled"); } else { single_vims( VIMS_AUDIO_DISABLE ); vj_msg(VEEJAY_MSG_INFO, "Audio is disabled"); } } void on_button_samplestart_clicked(GtkWidget *widget, gpointer user_data) { info->sample[0] = info->status_tokens[FRAME_NUM]; vj_msg(VEEJAY_MSG_INFO, "New sample startings position is %d", info->sample[0] ); } void on_button_sampleend_clicked(GtkWidget *widget, gpointer user_data) { info->sample[1] = info->status_tokens[FRAME_NUM]; multi_vims( VIMS_SAMPLE_NEW, "%d %d", info->sample[0],info->sample[1]); vj_msg(VEEJAY_MSG_INFO, "New sample from EditList %d - %d", info->sample[0], info->sample[1]); gveejay_new_slot(MODE_SAMPLE); } void on_button_veejay_clicked(GtkWidget *widget, gpointer user_data) { info->watch.state = STATE_CONNECT; } void on_button_sendvims_clicked(GtkWidget *widget, gpointer user_data) { gchar *text = get_text("vimsmessage"); if(strncasecmp( text, "600:;",5 ) == 0) veejay_quit(); vj_msg(VEEJAY_MSG_INFO, "User defined VIMS message sent '%s'",text ); msg_vims( text ); } void on_vimsmessage_activate(GtkWidget *widget, gpointer user_data) { msg_vims( get_text( "vimsmessage") ); vj_msg(VEEJAY_MSG_INFO, "User defined VIMS message sent '%s'", get_text("vimsmessage")); } void on_button_fadedur_value_changed(GtkWidget *widget, gpointer user_data) { } void on_button_fadeout_clicked(GtkWidget *w, gpointer user_data) { gint num = (gint)get_numd( "button_fadedur"); gchar *timenow = format_time( num, info->el.fps ); multi_vims( VIMS_CHAIN_FADE_OUT, "0 %d", num ); vj_msg(VEEJAY_MSG_INFO, "Fade out duration %s (frames %d)", timenow, num ); if(timenow) g_free(timenow); } void on_button_fadein_clicked(GtkWidget *w, gpointer user_data) { gint num = (gint)get_numd( "button_fadedur"); gchar *timenow = format_time( num, info->el.fps ); multi_vims( VIMS_CHAIN_FADE_IN, "0 %d", num ); vj_msg(VEEJAY_MSG_INFO, "Fade in duration %s (frames %d)", timenow, num ); if(timenow) g_free(timenow); } void on_manualopacity_value_changed(GtkWidget *w, gpointer user_data) { if(info->status_lock) return; gdouble max_val = GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->upper; gdouble val = GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value; if( is_button_toggled( "loglinear" )) { double v = val; if( v > 0.0 ) v = 255.0/v; if( v > 0.0 ) v = log( val / 0.01 ) / log( 1.0 / 0.01 ); val = 255.0 * v; } multi_vims( VIMS_CHAIN_MANUAL_FADE, "0 %d", (int)(val)); vj_msg(VEEJAY_MSG_INFO, "FX Opacity set to %1.2f", val ); } static void el_selection_update() { gchar *text = format_selection_time(info->selection[0], info->selection[1]); update_label_str( "label_el_selection", text ); vj_msg( VEEJAY_MSG_INFO, "Updated EditList selection %d - %d Timecode: %s", info->selection[0], info->selection[1], text ); g_free(text); } void on_button_el_selstart_value_changed(GtkWidget *w, gpointer user_data) { info->selection[0] = get_nums("button_el_selstart"); if( info->selection[0] > info->selection[1]) update_spin_value( "button_el_selend", info->selection[0]); gchar *text = format_time( info->selection[0], info->el.fps ); update_label_str( "label_el_startpos", text); g_free(text); el_selection_update(); } void on_button_el_selend_value_changed(GtkWidget *w, gpointer user_data) { info->selection[1] = get_nums( "button_el_selend" ); if(info->selection[1] < info->selection[0]) update_spin_value( "button_el_selstart", info->selection[1]); gchar *text = format_time( info->selection[1], info->el.fps); update_label_str( "label_el_endpos", text); g_free(text); el_selection_update(); } static gboolean verify_selection() { if( (info->selection[1] - info->selection[0] ) <= 0) { vj_msg(VEEJAY_MSG_ERROR, "Invalid EditList selection %d - %d", info->selection[0], info->selection[1]); return FALSE; } return TRUE; } void on_button_el_cut_clicked(GtkWidget *w, gpointer *user_data) { if(verify_selection()) { multi_vims( VIMS_EDITLIST_CUT, "%d %d", info->selection[0], info->selection[1]); gchar *time1 = format_time( info->selection[0], info->el.fps ); gchar *time2 = format_time( info->selection[1], info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Cut %s - %s from EditList to buffer", time1, time2 ); g_free(time1); g_free(time2); info->uc.reload_hint[HINT_EL] = 1; } } void on_button_el_del_clicked(GtkWidget *w, gpointer *user_data) { if(verify_selection()) { multi_vims( VIMS_EDITLIST_DEL, "%d %d", info->selection[0], info->selection[1]); gchar *time1 = format_time( info->selection[0],info->el.fps ); gchar *time2 = format_time( info->selection[1],info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Delete %s - %s from EditList", time1, time2 ); g_free(time1); g_free(time2); update_spin_value( "button_el_selstart", 0 ); update_spin_value( "button_el_selend", 0); } } void on_button_el_crop_clicked(GtkWidget *w, gpointer *user_data) { if(verify_selection()) { multi_vims( VIMS_EDITLIST_CROP, "%d %d", info->selection[0], info->selection[1]); gchar *total = format_time( info->status_tokens[TOTAL_FRAMES],info->el.fps ); gchar *time2 = format_time( info->selection[1],info->el.fps ); gchar *time1 = format_time( info->selection[0],info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Delete 00:00:00 - %s and %s - %s from EditList", time1, time2, total ); g_free(time1); g_free(time2); g_free(total); } } void on_button_el_copy_clicked(GtkWidget *w, gpointer *user_data) { if(verify_selection()) { multi_vims( VIMS_EDITLIST_COPY, "%d %d", info->selection[0], info->selection[1] ); gchar *time1 = format_time( info->selection[0],info->el.fps ); gchar *time2 = format_time( info->selection[1],info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Copy %s - %s to buffer", time1,time2); g_free(time1); g_free(time2); } } void on_button_el_newclip_clicked(GtkWidget *w, gpointer *user) { if(verify_selection()) { multi_vims( VIMS_SAMPLE_NEW, "%d %d", info->selection[0], info->selection[1] ); vj_msg(VEEJAY_MSG_INFO, "New sample from EditList %d - %d" , info->selection[0], info->selection[1] ); gveejay_new_slot(MODE_SAMPLE); } } void on_button_el_pasteat_clicked(GtkWidget *w, gpointer *user_data) { gint val = get_nums( "button_el_selpaste" ); info->selection[2] = val; multi_vims( VIMS_EDITLIST_PASTE_AT, "%d", info->selection[2]); gchar *time1 = format_time( info->selection[2],info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Paste contents from buffer to frame %d (timecode %s)", info->selection[2], time1); g_free(time1); info->uc.reload_hint[HINT_EL] = 1; } void on_button_el_save_clicked(GtkWidget *w, gpointer *user_data) { gchar *filename = dialog_save_file( "Save EditList" ); if(filename) { multi_vims( VIMS_EDITLIST_SAVE, "%s %d %d", filename, 0, info->el.num_frames ); vj_msg(VEEJAY_MSG_INFO, "Saved EditList to %s", filename); g_free(filename); } } void on_button_el_savesel_clicked(GtkWidget *w, gpointer *user_data) { gchar *filename = dialog_save_file( "Save EditList Selection" ); if(filename) { gint start = get_nums( "button_el_selstart" ); gint end = get_nums( "button_el_selend" ); multi_vims( VIMS_EDITLIST_SAVE, "%s %d %d", filename, start, end ); vj_msg(VEEJAY_MSG_INFO,"Save EditList selection to %s", filename); g_free(filename); } } void on_button_el_add_clicked(GtkWidget *w, gpointer *user_data) { gchar *filename = dialog_open_file( "Append videofile to EditList",0 ); if(filename) { multi_vims( VIMS_EDITLIST_ADD, "%s", filename ); vj_msg(VEEJAY_MSG_INFO, "Try to add file '%s' to EditList", filename); g_free(filename); } } void on_button_el_addsample_clicked(GtkWidget *w, gpointer *user_data) { gchar *filename = dialog_open_file( "Append videofile (and create sample)",0); if( !filename ) return; int sample_id = 0; int result_len = 0; multi_vims( VIMS_EDITLIST_ADD_SAMPLE, "%d %s", 0, filename ); gchar *result = recv_vims( 3, &result_len ); if( result <= 0||result == NULL ) { gveejay_popup_err( "Error" , "Unable to load video file. Please check Veejay's console to find out why."); } else { sscanf( result, "%5d", &sample_id ); if(sample_id <= 0 ) gveejay_popup_err( "Error", "Unable to load video file. Please check Veejay's console to find out why."); else vj_msg(VEEJAY_MSG_INFO, "Created new sample %d from file %s", sample_id, filename); g_free(result); } g_free(filename ); } void on_button_el_delfile_clicked(GtkWidget *w, gpointer *user_data) { int frame = _el_ref_start_frame( info->uc.selected_el_entry ); int first_frame = frame; int last_frame = _el_ref_end_frame( info->uc.selected_el_entry ); multi_vims( VIMS_EDITLIST_DEL, "%d %d", first_frame, last_frame ); gchar *time1 = format_time( first_frame,info->el.fps ); gchar *time2 = format_time( last_frame,info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Delete %s - %s", time1,time2); g_free(time1); g_free(time2); } void on_button_fx_clearchain_clicked(GtkWidget *w, gpointer user_data) { multi_vims( VIMS_CHAIN_CLEAR, "%d",0); info->uc.reload_hint[HINT_CHAIN] = 1; info->uc.reload_hint[HINT_ENTRY] = 1; vj_msg(VEEJAY_MSG_INFO, "Clear FX Chain"); } void on_button_entry_toggle_clicked(GtkWidget *w, gpointer user_data) { if(!info->status_lock) { gint val = is_button_toggled( "button_entry_toggle" ); if(val) multi_vims( VIMS_CHAIN_ENTRY_SET_VIDEO_ON, "%d %d", 0, info->uc.selected_chain_entry ); else multi_vims( VIMS_CHAIN_ENTRY_SET_VIDEO_OFF, "%d %d", 0, info->uc.selected_chain_entry ); vj_msg(VEEJAY_MSG_INFO, "Chain Entry %d is %s", info->uc.selected_chain_entry, (val ? "Enabled" : "Disabled" )); info->uc.reload_hint[HINT_ENTRY] = 1; } } void on_button_fx_entry_value_changed(GtkWidget *w, gpointer user_data) { if(!info->status_lock) { multi_vims( VIMS_CHAIN_SET_ENTRY, "%d", (gint) gtk_spin_button_get_value( GTK_SPIN_BUTTON(w)) ); } } void on_button_fx_del_clicked(GtkWidget *w, gpointer user_data) { multi_vims( VIMS_CHAIN_ENTRY_CLEAR, "%d %d", 0, info->uc.selected_chain_entry ); info->uc.reload_hint[HINT_ENTRY] = 1; info->uc.reload_hint[HINT_CHAIN] = 1; vj_msg(VEEJAY_MSG_INFO, "Clear Effect from Entry %d", info->uc.selected_chain_entry); } #define slider_changed( arg_num, value ) \ {\ if(!info->status_lock && !info->parameter_lock)\ {\ info->parameter_lock = 1;\ multi_vims( VIMS_CHAIN_ENTRY_SET_ARG_VAL, "%d %d %d %d", 0, info->uc.selected_chain_entry,arg_num, value );\ if(info->uc.selected_rgbkey) update_rgbkey_from_slider(); \ info->parameter_lock = 0;\ }\ } #define param_changed( arg_num, fraction, name ) \ {\ if(!info->status_lock && !info->parameter_lock)\ {\ info->parameter_lock = 1;\ multi_vims( VIMS_CHAIN_ENTRY_SET_ARG_VAL, "%d %d %d %d", 0, info->uc.selected_chain_entry,arg_num, (get_slider_val(name) + fraction) );\ update_slider_value( name, (get_slider_val(name) + fraction), 0 );\ if(info->uc.selected_rgbkey) update_rgbkey_from_slider(); \ info->parameter_lock = 0;\ }\ } #define kf_changed( arg_num ) \ {\ if(!info->status_lock && arg_num != info->uc.selected_parameter_id)\ {\ vj_kf_select_parameter(arg_num);\ }\ } void on_slider_p0_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 0, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_slider_p1_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 1, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_slider_p2_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 2, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_slider_p3_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 3, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_slider_p4_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 4, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_slider_p5_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 5, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_slider_p6_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 6, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_slider_p7_value_changed(GtkWidget *w, gpointer user_data) { slider_changed( 7, (gint)GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value ); } void on_inc_p0_clicked(GtkWidget *w, gpointer user_data) { param_changed( 0, 1 , "slider_p0" ); } void on_dec_p0_clicked(GtkWidget *w, gpointer user_data) { param_changed( 0, -1, "slider_p0"); } void on_inc_p1_clicked(GtkWidget *w, gpointer user_data) { param_changed( 1, 1 , "slider_p1" ); } void on_dec_p1_clicked(GtkWidget *w, gpointer user_data) { param_changed( 1, -1, "slider_p1"); } void on_inc_p2_clicked(GtkWidget *w, gpointer user_data) { param_changed( 2, 1 , "slider_p2" ); } void on_dec_p2_clicked(GtkWidget *w, gpointer user_data) { param_changed( 2, -1, "slider_p2"); } void on_inc_p3_clicked(GtkWidget *w, gpointer user_data) { param_changed( 3, 1 , "slider_p3" ); } void on_dec_p3_clicked(GtkWidget *w, gpointer user_data) { param_changed( 3, -1, "slider_p3"); } void on_inc_p4_clicked(GtkWidget *w, gpointer user_data) { param_changed(4, 1 , "slider_p4" ); } void on_dec_p4_clicked(GtkWidget *w, gpointer user_data) { param_changed( 4, -1, "slider_p4"); } void on_inc_p5_clicked(GtkWidget *w, gpointer user_data) { param_changed(5, 1 , "slider_p5" ); } void on_dec_p5_clicked(GtkWidget *w, gpointer user_data) { param_changed( 5, -1, "slider_p5"); } void on_inc_p6_clicked(GtkWidget *w, gpointer user_data) { param_changed(6, 1 , "slider_p6" ); } void on_dec_p6_clicked(GtkWidget *w, gpointer user_data) { param_changed( 6, -1, "slider_p6"); } void on_inc_p7_clicked(GtkWidget *w, gpointer user_data) { param_changed(7, 1 , "slider_p7" ); } void on_dec_p7_clicked(GtkWidget *w, gpointer user_data) { param_changed( 7, -1, "slider_p7"); } void on_button_stoplaunch_clicked(GtkWidget *widget, gpointer user_data) { if( info->watch.state == STATE_PLAYING) { info->watch.state = STATE_DISCONNECT; } } void on_button_sample_play_clicked(GtkWidget *widget, gpointer user_data) { if(info->selection_slot) { multi_vims( VIMS_SET_MODE_AND_GO , "%d %d" , info->selection_slot->sample_type, info->selection_slot->sample_id ); } } void on_button_sample_del_clicked(GtkWidget *widget, gpointer user_data) { if( info->selection_slot ) remove_sample_from_slot(); } void on_button_samplelist_load_clicked(GtkWidget *widget, gpointer user_data) { gint erase_all = 0; if(info->status_tokens[TOTAL_SLOTS] > 0 ) { if(prompt_dialog("Load samplelist", "Loading a samplelist will delete any existing samples" ) == GTK_RESPONSE_REJECT) return; else erase_all = 1; } gchar *filename = dialog_open_file( "Open samplelist",1); if(filename) { if(erase_all) { single_vims( VIMS_SET_PLAIN_MODE ); single_vims( VIMS_SAMPLE_DEL_ALL ); } multi_vims( VIMS_SAMPLE_LOAD_SAMPLELIST, "%s", filename ); g_free(filename ); } } void on_button_samplelist_save_clicked(GtkWidget *widget, gpointer user_data) { gchar *filename = dialog_save_file( "Save samplelist"); if(filename) { multi_vims( VIMS_SAMPLE_SAVE_SAMPLELIST, "%s", filename ); vj_msg(VEEJAY_MSG_INFO, "Saved samples to %s", filename); g_free(filename); } } void on_spin_samplestart_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { gint value = (gint) gtk_spin_button_get_value( GTK_SPIN_BUTTON(widget) ); gchar *time1 = format_time(value,info->el.fps); multi_vims(VIMS_SAMPLE_SET_START, "%d %d",0, value ); vj_msg(VEEJAY_MSG_INFO, "Set sample's starting position to %d (timecode %s)", value, time1); g_free(time1); } } void on_spin_sampleend_value_changed( GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { gint value = (gint) gtk_spin_button_get_value( GTK_SPIN_BUTTON(widget) ); gchar *time1 = format_time(value,info->el.fps); multi_vims(VIMS_SAMPLE_SET_END, "%d %d", 0, value ); vj_msg(VEEJAY_MSG_INFO, "Set sample's ending position to %d (timecode %s)", value, time1); g_free(time1); } } void on_speed_slider_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { gint value = (gint) get_slider_val( "speed_slider" ); // value *= info->play_direction; multi_vims( VIMS_VIDEO_SET_SPEED, "%d", value ); vj_msg(VEEJAY_MSG_INFO, "Change video playback speed to %d", value ); } } void on_speed_knob_value_changed(GtkAdjustment *adj, gpointer user_data) { if(!info->status_lock) { gint value = gtk_adjustment_get_value(adj); value *= info->play_direction; update_label_i( "speed_label", (gint)adj->value,0); multi_vims( VIMS_SAMPLE_SET_SPEED, "%d %d",0, value ); vj_msg(VEEJAY_MSG_INFO, "Change video playback speed to %d", value ); update_label_i( "speed_label", value,0); } } void on_spin_samplespeed_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { gint value = (gint) gtk_spin_button_get_value( GTK_SPIN_BUTTON(widget) ); value *= info->play_direction; multi_vims( VIMS_SAMPLE_SET_SPEED, "%d %d",0, value ); vj_msg(VEEJAY_MSG_INFO, "Change video playback speed to %d", value ); } } void on_v4l_brightness_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { multi_vims( VIMS_STREAM_SET_BRIGHTNESS, "%d %d", info->selected_slot->sample_id, (gint) (GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value * 65535.0) ); } } void on_v4l_contrast_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { multi_vims( VIMS_STREAM_SET_CONTRAST, "%d %d", info->selected_slot->sample_id, (gint) (GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value * 65535.0 ) ); } } void on_v4l_hue_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { multi_vims( VIMS_STREAM_SET_HUE, "%d %d", info->selected_slot->sample_id, (gint) (GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value * 65535.0 ) ); } } void on_v4l_white_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { multi_vims( VIMS_STREAM_SET_WHITE, "%d %d", info->selected_slot->sample_id, (gint) (GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value * 65535.0 ) ); } } void on_v4l_color_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { multi_vims( VIMS_STREAM_SET_COLOR, "%d %d", info->selected_slot->sample_id, (gint) (GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value * 65535.0) ); } } void on_v4l_saturation_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { multi_vims( VIMS_STREAM_SET_SATURATION, "%d %d", info->selected_slot->sample_id, (gint) (GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value * 65535.0) ); } } #ifndef HAVE_GTK2_6 static gchar *my_gtk_combo_box_get_active_text(GtkComboBox *combo ) { GtkTreeIter _iter = { 0 }; gchar *_format = NULL; GtkTreeModel *_model=NULL; g_return_val_if_fail( GTK_IS_COMBO_BOX(combo),NULL); _model = gtk_combo_box_get_model(combo); g_return_val_if_fail( GTK_IS_LIST_STORE(_model),NULL); if(gtk_combo_box_get_active_iter(combo,&_iter)) gtk_tree_model_get(_model, &_iter,0,&_format,-1); return _format; } #define gtk_combo_box_get_active_text( combo ) my_gtk_combo_box_get_active_text(combo) #endif void on_stream_recordstart_clicked(GtkWidget *widget, gpointer user_data) { gint nframes = get_nums( "spin_streamduration"); gint autoplay = is_button_toggled("button_stream_autoplay"); GtkComboBox *combo = GTK_COMBO_BOX( GTK_WIDGET(glade_xml_get_widget(info->main_window,"combo_streamcodec"))); gchar *format = (gchar*)gtk_combo_box_get_active_text(combo) ; if(format != NULL) { multi_vims( VIMS_RECORD_DATAFORMAT,"%s", format ); vj_msg(VEEJAY_MSG_INFO, "Set recording format to %s", format); } multi_vims( VIMS_STREAM_REC_START, "%d %d", nframes, autoplay ); gchar *time1 = format_time( nframes,info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Record duration: %s", time1); g_free(time1); g_free(format); } void on_stream_recordstop_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_STREAM_REC_STOP ); vj_msg(VEEJAY_MSG_INFO, "Stream record stop"); } void on_spin_streamduration_value_changed(GtkWidget *widget , gpointer user_data) { gint n_frames = get_nums( "spin_streamduration" ); gchar *time = format_time(n_frames,info->el.fps); update_label_str( "label_streamrecord_duration", time ); g_free(time); } void on_button_sample_recordstart_clicked(GtkWidget *widget, gpointer user_data) { gint autoplay = is_button_toggled("button_sample_autoplay"); GtkComboBox *combo = GTK_COMBO_BOX( GTK_WIDGET(glade_xml_get_widget(info->main_window,"combo_samplecodec"))); gchar *format = (gchar*) gtk_combo_box_get_active_text(combo); gint nframes = info->uc.sample_rec_duration; gsize br=0; gsize bw=0; gchar *utftext = (gchar*) get_text( "entry_samplename"); gchar *text = (utftext != NULL ? g_locale_from_utf8( utftext, -1, &br, &bw,NULL) : NULL); if(text != NULL) { int i = 0; while( text[i] != '\0' ) { if( !isalnum( text[i] )) { error_dialog("Error", "Only alpha numeric characters are allowed"); if( text) free(text); return; } i++; } multi_vims( VIMS_SAMPLE_SET_DESCRIPTION, "%d %s", 0, text ); g_free(text); } if(format != NULL) { multi_vims( VIMS_RECORD_DATAFORMAT,"%s", format ); } multi_vims( VIMS_SAMPLE_REC_START, "%d %d", nframes, autoplay ); gchar *time1 = format_time(nframes,info->el.fps); vj_msg(VEEJAY_MSG_INFO,"Record duration: %s", time1); g_free(time1); g_free(format); } void on_button_sample_recordstop_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_SAMPLE_REC_STOP ); vj_msg(VEEJAY_MSG_INFO, "Sample record stop"); } static int sample_calctime() { /* gint n_frames = get_nums( "spin_sampleduration"); if( is_button_toggled( "sample_mulloop" ) ) { if(n_frames > 0) { n_frames *= (info->status_tokens[SAMPLE_END] - info->status_tokens[SAMPLE_START]); if( info->status_tokens[SAMPLE_LOOP] == 2 ) n_frames *= 2; } }*/ int n_frames = info->status_tokens[SAMPLE_END] - info->status_tokens[SAMPLE_START]; if( info->status_tokens[SAMPLE_LOOP] == 2 ) n_frames *= 2; return n_frames; } void on_spin_sampleduration_value_changed(GtkWidget *widget , gpointer user_data) { // get num and display label_samplerecord_duration gint n_frames = sample_calctime(); gchar *time = format_time( n_frames,info->el.fps ); update_label_str( "label_samplerecord_duration", time ); info->uc.sample_rec_duration = n_frames; g_free(time); } void on_sample_mulloop_clicked(GtkWidget *w, gpointer user_data) { gint n_frames = sample_calctime(); gchar *time = format_time( n_frames,info->el.fps ); update_label_str( "label_samplerecord_duration", time ); info->uc.sample_rec_duration = n_frames; g_free(time); } void on_sample_mulframes_clicked(GtkWidget *w, gpointer user_data) { gint n_frames = sample_calctime(); gchar *time = format_time( n_frames,info->el.fps ); update_label_str( "label_samplerecord_duration", time ); info->uc.sample_rec_duration = n_frames; g_free(time); } void on_spin_mudplay_value_changed(GtkWidget *widget, gpointer user_data) { } void on_check_samplefx_clicked(GtkWidget *widget , gpointer user_data) { if(!info->status_lock) { if( is_button_toggled( "check_samplefx" ) ) multi_vims( VIMS_SAMPLE_CHAIN_ENABLE , "%d", 0 ); else multi_vims( VIMS_SAMPLE_CHAIN_DISABLE, "%d", 0 ); } } void on_check_streamfx_clicked(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { if( is_button_toggled( "check_streamfx")) multi_vims( VIMS_STREAM_CHAIN_ENABLE, "%d", 0 ); else multi_vims( VIMS_STREAM_CHAIN_DISABLE, "%d", 0 ); } } void on_loop_none_clicked(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) multi_vims( VIMS_SAMPLE_SET_LOOPTYPE, "%d %d", 0, 0 ); } void on_loop_normal_clicked(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) multi_vims( VIMS_SAMPLE_SET_LOOPTYPE, "%d %d", 0, 1 ); } void on_loop_random_clicked(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) multi_vims( VIMS_SAMPLE_SET_LOOPTYPE, "%d %d", 0,3 ); } void on_loop_pingpong_clicked(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) multi_vims( VIMS_SAMPLE_SET_LOOPTYPE, "%d %d", 0,2 ); } /* void on_check_marker_bind_clicked(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) timeline_set_bind( info->tl, is_button_toggled("check_marker_bind")); }*/ void on_button_clearmarker_clicked(GtkWidget *widget, gpointer user_data) { multi_vims( VIMS_SAMPLE_CLEAR_MARKER, "%d", 0 ); gchar *dur = format_time( 0,info->el.fps ); update_label_str( "label_markerduration", dur ); g_free(dur); } void on_check_audio_mute_clicked(GtkWidget *widget, gpointer user_data) { } void on_button_samplelist_open_clicked(GtkWidget *widget, gpointer user_data) { gchar *filename = dialog_open_file("Load samplelist",1); if( filename ) { multi_vims( VIMS_SAMPLE_LOAD_SAMPLELIST, "%s", filename ); vj_msg(VEEJAY_MSG_INFO, "Try to load sample list %s", filename); g_free(filename); } } void on_veejay_expander_activate(GtkWidget *exp, gpointer user_data) { } void on_veejay_ctrl_expander_activate(GtkWidget *exp, gpointer user_data) { gint width= 0; gint height = 0; GtkWindow *window = GTK_WINDOW( glade_xml_get_widget_( info->main_window, "gveejay_window")); gtk_window_get_size( window, &width, &height ); if(!gtk_expander_get_expanded(GTK_EXPANDER(exp))) { gtk_widget_set_size_request( glade_xml_get_widget_(info->main_window, "veejaypanel" ), width, 400 ); gtk_window_resize( window, width, 600 ); } else { gtk_widget_set_size_request( glade_xml_get_widget_(info->main_window, "veejaypanel" ), width, 0 ); gtk_window_resize( window, width, 100 ); } } void on_button_el_takestart_clicked(GtkWidget *widget, gpointer user_data) { update_spin_value( "button_el_selstart", info->status_tokens[FRAME_NUM] ); vj_msg(VEEJAY_MSG_INFO, "Set current frame %d as editlist starting position", info->status_tokens[FRAME_NUM]); } void on_button_el_takeend_clicked(GtkWidget *widget, gpointer user_data) { update_spin_value ("button_el_selend", info->status_tokens[FRAME_NUM] ); vj_msg(VEEJAY_MSG_INFO, "Set current frame %d as editlist ending position", info->status_tokens[FRAME_NUM]); } void on_button_el_paste_clicked(GtkWidget *widget, gpointer user_data) { multi_vims( VIMS_EDITLIST_PASTE_AT, "%d", info->status_tokens[FRAME_NUM] ); gchar *time1 = format_time( info->status_tokens[FRAME_NUM],info->el.fps ); vj_msg(VEEJAY_MSG_INFO, "Paste contents of buffer at Frame %d (Tiemcode %s)", info->status_tokens[FRAME_NUM], time1); g_free(time1); } void on_new_colorstream_clicked(GtkWidget *widget, gpointer user_data) { GdkColor current_color; GtkWidget *colorsel = glade_xml_get_widget(info->main_window, "colorselection" ); gtk_color_selection_get_current_color( GTK_COLOR_SELECTION( colorsel ), ¤t_color ); // scale to 0 - 255 gint red = current_color.red / 256.0; gint green = current_color.green / 256.0; gint blue = current_color.blue / 256.0; multi_vims( VIMS_STREAM_NEW_COLOR, "%d %d %d", red,green,blue ); gveejay_new_slot(MODE_STREAM); } #define atom_aspect_ratio(name,type) {\ info->uc.priout_lock=1;\ gint value = (type == 0 ? resize_primary_ratio_x() : resize_primary_ratio_y() );\ update_spin_value(name, value);\ info->uc.priout_lock=0;\ } void on_priout_width_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock && !info->uc.priout_lock) if( is_button_toggled( "priout_ratio" )) atom_aspect_ratio( "priout_height", 1 ); } void on_priout_height_value_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock && !info->uc.priout_lock) if( is_button_toggled( "priout_ratio" )) atom_aspect_ratio( "priout_width", 0 ); } void on_priout_apply_clicked(GtkWidget *widget, gpointer user_data) { gint width = get_nums( "priout_width" ); gint height = get_nums( "priout_height" ); gint x = get_nums("priout_x" ); gint y = get_nums("priout_y" ); if( width > 0 && height > 0 ) { multi_vims( VIMS_RESIZE_SDL_SCREEN, "%d %d %d %d", width,height,x , y ); vj_msg(VEEJAY_MSG_INFO, "Resize Video Window to %dx%d", width,height); } } void on_vims_take_clicked(GtkWidget *widget, gpointer user_data) { single_vims( VIMS_BUNDLE_CAPTURE ); info->uc.reload_hint[HINT_BUNDLES] = 1; vj_msg(VEEJAY_MSG_INFO, "Create a new bundle from FX Chain"); } void on_button_key_detach_clicked(GtkWidget *widget, gpointer user) { int key_val = info->uc.selected_key_sym; int key_mod = info->uc.selected_key_mod; if( key_val > 0 ) { multi_vims( VIMS_BUNDLE_ATTACH_KEY, "1 %d %d %s", key_val, key_mod, "dummy" ); info->uc.reload_hint[HINT_BUNDLES] = 1; } } void on_vims_key_clicked( GtkWidget *widget, gpointer user_data) { int n = prompt_keydialog( "Press Key", "Key for Bundle " ); if( n == GTK_RESPONSE_ACCEPT ) { int event_id = info->uc.selected_vims_entry; int key_val = gdk2sdl_key( info->uc.pressed_key ); int mod = gdk2sdl_mod( info->uc.pressed_mod ); char *buf = info->uc.selected_vims_args; if( event_id > 0 && key_val > 0 ) { multi_vims( VIMS_BUNDLE_ATTACH_KEY, "%d %d %d %s", event_id, key_val, mod, buf ? buf : "dummy" ); info->uc.reload_hint[HINT_BUNDLES] = 1; } } } void on_button_vimsupdate_clicked(GtkWidget *widget, gpointer user_data) { if(count_textview_buffer( "vimsview" ) > 0 ) { gchar *buf = get_textview_buffer( "vimsview" ); if( info->uc.selected_vims_type == 0 ) { multi_vims( VIMS_BUNDLE_ADD, "%d %s", info->uc.selected_vims_entry, buf ); } else { int key_val = info->uc.selected_key_sym; int key_mod = info->uc.selected_key_mod; multi_vims( VIMS_BUNDLE_ATTACH_KEY, "2 %d %d %s", key_val, key_mod, info->uc.selected_vims_args ); } info->uc.reload_hint[HINT_BUNDLES] = 1; } // passent current and overwrite if bundle is valdi } void on_vims_clear_clicked(GtkWidget *widget, gpointer user_data) { clear_textview_buffer( "vimsview" ); } void on_vims_delete_clicked(GtkWidget *widget, gpointer user_data) { // delete selected bundle multi_vims( VIMS_BUNDLE_DEL, "%d", info->uc.selected_vims_entry ); info->uc.reload_hint[HINT_BUNDLES] = 1; vj_msg(VEEJAY_MSG_INFO, "Delete bundle %d from VIMS event list", info->uc.selected_vims_entry ); } void on_button_saveactionfile_clicked(GtkWidget *widget, gpointer user_data) { gchar *filename = dialog_save_file( "Save Bundles"); if(filename) { multi_vims( VIMS_BUNDLE_SAVE, "%d %s",0, filename ); vj_msg(VEEJAY_MSG_INFO, "Save Bundles and Keybindings to %s", filename ); g_free(filename); } } void on_button_loadconfigfile_clicked(GtkWidget *widget, gpointer user_data) { gchar *filename = dialog_open_file( "Load liveset / configfile",2); if(!filename) return; if( info->run_state == RUN_STATE_REMOTE ) { multi_vims( VIMS_BUNDLE_FILE, "%s", filename ); } else { if(config_file) g_free(config_file); config_file = g_strdup( filename ); config_file_status = 1; vj_msg(VEEJAY_MSG_INFO, "You can launch Veejay now"); } } void on_button_saveconfigfile_clicked(GtkWidget *widget, gpointer user_data) { gchar *filename = dialog_save_file( "Save liveset / configfile"); if(filename) { multi_vims( VIMS_BUNDLE_SAVE, "%d %s", 1, filename ); g_free(filename); } } void on_button_newbundle_clicked(GtkWidget *widget, gpointer user_data) { if(count_textview_buffer( "vimsview" ) > 0 ) { gchar *buf = get_textview_buffer( "vimsview" ); multi_vims( VIMS_BUNDLE_ADD, "%d %s", 0, buf ); info->uc.reload_hint[HINT_BUNDLES] = 1; } } void on_button_openactionfile_clicked(GtkWidget *widget, gpointer user_data) { gchar *filename = dialog_open_file( "Load Bundles",2 ); if(filename) { multi_vims( VIMS_BUNDLE_FILE, "%s", filename ); g_free( filename ); info->uc.reload_hint[HINT_BUNDLES] = 1; } } void on_button_browse_clicked(GtkWidget *widget, gpointer user_data) { // open file browser for launcher gchar *filename = dialog_open_file( "Open Videofile or EditList",0 ); if(filename) { put_text( "entry_filename", filename ); g_free(filename); } } void on_button_clipcopy_clicked(GtkWidget *widget, gpointer user_data) { if(info->selection_slot) { multi_vims( VIMS_SAMPLE_COPY , "%d", info->selected_slot->sample_id ); gveejay_new_slot(MODE_SAMPLE); } } void on_check_priout_fullscreen_clicked( GtkWidget *widget, gpointer user_data) { gint on = 0; if(is_button_toggled( "check_priout_fullscreen" ) ) on = 1; multi_vims ( VIMS_FULLSCREEN, "%d", on ); } void on_inputstream_button_clicked(GtkWidget *widget, gpointer user_data) { gint mcast = is_button_toggled( "inputstream_networktype" ); gchar *remote_ = get_text( "inputstream_remote" ); gint port = get_nums( "inputstream_portnum" ); gint bw = 0; gint br = 0; if(!remote_) { error_dialog("Error", "Not a valid hostname. Try 'localhost' or '127.0.0.1'"); GtkWidget *dialog = glade_xml_get_widget_( info->main_window, "inputstream_window" ); gtk_widget_hide( dialog ); return; } gchar *remote = g_locale_from_utf8( remote_ , -1, &br, &bw, NULL ); if( !remote || strlen(remote) <= 1 ) { GtkWidget *dialog = glade_xml_get_widget_( info->main_window, "inputstream_window" ); gtk_widget_hide( dialog ); error_dialog("Error", "Not a valid hostname. Try 'localhost' or '127.0.0.1'"); return; } remote[strlen(remote)] = '\0'; if(bw == 0 || br == 0 || port <= 0 ) { GtkWidget *dialog = glade_xml_get_widget_( info->main_window, "inputstream_window" ); gtk_widget_hide( dialog ); error_dialog("Error", "You must enter a valid remote address and/or port number"); return; } if(mcast) multi_vims( VIMS_STREAM_NEW_MCAST,"%d %s", port, remote ); else multi_vims( VIMS_STREAM_NEW_UNICAST, "%d %s", port, remote ); gveejay_new_slot(MODE_STREAM); if(remote) g_free(remote); GtkWidget *dialog = glade_xml_get_widget_( info->main_window, "inputstream_window" ); gtk_widget_hide( dialog ); } void on_inputstream_filebrowse_clicked(GtkWidget *w, gpointer user_data) { gchar *filename = dialog_open_file( "Open new input stream",3 ); if(filename) { put_text( "inputstream_filename", filename ); g_free(filename); } } /* void on_inputstream_file_button_clicked(GtkWidget *w, gpointer user_data) { gint use_y4m = is_button_toggled( "inputstream_filey4m" ); gint use_ffmpeg = is_button_toggled( "inputstream_fileffmpeg"); gint use_pic = is_button_toggled( "inputstream_filepixbuf"); gchar *file = get_text( "inputstream_filename" ); gint br = 0; gint bw = 0; gchar *filename = g_locale_from_utf8( file, -1, &br , &bw, NULL ); if( br == 0 || bw == 0 ) { error_dialog("Error", "Please enter a filename"); return; } if(use_y4m) multi_vims( VIMS_STREAM_NEW_Y4M, "%s", filename ); if(use_ffmpeg) multi_vims( VIMS_STREAM_NEW_AVFORMAT, "%s", filename ); #ifdef USE_GDK_PIXBUF if(use_pic) multi_vims( VIMS_STREAM_NEW_PICTURE, "%s", filename); #endif gveejay_new_slot(MODE_STREAM); if(filename) g_free( filename ); }*/ void on_samplerand_toggled(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { int arg = is_button_toggled( "freestyle" ); int start = is_button_toggled( "samplerand" ); if( start == 0 ) single_vims( VIMS_SAMPLE_RAND_STOP ); else multi_vims( VIMS_SAMPLE_RAND_START, "%d", arg ); } } /* * Handler to open the veejay_connection-dialog via menu */ void on_openConnection_activate (GtkMenuItem *menuitem, gpointer user_data) { if(!info->status_lock) { GtkWidget *veejay_conncection_window = glade_xml_get_widget(info->main_window, "veejay_connection"); gtk_widget_show(veejay_conncection_window); } } /* * Handler to close the veejay_connection-dialog */ void on_veejay_connection_close (GtkDialog *dialog, gpointer user_data) { if( info->watch.state == STATE_PLAYING) { info->watch.state = STATE_DISCONNECT; GtkWidget *w = glade_xml_get_widget_(info->main_window, "veejay_connection" ); gtk_widget_show( w ); } else gveejay_quit(NULL,NULL); } /* * Handler to show the video_settings-dialog via menu */ void on_VideoSettings_activate (GtkMenuItem *menuitem, gpointer user_data) { if(!info->status_lock) { GtkWidget *veejay_settings_window = glade_xml_get_widget(info->main_window, "video_options"); gtk_widget_show(veejay_settings_window); } } /* * Handler to close the video_settings-dialog */ void on_video_options_close (GtkDialog *dialog, gpointer user_data) { if(!info->status_lock) { GtkWidget *veejay_settings_window = glade_xml_get_widget(info->main_window, "video_options"); gtk_widget_hide(veejay_settings_window); } } /* * Handler to apply the settings of the video_settings-dialog */ void on_video_options_apply_clicked (GtkButton *button, gpointer user_data) { gint width = get_nums( "priout_width" ); gint height = get_nums( "priout_height" ); gint x = get_nums("priout_x" ); gint y = get_nums("priout_y" ); if( width > 0 && height > 0 ) { multi_vims( VIMS_RESIZE_SDL_SCREEN, "%d %d %d %d", width,height,x , y ); vj_msg(VEEJAY_MSG_INFO, "Resize Video Window to %dx%d", width,height); } } /* * Handler to show the VIMS_Bundles-dialog */ void on_vims_bundles_activate (GtkMenuItem *menuitem, gpointer user_data) { if(!info->status_lock) { GtkWidget *vims_bundles_window = glade_xml_get_widget(info->main_window, "vims_bundles"); gtk_widget_show(vims_bundles_window); } } /* * Handler to close the VIMS_Bundles-dialog */ void on_vims_bundles_close (GtkDialog *dialog, gpointer user_data) { if(!info->status_lock) { GtkWidget *vims_bundles_window = glade_xml_get_widget(info->main_window, "vims_bundles"); gtk_widget_hide(vims_bundles_window); } } /* Menu entries */ void on_quit1_activate( GtkWidget *w, gpointer user_data ) { gveejay_quit(NULL,NULL); } /* depending on the state, we either load an action file or a sample list !*/ void on_open2_activate( GtkWidget *w, gpointer user_data) { gchar *filename = NULL; switch( info->watch.state ) { case STATE_STOPPED: filename = dialog_open_file( "Open Action file / Liveset",2 ); if(filename) { if(config_file) g_free(config_file); config_file = g_strdup( filename ); config_file_status = 1; g_free(filename); } break; case STATE_PLAYING: filename = dialog_open_file( "Open Samplelist ",1); if(filename) { single_vims( VIMS_SET_PLAIN_MODE ); single_vims( VIMS_SAMPLE_DEL_ALL ); multi_vims( VIMS_SAMPLE_LOAD_SAMPLELIST, "%s", filename); g_free(filename); } break; default: vj_msg(VEEJAY_MSG_INFO, "Invalid state !"); break; } } void on_save1_activate( GtkWidget *w, gpointer user_data ) { if(info->watch.state == STATE_PLAYING) on_button_samplelist_save_clicked( NULL, NULL ); else vj_msg(VEEJAY_MSG_ERROR, "Nothing to save (start or connect to veejay first)"); } void on_about1_activate(GtkWidget *widget, gpointer user_data) { about_dialog(); } void on_new_input_stream1_activate(GtkWidget *widget, gpointer user_data) { GtkWidget *dialog = glade_xml_get_widget_( info->main_window, "inputdialog" ); gtk_dialog_run( GTK_DIALOG( dialog )); gtk_widget_hide( dialog ); } void on_istream_cancel_clicked(GtkWidget *widget, gpointer user_data) { GtkWidget *dialog = glade_xml_get_widget_( info->main_window, "inputdialog" ); gtk_widget_hide( dialog ); } void on_curve_togglerun_toggled(GtkWidget *widget , gpointer user_data) { } void on_stream_length_value_changed( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; multi_vims( VIMS_STREAM_SET_LENGTH, "%d", get_nums("stream_length") ); } int on_curve_buttontime_clicked() { return 1; } void on_framerate_inc_clicked( GtkWidget *w, gpointer data ) { double cur = get_slider_val( "framerate" ); cur += 1.0; update_slider_value( "framerate", (int) cur, 0 ); } void on_framerate_dec_clicked( GtkWidget *w, gpointer data ) { double cur = get_slider_val( "framerate" ); cur -= 1.0; update_slider_value( "framerate", (int) cur, 0 ); } void on_frameratenormal_clicked( GtkWidget *w, gpointer data ) { update_slider_value( "framerate", (int) info->el.fps,0 ); } void on_framerate_value_changed( GtkWidget *w, gpointer data ) { gdouble slider_val = GTK_ADJUSTMENT(GTK_RANGE(w)->adjustment)->value; int value = (int)(100.0 * slider_val); multi_vims( VIMS_FRAMERATE, "%d", value ); } void on_sync_correction_clicked( GtkWidget *w, gpointer data ) { int status = is_button_toggled( "sync_correction" ); multi_vims( VIMS_SYNC_CORRECTION, "%d", status ); } void on_curve_buttonstore_clicked(GtkWidget *widget, gpointer user_data ) { sample_slot_t *s = info->selected_slot; if(!s) return; int i = info->uc.selected_chain_entry; int j = info->uc.selected_parameter_id; int id = info->uc.entry_tokens[ENTRY_FXID]; int end = get_nums( "curve_spinend" ); int start = get_nums( "curve_spinstart" ); if( (end - start) <= 0 || id <= 0 ) { return; } GtkWidget *curve = glade_xml_get_widget_( info->main_window, "curve"); int type = 0; if( is_button_toggled( "curve_typelinear" ) ) { type = GTK_CURVE_TYPE_LINEAR; } else if ( is_button_toggled( "curve_typespline" ) ) { type = GTK_CURVE_TYPE_SPLINE; } else if ( is_button_toggled( "curve_typefreehand" ) ) { type = GTK_CURVE_TYPE_FREE; } int len = end - start; float *data = (float*) vj_calloc(sizeof(float) * len ); int *values = (int*) vj_calloc(sizeof(int) * len ); unsigned char *kf = (unsigned char*) vj_calloc( (len*4)+25); int min=0,max=0; _effect_get_minmax( id, &min,&max,j ); veejay_msg(VEEJAY_MSG_INFO, "Store KF sequence on FX entry %d, P%d (FX %d)",i,j,id); veejay_msg(VEEJAY_MSG_INFO, "FX range: %d - %d, type = %d, range = %d -%d",min,max, type, start,end); int k; float fmin = (float) min; float fmax = (float) max; get_points_from_curve( curve, len, data ); for( k = 0 ; k < len ; k++ ) values[k] = ( (int) ( data[k] * max )); int total_len = 25 + (4 * len); sprintf(kf, "key%02d%02d%08d%08d%02d",i,j,start,end,type ); unsigned char *ptr = kf + 25; for( k = 0; k < len; k ++ ) { unsigned char *p = ptr + (k*4); p[0] = values[k] & 0xff; p[1] = (values[k] >> 8) & 0xff; p[2] = (values[k] >> 16) & 0xff; p[3] = (values[k] >> 24) & 0xff; } free(values); free(data); vj_client_send_bufX( info->client, V_CMD, kf,total_len ); free(kf); } void on_curve_buttonclear_clicked(GtkWidget *widget, gpointer user_data) { gint id = info->status_tokens[ENTRY_FXID]; if( id < 0 ) id = 0; int i = info->uc.selected_chain_entry; int j = info->uc.selected_parameter_id; GtkWidget *curve = glade_xml_get_widget_( info->main_window, "curve"); reset_curve( curve ); multi_vims( VIMS_SAMPLE_KF_RESET, "%d", i ); } void on_curve_typelinear_toggled(GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("curve_typelinear")) { sample_slot_t *s = info->selected_slot; if(!s) return; GtkWidget *curve = glade_xml_get_widget_( info->main_window, "curve"); set_points_in_curve( GTK_CURVE_TYPE_LINEAR, curve ); } } void on_curve_typespline_toggled(GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("curve_typespline")) { sample_slot_t *s = info->selected_slot; if(!s) return; GtkWidget *curve = glade_xml_get_widget_( info->main_window, "curve"); set_points_in_curve( GTK_CURVE_TYPE_SPLINE, curve ); } } void on_curve_typefreehand_toggled(GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("curve_typefreehand")) { sample_slot_t *s = info->selected_slot; if(!s) return; GtkWidget *curve = glade_xml_get_widget_( info->main_window, "curve"); set_points_in_curve( GTK_CURVE_TYPE_FREE, curve ); } } void on_curve_toggleentry_toggled( GtkWidget *widget, gpointer user_data) { int k = is_button_toggled( "curve_toggleentry" ); GtkTreeModel *model = gtk_tree_view_get_model( GTK_TREE_VIEW(glade_xml_get_widget_( info->main_window, "tree_chain") )); gtk_tree_model_foreach( model, chain_update_row, (gpointer*) info ); info->uc.reload_hint[HINT_ENTRY] = 1; if(info->status_lock) return; int i = info->uc.selected_chain_entry; multi_vims( VIMS_SAMPLE_KF_STATUS, "%d %d", i, k ); } void on_kf_p0_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if(is_button_toggled("kf_p0")) kf_changed( 0 ); } void on_kf_p1_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("kf_p1")) kf_changed( 1 ); } void on_kf_p2_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("kf_p2")) kf_changed( 2 ); } void on_kf_p3_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("kf_p3")) kf_changed( 3 ); } void on_kf_p4_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("kf_p4")) kf_changed( 4 ); } void on_kf_p5_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("kf_p5")) kf_changed( 5 ); } void on_kf_p6_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("kf_p6")) kf_changed( 6 ); } void on_kf_p7_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; if( is_button_toggled("kf_p7")) kf_changed( 7 ); } void on_curve_toggleglobal_toggled(GtkWidget *widget, gpointer user_data) { } void on_button_videobook_clicked(GtkWidget *widget, gpointer user_data) { GtkWidget *n = glade_xml_get_widget_( info->main_window, "videobook" ); // set page 1 from notebook panels gint page = gtk_notebook_get_current_page( GTK_NOTEBOOK(n) ); if(page == 1 ) gtk_notebook_prev_page(GTK_NOTEBOOK(n) ); if(info->selected_slot) { /* Only if we are not playing it */ if(info->status_tokens[PLAY_MODE] != info->selected_slot->sample_type && info->status_tokens[CURRENT_ID] != info->selected_slot->sample_id ) multi_vims( VIMS_SET_MODE_AND_GO, "%d %d", info->selected_slot->sample_type, info->selected_slot->sample_id ); } } void on_samplepage_clicked(GtkWidget *widget, gpointer user_data) { GtkWidget *n = glade_xml_get_widget_( info->main_window, "panels" ); gint page = gtk_notebook_get_current_page( GTK_NOTEBOOK(n) ); gint page_needed = 2; switch( info->status_tokens[PLAY_MODE] ) { case MODE_SAMPLE: page_needed =0 ; break; case MODE_STREAM: page_needed = 1; break; case MODE_PLAIN: page_needed = 2; break; default: break; } if( page_needed != page ) gtk_notebook_set_page( GTK_NOTEBOOK(n), page_needed ); } void on_timeline_cleared(GtkWidget *widget, gpointer user_data) { multi_vims( VIMS_SAMPLE_CLEAR_MARKER, "%d", 0 ); } void on_timeline_bind_toggled( GtkWidget *widget, gpointer user_data) { // gboolean toggled = timeline_get_bind( TIMELINE_SELECTION(widget)) ; // set_toggle_button( "check_marker_bind", (toggled ? 1 :0) ); } void on_timeline_value_changed( GtkWidget *widget, gpointer user_data ) { if(!info->status_lock) { gdouble pos = timeline_get_pos( TIMELINE_SELECTION(widget) ); multi_vims( VIMS_VIDEO_SET_FRAME, "%d", (gint)pos ); } } void on_timeline_out_point_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { gdouble pos1 = timeline_get_in_point( TIMELINE_SELECTION(widget) ); gdouble pos2 = timeline_get_out_point( TIMELINE_SELECTION(widget) ); pos1 *= info->status_tokens[TOTAL_FRAMES]; pos2 *= info->status_tokens[TOTAL_FRAMES]; if(pos2 > pos1 ) { multi_vims( VIMS_SAMPLE_SET_MARKER , "%d %d %d", 0,(gint) pos1, (gint) pos2 ); gchar *dur = format_time( pos2 - pos1,info->el.fps ); update_label_str( "label_markerduration", dur ); g_free(dur); } else vj_msg(VEEJAY_MSG_INFO, "Set Out point after In point !"); } } void on_timeline_in_point_changed(GtkWidget *widget, gpointer user_data) { if(!info->status_lock) { gdouble pos1 = timeline_get_in_point( TIMELINE_SELECTION(widget) ); gdouble pos2 = timeline_get_out_point( TIMELINE_SELECTION(widget) ); pos1 *= info->status_tokens[TOTAL_FRAMES]; pos2 *= info->status_tokens[TOTAL_FRAMES]; if(pos1 < pos2 ) { multi_vims( VIMS_SAMPLE_SET_MARKER , "%d %d %d", 0, (gint) pos1, (gint) pos2 ); gchar *dur = format_time( pos2 - pos1,info->el.fps ); update_label_str( "label_markerduration", dur ); g_free(dur); } else vj_msg(VEEJAY_MSG_INFO,"Set In Point before Out Point !"); } } void on_sampleadd_clicked(GtkWidget *widget, gpointer user_data) { gchar *filename = dialog_open_file( "Add videofile as new sample",0 ); if(filename) { int sample_id = 0; // new sample int result_len = 0; multi_vims( VIMS_EDITLIST_ADD_SAMPLE, "%d %s", 0, filename ); gchar *result = recv_vims( 3, &result_len ); if( result <= 0||result == NULL ) { gveejay_popup_err( "Error", "Cannot open video file. Please check Veejay's console to find out why"); } else { sscanf( result, "%5d", &sample_id ); if(sample_id <= 0) gveejay_popup_err( "Error", "Cannot open video file. Please check Veejay's console to find out why"); else vj_msg(VEEJAY_MSG_INFO, "Created new sample %d from file %s", sample_id, filename); g_free(result); } g_free(filename ); } } void on_streamnew_clicked(GtkWidget *widget, gpointer user_data) { // inputstream_window GtkWidget *w = glade_xml_get_widget(info->main_window, "inputstream_window"); scan_devices( "tree_v4ldevices" ); gtk_widget_show(w); } void on_inputstream_close_clicked(GtkWidget *w, gpointer user_data) { GtkWidget *wid = glade_xml_get_widget(info->main_window, "inputstream_window"); gtk_widget_hide(wid); } void on_button_sdlclose_clicked(GtkWidget *w, gpointer user_data) { multi_vims( VIMS_RESIZE_SDL_SCREEN, "%d %d %d %d", 0,0,0,0 ); } void on_quicklaunch_clicked(GtkWidget *widget, gpointer user_data) { if( info->watch.state == STATE_STOPPED ) { vj_fork_or_connect_veejay( config_file ); // GtkWidget *w = glade_xml_get_widget(info->main_window, "veejay_connection"); // gtk_widget_show(w); } } static void _update_vs() { if( info->config.norm == 0 ) { update_spin_value( "vs_size0", 720 ); update_spin_value( "vs_size1", 576 ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON( glade_xml_get_widget_( info->main_window, "vs_fps" ) ), 25.0 ); } else { update_spin_value( "vs_size0", 720 ); update_spin_value( "vs_size1", 480 ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON( glade_xml_get_widget_( info->main_window, "vs_fps" ) ), 29.97 ); } set_toggle_button( "vs_custom", 0 ); } void on_vs_pal_toggled( GtkWidget *w, gpointer user_data ) { info->config.norm = is_button_toggled( "vs_pal" ) ? 0 : 1; _update_vs(); } void on_vs_ntsc_toggled( GtkWidget *w , gpointer user_data) { info->config.norm = is_button_toggled( "vs_ntsc" ) ? 1 :0; _update_vs(); } void on_vs_custom_toggled( GtkWidget *w, gpointer user_data) { if(is_button_toggled( "vs_custom" )) enable_widget( "vs_frame"); else disable_widget( "vs_frame"); } static void _rgroup_audio(void) { if(is_button_toggled( "vs_noaudio")) info->config.audio_rate = 0; else { if(is_button_toggled("vs_audio44") ) info->config.audio_rate = 48000; else info->config.audio_rate = 44000; } } void on_vs_audio48_toggled(GtkWidget *w, gpointer user_data) { _rgroup_audio(); } void on_vs_audio44_toggled(GtkWidget *w, gpointer user_data) { _rgroup_audio(); } void on_vs_noaudio_toggled(GtkWidget *w, gpointer user_data) { _rgroup_audio(); } void on_vs_avsync_toggled(GtkWidget *w, gpointer user_data) { info->config.sync = is_button_toggled( "vs_avsync" ); } void on_vs_avtimer_toggled(GtkWidget *w, gpointer user_data) { info->config.timer = is_button_toggled( "vs_avtimer" ); } void on_vs_deinter_toggled(GtkWidget *w, gpointer user_data) { info->config.deinter = is_button_toggled( "vs_deinter" ); } void on_vs_yuv420_toggled( GtkWidget *w , gpointer user_data) { if( is_button_toggled( "vs_yuv420" )) info->config.pixel_format = 0; } void on_vs_yuv422_toggled( GtkWidget *w, gpointer user_data) { if( is_button_toggled("vs_yuv422") ) info->config.pixel_format = 1; } void on_vs_sample0_toggled( GtkWidget *w , gpointer user_data) { if( is_button_toggled("vs_sample0")) info->config.sampling = 1; } void on_vs_sample1_toggled( GtkWidget *w, gpointer user_data) { if( is_button_toggled("vs_sample1")) info->config.sampling = 0; } void on_vs_size0_value_changed(GtkWidget *w, gpointer user_data) { info->config.w = get_nums( "vs_size0"); } void on_vs_size1_value_changed(GtkWidget *w, gpointer user_data) { info->config.h = get_nums( "vs_size1"); } void on_vs_fps_value_changed(GtkWidget *w, gpointer user_data) { info->config.fps = get_numd( "vs_fps"); } void on_vs_close_clicked( GtkWidget *w, gpointer user_data) { GtkWidget *vs = glade_xml_get_widget(info->main_window, "vs"); gtk_widget_hide(vs); } void on_vs_mcastosc_toggle_toggled( GtkWidget *w, gpointer user_data) { info->config.osc = is_button_toggled( "vs_mcastosc_toggle" ); if(info->config.osc) { if(info->config.mcast_osc) g_free( info->config.mcast_osc ); info->config.mcast_osc = get_text( "vs_mcastvims" ); } } void on_vs_mcastvims_toggle_toggled(GtkWidget *w, gpointer user_data) { info->config.vims = is_button_toggled( "vs_mcastvims_toggle" ); if(info->config.vims) { if(info->config.mcast_vims) g_free( info->config.mcast_vims ); info->config.mcast_vims = get_text( "vs_mcastvims" ); } } void on_vs_mcastosc_changed( GtkWidget *w, gpointer user_data) { // if(info->config.mcast_osc) // g_free(info->config.mcast_osc); // info->config.mcast_osc = get_text( "vs_mcastosc" ); } void on_vs_mcastvims_changed( GtkWidget *w, gpointer user_data) { // if(info->config.mcast_vims) // g_free(info->config.mcast_vims); // info->config.mcast_vims = get_text( "vs_mcastvims" ); } void on_inputstream_window_delete_event(GtkWidget *w, gpointer user_data) { GtkWidget *vs = glade_xml_get_widget(info->main_window, "inputstream_window"); gtk_widget_hide(vs); } void on_vs_delete_event( GtkWidget *w, gpointer user_data) { GtkWidget *vs = glade_xml_get_widget(info->main_window, "vs"); gtk_widget_hide(vs); } void on_configure1_activate( GtkWidget *w, gpointer user_data) { GtkWidget *vs = glade_xml_get_widget(info->main_window, "vs"); /* load options from config */ update_spin_value( "vs_size0", info->config.w ); update_spin_value( "vs_size1", info->config.h ); update_spin_value( "vs_fps", info->config.fps ); set_toggle_button( "vs_avsync", info->config.sync ); set_toggle_button( "vs_avtimer", info->config.timer ); set_toggle_button( "vs_deinter", info->config.deinter ); if(info->config.pixel_format == 0) set_toggle_button( "vs_yuv420", 1 ); else set_toggle_button( "vs_yuv422", 1 ); if(info->config.sampling == 1 ) set_toggle_button( "vs_sample0", 1 ); else set_toggle_button( "vs_sample1", 1 ); if(info->config.norm == 0 && info->config.w == 720 && info->config.h == 576 ) set_toggle_button( "vs_pal", 1 ); else { if(info->config.norm == 1 && info->config.w == 720 && info->config.h == 480 ) set_toggle_button( "vs_ntsc", 1 ); else set_toggle_button( "vs_custom", 1 ); } if( is_button_toggled( "vs_custom" )) enable_widget( "vs_frame" ); else disable_widget( "vs_frame" ); if( info->config.audio_rate == 0 ) set_toggle_button( "vs_noaudio" , 1 ); else { if( info->config.audio_rate == 44000 ) set_toggle_button( "vs_audio44" , 1 ); else set_toggle_button( "vs_audio48", 1 ); } /* set osc , vims mcast */ if(info->config.mcast_osc) put_text( "vs_mcastosc", info->config.mcast_osc ); if(info->config.mcast_vims) put_text( "vs_mcastvims", info->config.mcast_vims ); set_toggle_button( "vs_mcastosc_toggle", info->config.osc ); set_toggle_button( "vs_mcastvims_toggle", info->config.vims ); gtk_widget_show(vs); } void on_quit_veejay1_activate( GtkWidget *w, gpointer user_data) { veejay_quit(); } void on_curve_spinend_value_changed(GtkWidget *w, gpointer user_data) { int end_pos = get_nums( "curve_spinend" ); gchar *end_time = format_time( end_pos,info->el.fps ); update_label_str( "curve_endtime", end_time ); g_free(end_time); } void on_curve_spinstart_value_changed(GtkWidget *w, gpointer user_data) { int start_pos = get_nums( "curve_spinstart" ); gchar *start_time = format_time( start_pos,info->el.fps ); update_label_str( "curve_endtime", start_time ); g_free(start_time); } void on_veejayevent_enter_notify_event(GtkWidget *w, gpointer user_data) { info->key_now = TRUE; } void on_veejayevent_leave_notify_event(GtkWidget *w , gpointer user_data) { info->key_now = FALSE; } void on_spin_framedelay_value_changed(GtkWidget *w, gpointer user_data) { multi_vims(VIMS_VIDEO_SET_SLOW, "%d", get_nums("spin_framedelay")); } void on_mixing_effects_toggled(GtkWidget *w, gpointer user_data) { GtkWidget *n = glade_xml_get_widget_( info->main_window, "effectspanel" ); gint page = gtk_notebook_get_current_page( GTK_NOTEBOOK(n) ); if(page == 1) gtk_notebook_prev_page( GTK_NOTEBOOK(n) ); } void on_image_effects_toggled(GtkWidget *w, gpointer user_data) { GtkWidget *n = glade_xml_get_widget_( info->main_window, "effectspanel" ); gint page = gtk_notebook_get_current_page( GTK_NOTEBOOK(n) ); if(page == 0) gtk_notebook_next_page( GTK_NOTEBOOK(n) ); } void on_console1_activate(GtkWidget *w, gpointer user_data) { GtkWidget *n = glade_xml_get_widget_( info->main_window, "panels" ); gint page = gtk_notebook_get_current_page( GTK_NOTEBOOK( n ) ); if( page == MODE_PLAIN ) gtk_notebook_set_page( GTK_NOTEBOOK(n), info->status_tokens[PLAY_MODE] ); else gtk_notebook_set_page( GTK_NOTEBOOK(n), MODE_PLAIN ); } gboolean on_entry_hostname_focus_in_event( GtkWidget *w, gpointer user_data) { update_label_str( "runlabel", "Connect"); return FALSE; } gboolean on_entry_hostname_focus_out_event( GtkWidget *w, gpointer user_data) { // update_label_str( "runlabel", "Run" ); return FALSE; } gboolean on_entry_filename_focus_in_event( GtkWidget *w, gpointer user_data) { // update_label_str( "runlabel", "Run" ); return FALSE; } void on_previewbw_toggled( GtkWidget *w , gpointer user_data) { single_vims( VIMS_PREVIEW_BW ); } void on_previewtoggle_toggled(GtkWidget *w, gpointer user_data) { if(!multitrack_locked( info->mt ) ) multitrack_toggle_preview( info->mt, -1, is_button_toggled("previewtoggle"), glade_xml_get_widget(info->main_window, "imageA") ); setup_samplebank( NUM_SAMPLES_PER_COL, NUM_SAMPLES_PER_ROW ); } void on_previewlarge_clicked( GtkWidget *widget, gpointer user_data ) { int w = info->el.width; int h = info->el.height; if( w > 360 ) w = 360; if( h > 288 ) h = 288; update_spin_value( "preview_width", w ); update_spin_value( "preview_height",h ); } void on_previewspeed_value_changed( GtkWidget *widget, gpointer user_data) { double val = GTK_ADJUSTMENT(GTK_RANGE(widget)->adjustment)->value; double fps = (val * 100.0) / (double)info->el.fps ; //multitrack_set_preview_speed( info->mt , fps ); //sprintf(speed,"%2.2f " } void on_previewscale_value_changed( GtkWidget *widget, gpointer user_data) { } void on_preview_width_value_changed( GtkWidget *w, gpointer user_data) { } void on_preview_height_value_changed( GtkWidget *w, gpointer user_data) { } void on_previewsmall_clicked( GtkWidget *widget, gpointer user_data) { int w = info->el.width; int h = info->el.height; if( w >= 720) w = w / 4; else w= w / 3; if( h >= 480 ) h = h / 4; else h = h / 3; update_spin_value( "preview_width", w ); update_spin_value( "preview_height", h ); } void on_multitrack_activate( GtkWidget *w, gpointer user_data) { // multitrack_open( info->mt ); // gtk_widget_show( glade_xml_get_widget_( info->main_window , "mtwindow" )); } void on_multitrack_deactivate( GtkWidget *w, gpointer user_data) { // multitrack_close( info->mt ); // gtk_widget_hide( glade_xml_get_widget_( info->main_window , "mtwindow" )); } void on_mt_new_activate( GtkWidget *w, gpointer user_data) { multitrack_add_track( info->mt ); } void on_mt_delete_activate( GtkWidget *w, gpointer user_data) { multitrack_close_track( info->mt ); } void on_mt_sync_start_clicked( GtkWidget *w, gpointer user_data) { //multitrack_sync_start( info->mt ); } void on_mtwindow_delete_event( GtkWidget *w , gpointer user_data) { //on_multitrack_deactivate(w, user_data); } void on_mtwindow_destroy_event( GtkWidget *w, gpointer user_data) { on_mtwindow_delete_event( w, user_data ); } void on_mt_sync_stop_clicked( GtkWidget *w , gpointer user_data) { //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_PLAY_STOP,0 ); } void on_mt_sync_play_clicked( GtkWidget *w, gpointer user_data) { //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_PLAY_FORWARD,0 ); } void on_mt_sync_backward_clicked( GtkWidget *w, gpointer user_data) { //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_PLAY_BACKWARD,0); } void on_mt_sync_gotostart_clicked( GtkWidget *w, gpointer user_data) { //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_GOTO_START,0 ); } void on_mt_sync_gotoend_clicked( GtkWidget *w, gpointer user_data) { //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_GOTO_END,0 ); } void on_mt_sync_decspeed_clicked( GtkWidget *w, gpointer user_data) { int n = info->status_tokens[SAMPLE_SPEED]; if( n < 0 ) n += 1; if( n > 0 ) n -= 1; //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_SET_SPEED, n ); } void on_mt_sync_incspeed_clicked( GtkWidget *w, gpointer user_data) { int n = info->status_tokens[SAMPLE_SPEED]; if( n < 0 ) n -= 1; if( n > 0 ) n += 1; //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_SET_SPEED, n ); } void on_mt_sync_prev_clicked( GtkWidget *w , gpointer user_data) { //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_PREV_FRAME ,0 ); } void on_mt_sync_next_clicked( GtkWidget *w, gpointer user_data) { //multitrack_sync_simple_cmd( info->mt, VIMS_VIDEO_SKIP_FRAME, 0 ); } void on_delete1_activate(GtkWidget *w, gpointer user_data) { } void on_new_source1_activate( GtkWidget *w , gpointer data ) { } void on_add_file1_activate(GtkWidget *w, gpointer user_data) { } void on_colorselection_color_changed( GtkWidget *w, gpointer user_data) { } static gchar *get_clipboard_fx_buffer() { int len = 0; int p[16]; int i; for(i=0; i <16;i++) p[i] = 0; multi_vims( VIMS_CHAIN_GET_ENTRY, "%d %d", 0, info->uc.selected_chain_entry ); gchar *answer = recv_vims(3,&len); if(len <= 0 || answer == NULL ) { gveejay_popup_err( "Error", "Nothing in FX clipboard"); if(answer) g_free(answer); return NULL; } i = sscanf( answer, "%d %d %d %d %d %d %d %d %d %d %d", &p[0], //fx id &p[1], //2 video &p[2], //n params &p[3], //p0 &p[4], //p1 &p[5], //p2 &p[6], //p3 &p[7],//p4 &p[8],//p5 &p[9],//p6 &p[10] //p7 ); char preset[512]; bzero(preset,512); sprintf(preset, "%d", p[0]); for(i=0; i < p[2] ;i++) { char tmp[10]; sprintf(tmp, " %d", p[3+i] ); strcat( preset,tmp); } g_free(answer); return strdup(preset); } static gchar* last_fx_buf = NULL; void on_button_fx_cut_clicked( GtkWidget *w, gpointer user_data) { if(last_fx_buf) free(last_fx_buf); last_fx_buf = get_clipboard_fx_buffer(); on_button_fx_del_clicked( NULL,NULL ); } void on_button_fx_paste_clicked( GtkWidget *w, gpointer user_data) { int i = info->uc.selected_chain_entry; sample_slot_t *s = info->selected_slot; if( last_fx_buf && s) { char msg[256]; sprintf( msg, "%03d:%d %d %s;", VIMS_CHAIN_ENTRY_SET_PRESET, s->sample_id, i, last_fx_buf ); msg_vims(msg); info->uc.reload_hint[HINT_ENTRY]=1; } } void on_button_fx_copy_clicked(GtkWidget *w, gpointer user_data) { if(last_fx_buf) free(last_fx_buf); last_fx_buf = get_clipboard_fx_buffer(); } void on_copy1_activate( GtkWidget *w, gpointer user_data) { } void on_new_color1_activate(GtkWidget *w , gpointer user_data) { } void on_delete2_activate( GtkWidget *w, gpointer user_data) { } static void refresh_srt_info( void ); void on_spin_samplebank_select_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { GtkNotebook *samplebank = GTK_NOTEBOOK( info->sample_bank_pad ); gint max_page = gtk_notebook_get_n_pages(samplebank); gint page = gtk_spin_button_get_value_as_int(spinbutton); if(page >= max_page){ /* @mvh I know this is not pretty but why make it difficult */ page = 0; gtk_spin_button_set_value(spinbutton, page); }//if gtk_notebook_set_current_page(samplebank, page); } void on_button_samplebank_prev_clicked (GtkButton *button, gpointer user_data) { GtkNotebook *samplebank = GTK_NOTEBOOK( info->sample_bank_pad ); gtk_notebook_prev_page(samplebank); } void on_button_samplebank_next_clicked (GtkButton *button, gpointer user_data) { GtkNotebook *samplebank = GTK_NOTEBOOK( info->sample_bank_pad ); gtk_notebook_next_page(samplebank); } void on_vims_messenger_rewind_clicked( GtkButton *togglebutton, gpointer user_data) { info->vims_line = 0; } void on_vims_messenger_clear_clicked( GtkButton *togglebutton, gpointer user_data) { clear_textview_buffer( "vims_messenger_textview"); } void on_vims_messenger_single_clicked( void ) { GtkTextView *t= GTK_TEXT_VIEW(GTK_WIDGET( glade_xml_get_widget( info->main_window, "vims_messenger_textview")) ); GtkTextBuffer* buffer = gtk_text_view_get_buffer(t); int lc = gtk_text_buffer_get_line_count(buffer); if(info->vims_line > lc ) info->vims_line = 0; while(info->vims_line < lc ) { GtkTextIter start, end; gtk_text_buffer_get_iter_at_line(buffer, &start, info->vims_line); end = start; gtk_text_iter_forward_sentence_end(&end); gchar *str = gtk_text_buffer_get_text (buffer, &start, &end, TRUE); info->vims_line++; if(str[0] != '+') { vj_msg(VEEJAY_MSG_INFO, "User defined VIMS message sent '%s'",str ); msg_vims( str ); break; } } } static void srt_load_subtitle(int sid) { gint len = 0; gint seq_id = 0; gint tc1l=0; gint tc2l=0; char tc1[20]; char tc2[20]; char tmp[1000]; gint tlen=0; gint ln[4]; gint fg[4]; gint bg[4]; gint use_bg = 0; gint outline = 0; gint size = 0; gint font = 0; gint x =0; gint y = 0; multi_vims( VIMS_SRT_INFO, "%d", sid ); gchar *text = recv_vims( 6,&len ); bzero(tmp,1000); bzero(tc1,20); bzero(tc2,20); clear_textview_buffer( "textview_text" ); int s1=0,s2=0; int n = 0; if(text && len > 0 ) { sscanf( text,"%5d%9d%9d%2d", &seq_id ,&s1,&s2,&tc1l ); strncpy( tc1, text+7+18,tc1l ); sscanf( text+7+18+tc1l,"%2d", &tc2l ); strncpy( tc2, text+7+18+tc1l + 2, tc2l ); sscanf( text+7+18+tc1l+2+tc2l, "%3d", &tlen ); strncpy( tmp, text + 7 + 18 + tc1l + 2 + tc2l + 3, tlen ); n = sscanf( text+7+18 + tc1l+2+tc2l+3+tlen,"%04d%04d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d%03d", &x,&y, &font, &size, &bg[0],&bg[1],&bg[2],&fg[0],&fg[1],&fg[2],&use_bg,&outline,&ln[0],&ln[1], &ln[2],&bg[3],&fg[3],&ln[3] ); #ifdef STRICT_CHECKING assert( n == 18 ); #endif } srt_locked_ = 1; update_spin_range( "spin_text_start",0, get_total_frames(),s1); update_spin_range( "spin_text_end",0, get_total_frames(),s2); set_textview_buffer( "textview_text", tmp ); update_spin_value( "spin_text_start" ,s1); update_spin_value( "spin_text_end", s2 ); change_box_color_rgb( glade_xml_get_widget(info->main_window, "boxbg" ), bg[0],bg[1],bg[2],bg[3], (is_button_toggled( "textcolorbg" ) ? 1 : 0 ) ); change_box_color_rgb( glade_xml_get_widget(info->main_window, "boxtext" ), fg[0],fg[1],fg[2],fg[3], (is_button_toggled( "textcolorfg" ) ? 1: 0) ); change_box_color_rgb( glade_xml_get_widget( info->main_window, "boxln" ), ln[0],ln[1],ln[2],ln[3], (is_button_toggled( "textcolorln" ) ? 1: 0) ); memcpy( bg_, bg, sizeof(bg_)); memcpy( fg_, fg, sizeof(fg_)); memcpy( ln_, ln, sizeof(ln_)); set_toggle_button( "use_bg", use_bg ); set_toggle_button( "use_outline", outline); update_spin_value( "spin_text_size", size ); update_spin_value( "spin_text_x", x ); update_spin_value( "spin_text_y", y ); if(is_button_toggled( "textcolorfg") ) { update_slider_value( "textcolorred", fg_[0],0 ); update_slider_value( "textcolorblue",fg_[2],0 ); update_slider_value( "textcolorgreen",fg_[1],0); update_slider_value( "textcoloralpha", fg_[3],0); } else if( is_button_toggled( "textcolorbg") ) { update_slider_value( "textcolorred", bg_[0],0 ); update_slider_value( "textcolorblue",bg_[2],0 ); update_slider_value( "textcolorgreen",bg_[1],0); update_slider_value( "textcoloralpha",bg_[3],0); } else if ( is_button_toggled( "textcolorln" )) { update_slider_value( "textcolorred", ln_[0],0 ); update_slider_value( "textcolorblue",ln_[2],0 ); update_slider_value( "textcolorgreen",ln_[1],0); update_slider_value( "textcoloralpha", ln_[3],0); } GtkWidget *combo = glade_xml_get_widget( info->main_window, "combobox_fonts" ); gtk_combo_box_set_active( GTK_COMBO_BOX( combo ), font ); // glade_xml_get_widget( info->main_window, "combobox_textsrt" ); // gtk_combo_box_set_active( GTK_COMBO_BOX( combo ), seq_id-1 ); srt_locked_ = 0; if(text) free(text); } void on_button_text_new_clicked( GtkWidget *w, gpointer data ) { gint x = get_nums( "spin_text_x" ); gint y = get_nums( "spin_text_y" ); gint s1 = 0; gint s2 = 0; if( info->status_tokens[PLAY_MODE] == MODE_SAMPLE ) { s1 = info->status_tokens[SAMPLE_START]; s2 = info->status_tokens[SAMPLE_END]; } else { s1 = 0; s2 = get_nums("stream_length"); } gchar *text = strdup(" "); multi_vims( VIMS_SRT_ADD, "%d %d %d %d %d %s", 0,s1,s2,x,y,text ); int tmp = 0; gchar *new_srt_id = recv_vims( 5, &tmp ); int id = 0; if(new_srt_id && tmp > 0) { sscanf( new_srt_id, "%d", &id ); if(id > 0 ) srt_seq_ = id; } if( new_srt_id ) free(new_srt_id); free(text); if( id > 0 ) info->uc.reload_hint[HINT_HISTORY] = 1; } void on_button_text_del_clicked( GtkWidget *w, gpointer data ) { multi_vims( VIMS_SRT_DEL, "%d", srt_seq_ ); info->uc.reload_hint[HINT_HISTORY] = 1; } void on_spin_text_start_value_changed( GtkWidget *w, gpointer data ) { gint start = get_nums( "spin_text_end"); char *text = format_time( start, info->el.fps ); update_label_str( "labeltextstart", text ); free(text); } void on_spin_text_end_value_changed( GtkWidget *w, gpointer data ) { gint end = get_nums( "spin_text_end" ); char *text = format_time( end, info->el.fps ); update_label_str( "labeltextend", text ); free(text); } void on_spin_text_x_value_changed( GtkWidget *w, gpointer data ) { if( srt_locked_) return; gint x = get_nums( "spin_text_x" ); gint y = get_nums( "spin_text_y"); multi_vims( VIMS_FONT_POS,"%d %d", x,y ); } void on_spin_text_y_value_changed( GtkWidget *w, gpointer data ) { if( srt_locked_) return; gint x = get_nums( "spin_text_x" ); gint y = get_nums( "spin_text_y"); multi_vims( VIMS_FONT_POS,"%d %d", x,y ); } void on_button_srt_save_clicked( GtkWidget *w, gpointer data ) { gchar *filename = dialog_save_file("Save SRT file"); if( filename ) { multi_vims( VIMS_SRT_SAVE, "%s", filename ); g_free(filename); } } void on_button_srt_load_clicked( GtkWidget *w, gpointer data ) { gchar *filename = dialog_open_file("Load SRT file",4); if( filename ) { multi_vims( VIMS_SRT_LOAD, "%s", filename ); g_free(filename); } } void on_combobox_fonts_changed( GtkWidget *w, gpointer data ) { if(srt_locked_) return; gint font = gtk_combo_box_get_active( GTK_COMBO_BOX( w ) ); gint size = get_nums( "spin_text_size" ); multi_vims( VIMS_FONT_SIZE_FONT, "%d %d", font , size ); } void on_spin_text_size_value_changed( GtkWidget *w, gpointer data ) { if( srt_locked_) return; GtkWidget *ww = glade_xml_get_widget( info->main_window, "combobox_fonts" ); gint font = gtk_combo_box_get_active( GTK_COMBO_BOX( ww ) ); gint size = get_nums( "spin_text_size" ); multi_vims( VIMS_FONT_SIZE_FONT, "%d %d", font , size ); } void on_button_text_update_clicked(GtkWidget *w, gpointer data) { gint s1 = get_nums( "spin_text_start" ); gint s2 = get_nums( "spin_text_end" ); gchar *text = get_textview_buffer( "textview_text" ); if(text) multi_vims( VIMS_SRT_UPDATE, "%d %d %d %s", srt_seq_, s1,s2,text ); } static int str_to_tc( char *tc ) { int res = 0; float fps = info->el.fps; int parts[4] = { 0,0,0,0}; int n = sscanf( tc, "%2d:%2d:%2d,%d",&parts[0],&parts[1],&parts[2],&parts[3]); res = (int) parts[3]; res += (int) ( fps * parts[2] ); res += (int) ( fps * 60 * parts[1] ); res += (int) ( fps * 3600 * parts[0] ); return res; } static void change_box_color_rgb( GtkWidget *box, int r, int g, int b,int a, int fill ) { GdkGC *gc = gdk_gc_new( box->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); col.red = 255.0 * r; col.green = 255.0 * g; col.blue = 255.0 * b; if(fill) { update_slider_value( "textcolorred", r ,0); update_slider_value( "textcolorgreen",g,0 ); update_slider_value( "textcolorblue",b,0); update_slider_value( "textcoloralpha",a,0); } gdk_color_alloc( gtk_widget_get_colormap( box ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( box->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); } void on_combobox_textsrt_changed( GtkWidget *w, gpointer data) { if(info->status_lock) return; gchar *k = gtk_combo_box_get_active_text( GTK_COMBO_BOX(w) ); int sid = atoi(k); if( sid > 0) { multi_vims( VIMS_SRT_SELECT, "%d", sid ); srt_seq_ = sid; srt_load_subtitle(sid); } } static void change_box_color( GtkWidget *box, double val, int plane, int fill ) { GdkGC *gc = gdk_gc_new( box->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); double v = (1.0 / 255.0) * val; int r = get_slider_val( "textcolorred" ); int b = get_slider_val( "textcolorgreen" ); int g = get_slider_val( "textcolorblue" ); int a = get_slider_val("textcoloralpha" ); if(plane==0) { col.red = 65535.0 * v; switch(fill) { case 0: fg_[0] = r; break; case 1: bg_[0] = r; break; case 2: ln_[0] = r; break; } } if(plane==1) { col.green = 65536 * v; switch(fill) { case 0: fg_[1] = g; break; case 1: bg_[1] = g; break; case 2: ln_[1] = g; break; } } if(plane==2) { col.blue = 65536 * v; switch(fill) { case 0: fg_[2] = b; break; case 1: bg_[2] = b; break; case 2: ln_[2] = b; break; } } if(plane==-1) { col.red = 255.0 * r; col.green = 255.0 * g; col.blue = 255.0 * b; switch(fill) { case 0: fg_[0] = r; fg_[1] = g; fg_[2] = b; fg_[3] = a; break; case 1: bg_[0] = r; bg_[1] = g; bg_[2] = b; bg_[3] = a; break; case 2: ln_[0] = r; ln_[1] = g; ln_[2] = b; ln_[3] = a; break; } } gdk_color_alloc( gtk_widget_get_colormap( box ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( box->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); } static void colbox( const char *name1,const char *name2, int plane ) { int fg = is_button_toggled("textcolorfg"); int bg = is_button_toggled("textcolorbg"); int ln = is_button_toggled("textcolorln"); int v = get_slider_val( name2 ); change_box_color( glade_xml_get_widget( info->main_window,name1 ) , v, plane, -1 ); //green if(fg) change_box_color( glade_xml_get_widget( info->main_window, "boxtext" ), 0.0, -1, 0 ); if(bg) change_box_color( glade_xml_get_widget( info->main_window, "boxbg" ), 0.0, -1, 1 ); if(ln) change_box_color( glade_xml_get_widget( info->main_window, "boxln" ), 0.0, -1, 2 ); } void on_textcoloralpha_value_changed(GtkWidget *w, gpointer data ) { if(info->status_lock || srt_locked_) return; int fg = is_button_toggled("textcolorfg"); int bg = is_button_toggled("textcolorbg"); int ln = is_button_toggled("textcolorln"); gint r = get_slider_val( "textcolorred" ); gint g = get_slider_val( "textcolorgreen" ); gint b = get_slider_val( "textcolorblue" ); gint a = get_slider_val( "textcoloralpha" ); int m = 0; if( fg ) { fg_[3] = a; m = 1; } if( bg ) { bg_[3] = a; m = 2; } if( ln ) { ln_[3] = a; m = 3; } multi_vims( VIMS_FONT_COL, "%d %d %d %d %d", r,g,b,a, m ); } void on_textcolorred_value_changed(GtkWidget *w , gpointer data ) { colbox( "boxred", "textcolorred", 0 ); } void on_textcolorgreen_value_changed(GtkWidget *w , gpointer data ) { colbox( "boxgreen", "textcolorgreen", 1 ); } void on_textcolorblue_value_changed(GtkWidget *w , gpointer data ) { colbox( "boxblue", "textcolorblue", 2 ); } void on_textcolorfg_toggled( GtkWidget *w, gpointer data ) { if( is_button_toggled( "textcolorfg" ) ) { update_slider_value( "textcolorred", fg_[0],0 ); update_slider_value( "textcolorgreen", fg_[1],0 ); update_slider_value( "textcolorblue", fg_[2],0); update_slider_value( "textcoloralpha", fg_[3],0); } } void on_textcolorbg_toggled( GtkWidget *w, gpointer data ) { if( is_button_toggled( "textcolorbg" ) ) { update_slider_value( "textcolorred", bg_[0],0 ); update_slider_value( "textcolorgreen", bg_[1],0 ); update_slider_value( "textcolorblue", bg_[2],0); update_slider_value( "textcoloralpha", bg_[3],0); } } void on_textcolorln_toggled( GtkWidget *w, gpointer data ) { if( is_button_toggled( "textcolorln" ) ) { update_slider_value( "textcolorred", ln_[0],0 ); update_slider_value( "textcolorgreen", ln_[1],0 ); update_slider_value( "textcolorblue", ln_[2],0); update_slider_value( "textcoloralpha", ln_[3],0); } } void on_use_bg_toggled( GtkWidget *w , gpointer data) { if(srt_locked_ || info->status_lock) return; multi_vims( VIMS_FONT_COL, "%d %d %d %d %d", is_button_toggled("use_outline"), is_button_toggled("use_bg"), 0, 0, 0 ); } void on_use_outline_toggled( GtkWidget *w, gpointer data) { if(srt_locked_ || info->status_lock) return; multi_vims( VIMS_FONT_COL, "%d %d %d %d %d", is_button_toggled("use_outline"), is_button_toggled("use_bg"), 0, 0, 0 ); } void on_buttonfg_clicked( GtkWidget *w, gpointer data ) { gint r = get_slider_val( "textcolorred" ); gint g = get_slider_val( "textcolorgreen" ); gint b = get_slider_val( "textcolorblue" ); gint a = get_slider_val( "textcoloralpha"); fg_[0] = r; fg_[1] = g; fg_[2] = b; fg_[3] = a; multi_vims( VIMS_FONT_COL, "%d %d %d %d %d", r,g,b,a, 1 ); } void on_buttonbg_clicked( GtkWidget *w, gpointer data ) { gint r = get_slider_val( "textcolorred" ); gint g = get_slider_val( "textcolorgreen" ); gint b = get_slider_val( "textcolorblue" ); gint a = get_slider_val( "textcoloralpha" ); bg_[0] = r; bg_[1] = g; bg_[2] = b; bg_[3] = a; multi_vims( VIMS_FONT_COL, "%d %d %d %d %d", r,g,b,a, 2 ); } void on_buttonln_clicked( GtkWidget *w, gpointer data ) { gint r = get_slider_val( "textcolorred" ); gint g = get_slider_val( "textcolorgreen" ); gint b = get_slider_val( "textcolorblue" ); gint a = get_slider_val( "textcoloralpha" ); ln_[0] = r; ln_[1] = g; ln_[2] = b; ln_[3] = a; multi_vims( VIMS_FONT_COL, "%d %d %d %d %d", r,g,b,a, 3 ); } gboolean boxfg_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer data ) { gdk_window_clear_area( w->window, event->area.x, event->area.y, event->area.width,event->area.height ); GdkGC *gc = gdk_gc_new( w->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); col.red = 255.0 * fg_[0]; col.green = 255.0 * fg_[1]; col.blue = 255.0 * fg_[2]; gdk_color_alloc( gtk_widget_get_colormap( w ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( w->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); return TRUE; } gboolean boxbg_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer data ) { gdk_window_clear_area( w->window, event->area.x, event->area.y, event->area.width,event->area.height ); GdkGC *gc = gdk_gc_new( w->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); col.red = 255.0 * bg_[0]; col.green = 255.0 * bg_[1]; col.blue = 255.0 * bg_[2]; gdk_color_alloc( gtk_widget_get_colormap( w ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( w->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); return TRUE; } gboolean boxln_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer data ) { gdk_window_clear_area( w->window, event->area.x, event->area.y, event->area.width,event->area.height ); GdkGC *gc = gdk_gc_new( w->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); col.red = 255.0 * ln_[0]; col.green = 255.0 * ln_[1]; col.blue = 255.0 * ln_[2]; gdk_color_alloc( gtk_widget_get_colormap( w ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( w->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); return TRUE; } gboolean boxred_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer data ) { gdk_window_clear_area( w->window, event->area.x, event->area.y, event->area.width,event->area.height ); GdkGC *gc = gdk_gc_new( w->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); col.red = 255 * get_slider_val( "textcolorred" ); gdk_color_alloc( gtk_widget_get_colormap( w ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( w->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); return TRUE; } gboolean boxgreen_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer data ) { gdk_window_clear_area( w->window, event->area.x, event->area.y, event->area.width,event->area.height ); GdkGC *gc = gdk_gc_new( w->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); col.green = 255 * get_slider_val( "textcolorgreen" ); gdk_color_alloc( gtk_widget_get_colormap( w ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( w->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); return TRUE; } gboolean boxblue_expose_event(GtkWidget *w, GdkEventExpose *event, gpointer data ) { gdk_window_clear_area( w->window, event->area.x, event->area.y, event->area.width,event->area.height ); GdkGC *gc = gdk_gc_new( w->window ); GdkColor col; memset( &col,0, sizeof( GdkColor ) ); col.blue = 255 * get_slider_val( "textcolorblue" ); gdk_color_alloc( gtk_widget_get_colormap( w ), &col ); gdk_gc_set_foreground( gc, &col ); gdk_draw_rectangle( w->window, gc, TRUE, 0, 0, 24, 24 ); gdk_gc_unref( gc ); return TRUE; } void on_osdbutton_clicked(GtkWidget *w, gpointer data ) { single_vims(VIMS_OSD); } void on_seqactive_toggled( GtkWidget *w, gpointer data ) { if(info->status_lock) return; multi_vims( VIMS_SEQUENCE_STATUS, "%d" , is_button_toggled("seqactive" ) ? 1 : 0 ); } void on_bq_button_clicked( GtkWidget *w, gpointer data ) { info->quality = 2; multitrack_set_quality( info->mt, 2 ); } void on_hqbutton_clicked( GtkWidget *w, gpointer data ) { info->quality = 1; multitrack_set_quality( info->mt, 1 ); } void on_lqbutton_clicked( GtkWidget *w, gpointer data ) { info->quality = 0; multitrack_set_quality( info->mt, 0 ); } void on_uq_button_clicked( GtkWidget *w, gpointer data ) { info->quality = 3; multitrack_set_quality( info->mt, 3 ); } void on_record_vp_clicked( GtkWidget *w, gpointer data ) { single_vims( VIMS_RECVIEWPORT ); }