X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fawindowgui.C;h=be782977341a96c11781ec0a8c743c51c2a658e7;hp=a9f71b187c36a3267fce66767f47907ceaf2b4b2;hb=e9cdcb62fbd9794a368f11e7808c6ddf83fbd467;hpb=b384d47608e07b9f5b6ce5fe1d0d76d9bda38202 diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index a9f71b18..be782977 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -128,7 +128,7 @@ VFrame *AssetVIcon::frame() AssetVIconThread *avt = picon->gui->vicon_thread; Indexable *idxbl = picon->indexable; Asset *asset = idxbl && idxbl->is_asset ? (Asset *)idxbl : 0; - if( !asset ) return vframes()>0 ? (VFrame*)*images[0] : 0; + if( !asset ) return vframes()>0 ? images[0]->vfrm : 0; if( !asset->video_data && audio_data && audio_size && length > 0 ) { if( !temp ) temp = new VFrame(0, -1, w, h, BC_RGB888, -1); temp->clear_frame(); @@ -174,15 +174,17 @@ VFrame *AssetVIcon::frame() File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1); if( !file ) { broken = 1; return 0; } Timer timer; - while( file && seq_no >= images.size() && !avt->interrupted ) { + while( file && seq_no >= images.size() ) { int64_t pos = images.size() / picon->gui->vicon_thread->refresh_rate * frame_rate; file->set_video_position(pos,0); file->set_layer(0); if( file->read_frame(temp) ) temp->clear_frame(); add_image(temp, vw, vh, vicon_cmodel); + if( seq_no < images.size() ) break; mwindow->video_cache->check_in(asset); if( timer.get_difference() > 500 ) return 0; Thread::yield(); + if( avt->interrupted ) return 0; file = mwindow->video_cache->check_out(asset, mwindow->edl, 0); for( int retries=10; !file && --retries>=0; usleep(1000) ) { if( avt->interrupted ) return 0; @@ -193,7 +195,7 @@ VFrame *AssetVIcon::frame() mwindow->video_cache->check_in(asset); } if( seq_no >= images.size() ) return 0; - return *images[seq_no]; + return images[seq_no]->vfrm; } int64_t AssetVIcon::set_seq_no(int64_t no) @@ -880,7 +882,7 @@ void AssetPicon::reset() void AssetPicon::open_render_engine(EDL *edl, int is_audio) { - TransportCommand command; + TransportCommand command(mwindow->preferences); command.command = is_audio ? NORMAL_FWD : CURRENT_FRAME; command.get_edl()->copy_all(edl); command.change_type = CHANGE_ALL; @@ -1320,6 +1322,8 @@ AWindowGUI::AWindowGUI(MWindow *mwindow, AWindow *awindow) new_folder_thread = 0; modify_folder_thread = 0; folder_lock = new Mutex("AWindowGUI::folder_lock"); +// *** CONTEXT_HELP *** + context_help_set_keyword("Resources Window"); } AWindowGUI::~AWindowGUI() @@ -1757,6 +1761,8 @@ AWindowRemovePluginGUI(AWindow *awindow, AWindowRemovePlugin *thread, VFrame *vframe = plugin->get_picon(); icon = vframe ? create_pixmap(vframe) : 0; plugin_list.append(new BC_ListBoxItem(plugin->title, icon)); +// *** CONTEXT_HELP *** + context_help_set_keyword("Delete Plugins to save Resources Space"); } AWindowRemovePluginGUI:: @@ -1870,6 +1876,8 @@ BC_Window* AWindowRemovePlugin::new_gui() int AWindowGUI::keypress_event() { + char title[BCTEXTLEN]; + PluginServer* plugin = 0; switch( get_keypress() ) { case 'w': case 'W': if( ctrl_down() ) { @@ -1891,7 +1899,7 @@ int AWindowGUI::keypress_event() return cycle_assetlist_format(); case DELETE: if( shift_down() && ctrl_down() ) { - PluginServer* plugin = selected_plugin(); + plugin = selected_plugin(); if( !plugin ) break; remove_plugin = new AWindowRemovePlugin(awindow, plugin); unlock_window(); @@ -1920,7 +1928,30 @@ int AWindowGUI::keypress_event() } break; } - return 0; +// *** CONTEXT_HELP *** + if( get_keypress() != 'h' || ! alt_down() ) return 0; + if( ! is_tooltip_event_win() || ! cursor_inside() ) return 0; + // If some plugin is selected, show its help + // Otherwise show general help + plugin = selected_plugin(); + if( plugin ) { + strcpy(title, plugin->title); + if( ! strcmp(title, "Overlay") ) { + // "Overlay" plugin title is ambiguous + if( plugin->audio ) strcat(title, " \\(Audio\\)"); + if( plugin->video ) strcat(title, " \\(Video\\)"); + } + if( plugin->is_ffmpeg() ) { + // FFmpeg plugins can be audio or video + if( plugin->audio ) + strcpy(title, "FFmpeg Audio Plugins"); + if( plugin->video ) + strcpy(title, "FFmpeg Video Plugins"); + } + context_help_show(title); + } + else context_help_show("Resources Window"); + return 1; } @@ -3195,6 +3226,102 @@ void AWindowAssets::hide_tip_info() info_tip = -1; } +// *** CONTEXT_HELP *** +int AWindowAssets::keypress_event() +{ + int item; + char title[BCTEXTLEN]; + AssetPicon *picon = 0; + PluginServer *plugin = 0; + +// printf("AWindowAssets::keypress_event: %d\n", get_keypress()); + + // If not our context help keystroke, redispatch it + // to the event handler of the base class + if (get_keypress() != 'h' || ! alt_down() || + ! is_tooltip_event_win() || ! cursor_inside()) + return BC_ListBox::keypress_event(); + + switch (mwindow->edl->session->awindow_folder) { + + case AW_AEFFECT_FOLDER: + case AW_VEFFECT_FOLDER: + case AW_ATRANSITION_FOLDER: + case AW_VTRANSITION_FOLDER: + // If plugin tips activated, show help for plugin under mouse + // Otherwise show help for the selected plugin + if (gui->tip_info) { + item = BC_ListBox::get_highlighted_item(); + if (item >= 0 && item < gui->displayed_assets[0].size()) { + picon = (AssetPicon *) gui->displayed_assets[0][item]; + if (picon) plugin = picon->plugin; + } + } + else plugin = gui->selected_plugin(); + // If some plugin is highlighted or selected, show its help + // Otherwise show more general help + if (plugin) { + strcpy(title, plugin->title); + if (! strcmp(title, "Overlay")) { + // "Overlay" plugin title is ambiguous + if (plugin->audio) + strcat(title, " \\(Audio\\)"); + if (plugin->video) + strcat(title, " \\(Video\\)"); + } + if (plugin->is_ffmpeg()) { + // FFmpeg plugins can be audio or video + if (plugin->audio) + strcpy(title, "FFmpeg Audio Plugins"); + if (plugin->video) + strcpy(title, "FFmpeg Video Plugins"); + } + context_help_show(title); + return 1; + } + else { + switch (mwindow->edl->session->awindow_folder) { + case AW_AEFFECT_FOLDER: + context_help_show("Audio Effects"); + return 1; + case AW_VEFFECT_FOLDER: + context_help_show("Video Effects"); + return 1; + case AW_ATRANSITION_FOLDER: + context_help_show("Audio Transitions"); + return 1; + case AW_VTRANSITION_FOLDER: + context_help_show("Video Transitions"); + return 1; + default: + context_help_show("Resources Window"); + return 1; + } + context_help_show("Resources Window"); + return 1; + } + + case AW_LABEL_FOLDER: + context_help_show("Labels"); + return 1; + + case AW_CLIP_FOLDER: + context_help_show("Nested Clips"); + return 1; + + case AW_PROXY_FOLDER: + context_help_show("Proxy"); + return 1; + + default: + context_help_show("Resources Window"); + return 1; + } + + context_help_show("Resources Window"); + return 1; +} + AWindowSearchTextBox::AWindowSearchTextBox(AWindowSearchText *search_text, int x, int y, int w) : BC_TextBox(x, y, w, 1, "")