X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindow.C;h=0661591a4c82374f6e985e6b5f004058109220af;hp=6d4c8fb81ff7a68d81b25f6462c980de6c6d07a2;hb=9668279ccef86a9cc9138aaa1a659f158698f829;hpb=a64e7d16c44bba0d137936227fc55871bb26c903 diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 6d4c8fb8..0661591a 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -80,6 +80,7 @@ #include "mainsession.h" #include "mainundo.h" #include "mbuttons.h" +#include "mixersalign.h" #include "mutex.h" #include "mwindowgui.h" #include "mwindow.h" @@ -240,6 +241,7 @@ MWindow::MWindow() speed_edl = 0; proxy_beep = 0; shuttle = 0; + mixers_align = 0; } @@ -264,6 +266,7 @@ MWindow::~MWindow() delete shuttle; shuttle = 0; delete batch_render; batch_render = 0; delete render; render = 0; + delete mixers_align; mixers_align = 0; commit_commercial(); if( commercials && !commercials->remove_user() ) commercials = 0; close_mixers(); @@ -358,7 +361,6 @@ MWindow::~MWindow() colormodels.remove_all_objects(); interlace_project_modes.remove_all_objects(); interlace_asset_modes.remove_all_objects(); - interlace_asset_fixmethods.remove_all_objects(); sighandler->terminate(); delete sighandler; delete run_lock; @@ -936,14 +938,7 @@ void MWindow::init_preferences() { preferences = new Preferences; preferences->load_defaults(defaults); - const char *lv2_path = getenv("LV2_PATH"); - if( lv2_path && strcmp(lv2_path, preferences->lv2_path) ) { - strncpy(preferences->lv2_path, lv2_path, sizeof(preferences->lv2_path)); - remove_plugin_index(); - } - else if( !lv2_path && preferences->lv2_path[0] ) { - File::setenv_path("LV2_PATH",preferences->lv2_path, 0); - } + File::setenv_path("LV2_PATH",preferences->lv2_path, 1); session = new MainSession(this); session->load_defaults(defaults); // set x11_host, screens, window_config @@ -1186,8 +1181,12 @@ ZWindow *MWindow::get_mixer(Mixer *&mixer) zwindows_lock->lock("MWindow::get_mixer"); if( !mixer ) mixer = edl->mixers.new_mixer(); ZWindow *zwindow = 0; - for( int i=0; !zwindow && iidx < 0 ) zwindow = zwindows[i]; + for( int i=0; !zwindow && irunning() ) continue; + if( zwdw->idx >= 0 ) continue; + zwindow = zwindows[i]; + } if( !zwindow ) zwindows.append(zwindow = new ZWindow(this)); zwindow->idx = mixer->idx; @@ -1317,6 +1316,7 @@ void MWindow::close_mixers(int destroy) for( int i=zwindows.size(); --i>=0; ) { ZWindow *zwindow = zwindows[i]; if( zwindow->idx < 0 ) continue; + zwindow->idx = -1; zwindow->destroy = destroy; ZWindowGUI *zgui = zwindow->zgui; zgui->lock_window("MWindow::select_zwindow 0"); @@ -1331,12 +1331,12 @@ void MWindow::close_mixers(int destroy) } } -ZWindow *MWindow::create_mixer(Indexable *indexable) +ZWindow *MWindow::create_mixer(Indexable *indexable, double position) { ArrayList new_assets; new_assets.append(indexable); Track *track = edl->tracks->last; - load_assets(&new_assets, 0, LOADMODE_NEW_TRACKS, 0, 0, 0, 0, 0, 0); + load_assets(&new_assets, position, LOADMODE_NEW_TRACKS, 0, 0, 0, 0, 0, 1); track = !track ? edl->tracks->first : track->next; Mixer *mixer = 0; ZWindow *zwindow = get_mixer(mixer); @@ -1361,7 +1361,7 @@ ZWindow *MWindow::create_mixer(Indexable *indexable) return zwindow; } -void MWindow::create_mixers() +void MWindow::create_mixers(double position) { if( !session->drag_assets->size() && !session->drag_clips->size() ) return; @@ -1373,13 +1373,13 @@ void MWindow::create_mixers() for( int i=0; idrag_assets->size(); ++i ) { Indexable *indexable = session->drag_assets->get(i); if( !indexable->have_video() ) continue; - ZWindow *zwindow = create_mixer(indexable); + ZWindow *zwindow = create_mixer(indexable, position); new_mixers.append(zwindow); } for( int i=0; idrag_clips->size(); ++i ) { Indexable *indexable = (Indexable*)session->drag_clips->get(i); if( !indexable->have_video() ) continue; - ZWindow *zwindow = create_mixer(indexable); + ZWindow *zwindow = create_mixer(indexable, position); new_mixers.append(zwindow); } @@ -1530,9 +1530,6 @@ void MWindow::init_menus() #define ILACEASSETMODELISTADD(x) ilacemode_to_text(string, x); \ interlace_asset_modes.append(new InterlacemodeItem(string, x)); -#define ILACEFIXMETHODLISTADD(x) ilacefixmethod_to_text(string, x); \ - interlace_asset_fixmethods.append(new InterlacefixmethodItem(string, x)); - // Interlacing Modes ILACEASSETMODELISTADD(ILACE_MODE_UNDETECTED); // Not included in the list for the project options. @@ -1545,10 +1542,7 @@ void MWindow::init_menus() ILACEASSETMODELISTADD(ILACE_MODE_NOTINTERLACED); ILACEPROJECTMODELISTADD(ILACE_MODE_NOTINTERLACED); - // Interlacing Fixing Methods - ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_NONE); - ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_UPONE); - ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_DOWNONE); + mixers_align = new MixersAlign(this); } void MWindow::init_indexes() @@ -1875,10 +1869,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); sprintf(string, _("Loading %s"), new_asset->path); gui->show_message(string); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); ftype = new_file->open_file(preferences, new_asset, 1, 0); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); result = 1; switch( ftype ) { @@ -1888,7 +1880,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); if( new_asset->video_data && ((new_asset->width % 2) || (new_asset->height % 2)) ) { char string[BCTEXTLEN]; - sprintf(string, _("%s's resolution is %dx%d.\nImages with odd dimensions may not decode properly."), + sprintf(string, _("%s's resolution is %dx%d.\n" + "Images with odd dimensions may not decode properly."), new_asset->path, new_asset->width, new_asset->height); MainError::show_error(string); } @@ -2016,9 +2009,7 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); case FILE_IS_XML: { FileXML xml_file; -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); xml_file.read_from_file(filenames->get(i)); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); const char *cin_version = 0; while( !xml_file.read_tag() ) { if( xml_file.tag.title_is("EDL") ) { @@ -2051,7 +2042,6 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); nested_edl->load_xml(&xml_file, LOAD_ALL); int groups = nested_edl->regroup(session->group_number); session->group_number += groups; -//printf("MWindow::load_filenames %p %s\n", nested_edl, nested_edl->project_path); new_edl->create_nested(nested_edl); new_edl->set_path(filenames->get(i)); nested_edl->Garbage::remove_user(); @@ -2061,9 +2051,7 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); new_edl->load_xml(&xml_file, LOAD_ALL); int groups = new_edl->regroup(session->group_number); session->group_number += groups; -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); test_plugins(new_edl, filenames->get(i)); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); if( load_mode == LOADMODE_REPLACE || load_mode == LOADMODE_REPLACE_CONCATENATE ) { @@ -2109,34 +2097,28 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); // Paste them. // Don't back up here. - if(new_edls.size()) - { + if( new_edls.size() ) { // For pasting, clear the active region - if(load_mode == LOADMODE_PASTE || - load_mode == LOADMODE_NESTED) - { + if( load_mode == LOADMODE_PASTE || + load_mode == LOADMODE_NESTED ) { double start = edl->local_session->get_selectionstart(); double end = edl->local_session->get_selectionend(); if(!EQUIV(start, end)) - edl->clear(start, - end, + edl->clear(start, end, edl->session->labels_follow_edits, edl->session->plugins_follow_edits, edl->session->autos_follow_edits); - } - paste_edls(&new_edls, load_mode, 0, -1, - edl->session->labels_follow_edits, - edl->session->plugins_follow_edits, - edl->session->autos_follow_edits, - 0); // overwrite + paste_edls(&new_edls, load_mode, 0, -1, + edl->session->labels_follow_edits, + edl->session->plugins_follow_edits, + edl->session->autos_follow_edits, + 0); // overwrite + } + else + paste_edls(&new_edls, load_mode, 0, -1, 1, 1, 1, 0); } - - - -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); - // Add new assets to EDL and schedule assets for index building. int got_indexes = 0; for( int i=0; iassets->update(new_asset); got_indexes = 1; } -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); // Start examining next batch of index files if(got_indexes) mainindexes->start_build(); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); // Open plugin GUIs Track *track = edl->tracks->first; - while(track) - { - for(int j = 0; j < track->plugin_set.size(); j++) - { + while( track ) { + for( int j = 0; j < track->plugin_set.size(); j++ ) { PluginSet *plugins = track->plugin_set[j]; Plugin *plugin = plugins->get_first_plugin(); - while(plugin) - { - if(load_mode == LOADMODE_REPLACE || - load_mode == LOADMODE_REPLACE_CONCATENATE) - { - if(plugin->plugin_type == PLUGIN_STANDALONE && - plugin->show) - { + while(plugin) { + if( load_mode == LOADMODE_REPLACE || + load_mode == LOADMODE_REPLACE_CONCATENATE ) { + if( plugin->plugin_type == PLUGIN_STANDALONE && + plugin->show ) { show_plugin(plugin); } } @@ -2216,6 +2190,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); edl->local_session->loop_playback = 0; edl->local_session->set_selectionstart(0); edl->local_session->set_selectionend(0); + edl->local_session->unset_inpoint(); + edl->local_session-> unset_outpoint(); set_brender_active(0, 0); fit_selection(); goto_start(); @@ -2733,7 +2709,9 @@ void MWindow::create_objects(int want_gui, gui->show_window(); gui->raise_window(); gui->unlock_window(); - + cwindow->gui->lock_window("MWindow::create_objects 1"); + cwindow->gui->tool_panel->raise_tool(); + cwindow->gui->unlock_window(); if(debug) PRINT_TRACE if(preferences->use_tipwindow) @@ -2752,6 +2730,12 @@ void MWindow::create_objects(int want_gui, BC_WindowBase::get_resources()->vframe_shm = 1; } +int MWindow::uses_opengl() +{ + if( !playback_3d || !playback_3d->running() ) return 0; + PlaybackConfig *playback_config = edl->session->playback_config; + return playback_config->vconfig->driver == PLAYBACK_X11_GL ? 1 : 0; +} void MWindow::show_splash() { @@ -2940,25 +2924,30 @@ void MWindow::restore_windows() gui->focus(); } -void MWindow::save_layout(int no) +void MWindow::load_layout(const char *layout) { - char layout_path[BCTEXTLEN]; - snprintf(layout_path, sizeof(layout_path), "%s/" LAYOUT_FILE, - File::get_config_path(), no); - session->save_file(layout_path); -} - -void MWindow::load_layout(int no) -{ - char layout_path[BCTEXTLEN]; - snprintf(layout_path, sizeof(layout_path), "%s/" LAYOUT_FILE, - File::get_config_path(), no); - session->load_file(layout_path); + char path[BCTEXTLEN]; + snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout); + session->load_file(path); restore_windows(); gui->default_positions(); save_defaults(); } +void MWindow::save_layout(const char *layout) +{ + char path[BCTEXTLEN]; + snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout); + session->save_file(path); +} + +void MWindow::delete_layout(const char *layout) +{ + char path[BCTEXTLEN]; + snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout); + unlink(path); +} + int MWindow::tile_windows(int window_config) { int need_reload = 0; @@ -3606,6 +3595,7 @@ if(debug) printf("MWindow::asset_to_edl %d\n", __LINE__); //printf("MWindow::asset_to_edl 4 %s\n", string); if(debug) printf("MWindow::asset_to_edl %d\n", __LINE__); + new_edl->local_session->asset2edl = 1; return 0; } @@ -3633,9 +3623,7 @@ void MWindow::update_project(int load_mode) gui->unlock_window(); init_brender(); - cwindow->gui->lock_window("MWindow::update_project 1"); cwindow->update(0, 0, 1, 1, 1); - cwindow->gui->unlock_window(); if(debug) PRINT_TRACE @@ -3678,6 +3666,9 @@ void MWindow::update_project(int load_mode) if(debug) PRINT_TRACE cwindow->gui->lock_window("MWindow::update_project 2"); cwindow->gui->timebar->update(0); + Track *track = cwindow->calculate_affected_track(); + cwindow->mask_track_id = track ? track->get_id() : -1; + cwindow->gui->tool_panel->raise_tool(); cwindow->gui->unlock_window(); if(debug) PRINT_TRACE