X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fassetpopup.C;h=b7aafa0dcec2445849db0afe14a6e9ced3162eb0;hb=b55798fc64eee00c6fab3b4763e791befb7275f9;hp=cd3c703bf16d304ac0b1736c22ca5859c9fa40dd;hpb=a88121d876acc81c5a28dbd2cc71e7c6856e2ac0;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/assetpopup.C b/cinelerra-5.1/cinelerra/assetpopup.C index cd3c703b..b7aafa0d 100644 --- a/cinelerra-5.1/cinelerra/assetpopup.C +++ b/cinelerra-5.1/cinelerra/assetpopup.C @@ -160,10 +160,13 @@ int AssetPopupInfo::handle_event() { int cur_x, cur_y; popup->gui->get_abs_cursor(cur_x, cur_y); - if( mwindow->session->drag_assets->size() ) { - AssetEdit *asset_edit = mwindow->awindow->get_asset_editor(); - asset_edit->edit_asset( - mwindow->session->drag_assets->values[0], cur_x, cur_y); + int n = mwindow->session->drag_assets->size(); + if( n > 0 ) { + for( int i=0; iawindow->get_asset_editor(); + asset_edit->edit_asset( + mwindow->session->drag_assets->values[i], cur_x-30*i, cur_y-30*i); + } } else if( mwindow->session->drag_clips->size() ) { popup->gui->awindow->clip_edit->edit_clip( @@ -241,7 +244,6 @@ AssetPopupView::~AssetPopupView() int AssetPopupView::handle_event() { VWindow *vwindow = mwindow->get_viewer(1, DEFAULT_VWINDOW); - vwindow->gui->lock_window("AssetPopupView::handle_event"); if( mwindow->session->drag_assets->total ) vwindow->change_source( @@ -251,7 +253,6 @@ int AssetPopupView::handle_event() vwindow->change_source( mwindow->session->drag_clips->values[0]); - vwindow->gui->unlock_window(); return 1; } @@ -273,8 +274,6 @@ int AssetPopupViewWindow::handle_event() VWindow *vwindow = mwindow->get_viewer(1); // TODO: create new vwindow or change current vwindow - vwindow->gui->lock_window("AssetPopupView::handle_event"); - if( mwindow->session->drag_assets->total ) vwindow->change_source( mwindow->session->drag_assets->values[0]); @@ -283,7 +282,6 @@ int AssetPopupViewWindow::handle_event() vwindow->change_source( mwindow->session->drag_clips->values[0]); - vwindow->gui->unlock_window(); return 1; } @@ -430,12 +428,14 @@ void AssetListMenu::create_objects() snapshot_submenu->add_submenuitem(new SnapshotMenuItem(snapshot_submenu, _("png"), SNAPSHOT_PNG)); snapshot_submenu->add_submenuitem(new SnapshotMenuItem(snapshot_submenu, _("jpeg"), SNAPSHOT_JPEG)); snapshot_submenu->add_submenuitem(new SnapshotMenuItem(snapshot_submenu, _("tiff"), SNAPSHOT_TIFF)); + snapshot_submenu->add_submenuitem(new SnapshotMenuItem(snapshot_submenu, _("ppm"), SNAPSHOT_PPM)); GrabshotSubMenu *grabshot_submenu; add_item(asset_grabshot = new AssetGrabshot(mwindow, this)); asset_grabshot->add_submenu(grabshot_submenu = new GrabshotSubMenu(asset_grabshot)); grabshot_submenu->add_submenuitem(new GrabshotMenuItem(grabshot_submenu, _("png"), GRABSHOT_PNG)); grabshot_submenu->add_submenuitem(new GrabshotMenuItem(grabshot_submenu, _("jpeg"), GRABSHOT_JPEG)); grabshot_submenu->add_submenuitem(new GrabshotMenuItem(grabshot_submenu, _("tiff"), GRABSHOT_TIFF)); + grabshot_submenu->add_submenuitem(new GrabshotMenuItem(grabshot_submenu, _("ppm"), GRABSHOT_PPM)); update_titles(shots_displayed = 1); } @@ -747,7 +747,7 @@ int SnapshotMenuItem::handle_event() Preferences *preferences = mwindow->preferences; char filename[BCTEXTLEN]; - static const char *exts[] = { "png", "jpg", "tif" }; + static const char *exts[] = { "png", "jpg", "tif", "ppm" }; time_t tt; time(&tt); struct tm tm; localtime_r(&tt,&tm); snprintf(filename,sizeof(filename),"%s/%s_%04d%02d%02d-%02d%02d%02d.%s", @@ -772,6 +772,9 @@ int SnapshotMenuItem::handle_event() asset->tiff_cmodel = 0; asset->tiff_compression = 0; break; + case SNAPSHOT_PPM: + asset->format = FILE_PPM; + break; } asset->width = fw; asset->height = fh; @@ -804,7 +807,8 @@ int SnapshotMenuItem::handle_event() double position = edl->local_session->get_selectionstart(1); int64_t source_position = (int64_t)(position * edl->get_frame_rate()); - ret = render_engine.vrender->process_buffer(frame, source_position, 0); + ret = !render_engine.vrender ? 1 : + render_engine.vrender->process_buffer(frame, source_position, 0); if( !ret ) ret = file.write_video_buffer(1); file.close_file(); @@ -960,11 +964,12 @@ int GrabshotPopup::grab_event(XEvent *event) int cw = lx1-lx0, ch = ly1-ly0; hide_window(); sync_display(); + grab_thread->done = 1; MWindow *mwindow = grab_thread->mwindow; Preferences *preferences = mwindow->preferences; char filename[BCTEXTLEN]; - static const char *exts[] = { "png", "jpg", "tif" }; + static const char *exts[] = { "png", "jpg", "tif", "ppm" }; time_t tt; time(&tt); struct tm tm; localtime_r(&tt,&tm); snprintf(filename,sizeof(filename),"%s/%s_%04d%02d%02d-%02d%02d%02d.%s", @@ -974,26 +979,32 @@ int GrabshotPopup::grab_event(XEvent *event) Asset *asset = new Asset(filename); switch( mode ) { - case SNAPSHOT_PNG: + case GRABSHOT_PNG: asset->format = FILE_PNG; asset->png_use_alpha = 1; break; - case SNAPSHOT_JPEG: + case GRABSHOT_JPEG: asset->format = FILE_JPEG; asset->jpeg_quality = 90; break; - case SNAPSHOT_TIFF: + case GRABSHOT_TIFF: asset->format = FILE_TIFF; asset->tiff_cmodel = 0; asset->tiff_compression = 0; break; + case GRABSHOT_PPM: + asset->format = FILE_PPM; + break; } + // no odd dimensions int rw = get_root_w(0), rh = get_root_h(0); if( cx < 0 ) { cw += cx; cx = 0; } if( cy < 0 ) { ch += cy; cy = 0; } if( cx+cw > rw ) cw = rw-cx; if( cy+ch > rh ) ch = rh-cy; + if( !cw || !ch ) return 1; + VFrame vframe(cw,ch, BC_RGB888); if( cx+cw < rw ) ++cw; if( cy+ch < rh ) ++ch; @@ -1032,7 +1043,6 @@ int GrabshotPopup::grab_event(XEvent *event) asset->remove_user(); } - grab_thread->done = 1; return 1; }