From c279e21fc2394a7908bbd1ba8c79b116fe9fb14a Mon Sep 17 00:00:00 2001 From: Good Guy Date: Wed, 22 Aug 2018 18:41:12 -0600 Subject: [PATCH] refresh frame fix, dblclk proxy viewer fix, vicon refresh fix for awdw resize, fix for viewer labels, booby trap tweak --- cinelerra-5.1/bld.sh | 2 +- cinelerra-5.1/cinelerra/awindowgui.C | 10 +++-- cinelerra-5.1/cinelerra/canvas.C | 10 +++-- cinelerra-5.1/cinelerra/cwindowgui.C | 13 ++++--- cinelerra-5.1/cinelerra/timebar.C | 57 ++++++++++++++++------------ cinelerra-5.1/cinelerra/timebar.h | 1 + cinelerra-5.1/cinelerra/vtimebar.h | 1 + cinelerra-5.1/guicast/vicon.C | 5 ++- 8 files changed, 59 insertions(+), 40 deletions(-) diff --git a/cinelerra-5.1/bld.sh b/cinelerra-5.1/bld.sh index 7c8837bf..b8a80d6b 100755 --- a/cinelerra-5.1/bld.sh +++ b/cinelerra-5.1/bld.sh @@ -1,6 +1,6 @@ #!/bin/bash ( ./autogen.sh - ./configure --with-single-user --with-booby + ./configure --with-single-user make && make install ) 2>&1 | tee log mv Makefile Makefile.cfg cp Makefile.devel Makefile diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index 409ba26f..9f966f75 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -173,12 +173,12 @@ int64_t AssetVIcon::set_seq_no(int64_t no) int AssetVIcon::get_vx() { BC_ListBox *lbox = picon->gui->asset_list; - return lbox->get_item_x(picon); + return lbox->get_item_x(picon) + ICON_MARGIN; } int AssetVIcon::get_vy() { BC_ListBox *lbox = picon->gui->asset_list; - return lbox->get_item_y(picon); + return lbox->get_item_y(picon) + ICON_MARGIN; } void AssetVIcon::load_audio() @@ -1136,6 +1136,10 @@ int AWindowGUI::resize_event(int w, int h) // view->reposition_window(x, y); BC_WindowBase::resize_event(w, h); + int x0 = 0, x1 = asset_list->get_w(); + int y0 = asset_list->get_title_h(); + int y1 = asset_list->get_h(); + vicon_thread->set_drawing_area(x0,y0, x1,y1); return 1; } @@ -1672,7 +1676,7 @@ EDL *AWindowGUI::collect_proxy(Indexable *indexable) int proxy_scale = mwindow->edl->session->proxy_scale; ProxyRender::from_proxy_path(path, proxy_asset, proxy_scale); Asset *unproxy_asset = mwindow->edl->assets->get_asset(path); - if( !unproxy_asset || !unproxy_asset->channels ) return 0; + if( !unproxy_asset || !unproxy_asset->layers ) return 0; // make a clip from proxy video tracks and unproxy audio tracks EDL *proxy_edl = new EDL(mwindow->edl); proxy_edl->create_objects(); diff --git a/cinelerra-5.1/cinelerra/canvas.C b/cinelerra-5.1/cinelerra/canvas.C index 85d4e6f5..0d738c80 100644 --- a/cinelerra-5.1/cinelerra/canvas.C +++ b/cinelerra-5.1/cinelerra/canvas.C @@ -857,9 +857,11 @@ void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame) if( use_opengl ) best_color_model = BC_RGB888; + int out_w = output_frame->get_w(); + int out_h = output_frame->get_h(); if( refresh_frame && - (refresh_frame->get_w() != device->out_w || - refresh_frame->get_h() != device->out_h || + (refresh_frame->get_w() != out_w || + refresh_frame->get_h() != out_h || refresh_frame->get_color_model() != best_color_model ) ) { // x11 direct render uses BC_BGR8888, use tranfer_from to remap delete refresh_frame; refresh_frame = 0; @@ -867,7 +869,7 @@ void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame) if( !refresh_frame ) { refresh_frame = - new VFrame(device->out_w, device->out_h, best_color_model); + new VFrame(out_w, out_h, best_color_model); } if( use_opengl ) { @@ -879,7 +881,7 @@ void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame) get_canvas()->lock_window(" Canvas::output_refresh"); } else - refresh_frame->transfer_from(output_frame); + refresh_frame->copy_from(output_frame); } diff --git a/cinelerra-5.1/cinelerra/cwindowgui.C b/cinelerra-5.1/cinelerra/cwindowgui.C index 2b11f38b..c51eb0c3 100644 --- a/cinelerra-5.1/cinelerra/cwindowgui.C +++ b/cinelerra-5.1/cinelerra/cwindowgui.C @@ -1091,12 +1091,13 @@ void CWindowCanvas::draw_refresh(int flush) (int)out_x1, (int)out_y1, (int)(out_x2 - out_x1), - (int)(out_y2 - out_y1), - (int)in_x1, - (int)in_y1, - (int)(in_x2 - in_x1), - (int)(in_y2 - in_y1), - 0); + (int)(out_y2 - out_y1)); +// if refresh_frame session geometry... +// (int)in_x1, +// (int)in_y1, +// (int)(in_x2 - in_x1), +// (int)(in_y2 - in_y1), +// 0); } } else diff --git a/cinelerra-5.1/cinelerra/timebar.C b/cinelerra-5.1/cinelerra/timebar.C index 8d8bfc7c..e386bea5 100644 --- a/cinelerra-5.1/cinelerra/timebar.C +++ b/cinelerra-5.1/cinelerra/timebar.C @@ -24,6 +24,7 @@ #include "cplayback.h" #include "cursors.h" #include "cwindow.h" +#include "cwindowgui.h" #include "edl.h" #include "edlsession.h" #include "filexml.h" @@ -205,12 +206,12 @@ int64_t TimeBar::position_to_pixel(double position) double TimeBar::pixel_to_position(int pixel) { if( pane ) { - pixel += mwindow->edl->local_session->view_start[pane->number]; + pixel += get_edl()->local_session->view_start[pane->number]; } return (double)pixel * - mwindow->edl->local_session->zoom_sample / - mwindow->edl->session->sample_rate; + get_edl()->local_session->zoom_sample / + get_edl()->session->sample_rate; } void TimeBar::update_labels() @@ -277,31 +278,33 @@ void TimeBar::update_labels() void TimeBar::update_highlights() { + EDL *edl = get_edl(); + if( !edl ) return; for( int i = 0; i < labels.total; i++ ) { LabelGUI *label = labels.values[i]; - if( mwindow->edl->equivalent(label->position, - mwindow->edl->local_session->get_selectionstart(1)) || - mwindow->edl->equivalent(label->position, - mwindow->edl->local_session->get_selectionend(1)) ) { + if( edl->equivalent(label->position, + edl->local_session->get_selectionstart(1)) || + edl->equivalent(label->position, + edl->local_session->get_selectionend(1)) ) { if( !label->get_value() ) label->update(1); } else if( label->get_value() ) label->update(0); } - if( mwindow->edl->equivalent(mwindow->edl->local_session->get_inpoint(), - mwindow->edl->local_session->get_selectionstart(1)) || - mwindow->edl->equivalent(mwindow->edl->local_session->get_inpoint(), - mwindow->edl->local_session->get_selectionend(1)) ) { + if( edl->equivalent(edl->local_session->get_inpoint(), + edl->local_session->get_selectionstart(1)) || + edl->equivalent(edl->local_session->get_inpoint(), + edl->local_session->get_selectionend(1)) ) { if( in_point ) in_point->update(1); } else if( in_point ) in_point->update(0); - if( mwindow->edl->equivalent(mwindow->edl->local_session->get_outpoint(), - mwindow->edl->local_session->get_selectionstart(1)) || - mwindow->edl->equivalent(mwindow->edl->local_session->get_outpoint(), - mwindow->edl->local_session->get_selectionend(1)) ) { + if( edl->equivalent(edl->local_session->get_outpoint(), + edl->local_session->get_selectionstart(1)) || + edl->equivalent(edl->local_session->get_outpoint(), + edl->local_session->get_selectionend(1)) ) { if( out_point ) out_point->update(1); } else @@ -393,7 +396,7 @@ void TimeBar::update(int flush) //printf("TimeBar::update %d %d\n", __LINE__, x); double position = pixel_to_position(x); - position = get_edl()->align_to_frame(position, 0); + position = mwindow->edl->align_to_frame(position, 0); pixel = position_to_pixel(position); update_clock(position); } @@ -692,7 +695,7 @@ int TimeBar::button_press_event() stop_playback(); // Select region between two labels - if( get_double_click() ) { + if( !is_vwindow() && get_double_click() ) { int x = get_relative_cursor_x(); double position = pixel_to_position(x); // Test labels @@ -815,14 +818,14 @@ void TimeBar::handle_mwindow_drag() int TimeBar::select_region(double position) { Label *start = 0, *end = 0, *current; - for( current = mwindow->edl->labels->first; current; current = NEXT ) { + for( current = get_edl()->labels->first; current; current = NEXT ) { if( current->position > position ) { end = current; break; } } - for( current = mwindow->edl->labels->last ; current; current = PREVIOUS ) { + for( current = get_edl()->labels->last ; current; current = PREVIOUS ) { if( current->position <= position ) { start = current; break; @@ -832,28 +835,32 @@ int TimeBar::select_region(double position) // Select region if( end != start ) { if( !start ) - mwindow->edl->local_session->set_selectionstart(0); + get_edl()->local_session->set_selectionstart(0); else - mwindow->edl->local_session->set_selectionstart(start->position); + get_edl()->local_session->set_selectionstart(start->position); if( !end ) - mwindow->edl->local_session->set_selectionend(mwindow->edl->tracks->total_length()); + get_edl()->local_session->set_selectionend(get_edl()->tracks->total_length()); else - mwindow->edl->local_session->set_selectionend(end->position); + get_edl()->local_session->set_selectionend(end->position); } else if( end || start ) { - mwindow->edl->local_session->set_selectionstart(start->position); - mwindow->edl->local_session->set_selectionend(start->position); + get_edl()->local_session->set_selectionstart(start->position); + get_edl()->local_session->set_selectionend(start->position); } // Que the CWindow + mwindow->cwindow->gui->lock_window("TimeBar::select_region"); mwindow->cwindow->update(1, 0, 0); + mwindow->cwindow->gui->unlock_window(); + mwindow->gui->lock_window("TimeBar::select_region"); mwindow->gui->hide_cursor(0); mwindow->gui->draw_cursor(1); mwindow->gui->flash_canvas(0); mwindow->gui->activate_timeline(); mwindow->gui->zoombar->update(); + mwindow->gui->unlock_window(); update_highlights(); return 0; } diff --git a/cinelerra-5.1/cinelerra/timebar.h b/cinelerra-5.1/cinelerra/timebar.h index 0a047ff7..40a0220a 100644 --- a/cinelerra-5.1/cinelerra/timebar.h +++ b/cinelerra-5.1/cinelerra/timebar.h @@ -154,6 +154,7 @@ public: // Get highlight status when the cursor is over the timeline. virtual double test_highlight(); virtual int has_preview() { return 0; } + virtual int is_vwindow() { return 0; } void update_labels(); diff --git a/cinelerra-5.1/cinelerra/vtimebar.h b/cinelerra-5.1/cinelerra/vtimebar.h index 9247274b..f17ba677 100644 --- a/cinelerra-5.1/cinelerra/vtimebar.h +++ b/cinelerra-5.1/cinelerra/vtimebar.h @@ -44,6 +44,7 @@ public: double pixel_to_position(int pixel); void update_cursor(); int has_preview() { return 1; } + int is_vwindow() { return 1; } double test_highlight(); VWindowGUI *gui; diff --git a/cinelerra-5.1/guicast/vicon.C b/cinelerra-5.1/guicast/vicon.C index b7fd0f6c..9c41ccf1 100644 --- a/cinelerra-5.1/guicast/vicon.C +++ b/cinelerra-5.1/guicast/vicon.C @@ -292,7 +292,10 @@ draw(VIcon *vicon) void VIconThread::hide_vicons(int v) { - for( int i=0; ihidden = v; + for( int i=0; ihidden = v; + t_heap[i]->age = 0; + } } void VIconThread:: -- 2.26.2