X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindow.C;h=af743cc730bf2192fddaa853db6803a052d5ca13;hp=5fde46cc777d3ecf986554ba31354881e8af0591;hb=001bb253486a6e28db4a9a82a12b278d38f4c9de;hpb=24d62aadcd7a6188aff573aaec22f31e3bba4a57 diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 5fde46cc..af743cc7 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -102,6 +102,7 @@ #include "savefile.inc" #include "samplescroll.h" #include "sha1.h" +#include "shuttle.h" #include "sighandler.h" #include "splashgui.h" #include "statusbar.h" @@ -237,6 +238,7 @@ MWindow::MWindow() in_destructor = 0; speed_edl = 0; proxy_beep = 0; + shuttle = 0; } @@ -254,6 +256,7 @@ MWindow::~MWindow() delete proxy_beep; delete create_bd; create_bd = 0; delete create_dvd; create_dvd = 0; + delete shuttle; shuttle = 0; delete batch_render; batch_render = 0; delete render; render = 0; commit_commercial(); @@ -1582,6 +1585,17 @@ void MWindow::init_exportedl() exportedl = new ExportEDL(this); } +void MWindow::init_shuttle() +{ +#ifdef HAVE_SHUTTLE + const char *dev_name = Shuttle::probe(); + if( dev_name ) { + shuttle = new Shuttle(this); + shuttle->start(dev_name); + } +#endif +} + void MWindow::init_brender() { if(preferences->use_brender && !brender) @@ -2021,6 +2035,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); EDL *nested_edl = new EDL; nested_edl->create_objects(); 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)); @@ -2029,6 +2045,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); else { // Load EDL for pasting 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__); @@ -2616,6 +2634,7 @@ void MWindow::create_objects(int want_gui, init_render(); if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference()); + init_shuttle(); init_brender(); init_exportedl(); init_commercials(); @@ -3292,6 +3311,69 @@ void MWindow::hide_keyframe_gui(Plugin *plugin) keyframe_gui_lock->unlock(); } +int MWindow::get_hash_color(Edit *edit) +{ + Indexable *idxbl = edit->asset ? + (Indexable*)edit->asset : (Indexable*)edit->nested_edl; + if( !idxbl ) return 0; + char path[BCTEXTLEN]; + if( !edit->asset || edit->track->data_type != TRACK_VIDEO || + edl->session->proxy_scale == 1 || + ProxyRender::from_proxy_path(path, idxbl, edl->session->proxy_scale) ) + strcpy(path, idxbl->path); + char *cp = strrchr(path, '/'); + cp = !cp ? path : cp+1; + uint8_t *bp = (uint8_t*)cp; + int v = 0; + while( *bp ) v += *bp++; + return get_hash_color(v); +} + +int MWindow::get_hash_color(int v) +{ + int hash = 0x303030; + if( v & 0x01 ) hash ^= 0x000040; + if( v & 0x02 ) hash ^= 0x004000; + if( v & 0x04 ) hash ^= 0x400000; + if( v & 0x08 ) hash ^= 0x080000; + if( v & 0x10 ) hash ^= 0x000800; + if( v & 0x20 ) hash ^= 0x000008; + if( v & 0x40 ) hash ^= 0x404040; + if( v & 0x80 ) hash ^= 0x080808; + return hash; +} + +int MWindow::get_group_color(int v) +{ + int color = 0x606060; + if( v & 0x01 ) color ^= 0x000080; + if( v & 0x02 ) color ^= 0x008000; + if( v & 0x04 ) color ^= 0x800000; + if( v & 0x08 ) color ^= 0x100000; + if( v & 0x10 ) color ^= 0x001000; + if( v & 0x20 ) color ^= 0x000010; + if( v & 0x40 ) color ^= 0x080808; + if( v & 0x80 ) color ^= 0x909090; + return color; +} + +int MWindow::get_title_color(Edit *edit) +{ + unsigned color = edit->color & 0xffffff; + unsigned alpha = (~edit->color>>24) & 0xff; + if( !color ) { + if( edit->group_id ) + color = get_group_color(edit->group_id); + else if( preferences->autocolor_assets ) + color = get_hash_color(edit); + else + return 0; + } + if( alpha == 0xff ) + alpha = session->title_bar_alpha*255; + return color | (~alpha<<24); +} + void MWindow::update_keyframe_guis() { // Send new configuration to keyframe GUI's @@ -4011,9 +4093,7 @@ void MWindow::remove_asset_from_caches(Asset *asset) void MWindow::remove_assets_from_project(int push_undo, int redraw, ArrayList *drag_assets, ArrayList *drag_clips) { - awindow->gui->vicon_thread->stop_drawing(); - awindow->gui->vicon_thread->drawing_started(); // waits for draw lock - awindow->gui->vicon_thread->drawing_stopped(); + awindow->gui->close_view_popup(); for(int i = 0; i < drag_assets->total; i++) { Indexable *indexable = drag_assets->get(i); @@ -4072,16 +4152,16 @@ void MWindow::remove_assets_from_project(int push_undo, int redraw, void MWindow::remove_assets_from_disk() { + remove_assets_from_project(1, + 1, + session->drag_assets, + session->drag_clips); + // Remove from disk for(int i = 0; i < session->drag_assets->total; i++) { remove(session->drag_assets->get(i)->path); } - - remove_assets_from_project(1, - 1, - session->drag_assets, - session->drag_clips); } void MWindow::dump_plugins(FILE *fp)