X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftrackcanvas.C;h=97fe7a27883eb136660f2466c32ac99180e9f6c7;hp=ab93d6234d03897e8586978a2ac8de3cc60dc66a;hb=017728ea68874203d45b3f16050626d540608e35;hpb=3bf30d220f7855b995b887dc10812ae3780e6805 diff --git a/cinelerra-5.1/cinelerra/trackcanvas.C b/cinelerra-5.1/cinelerra/trackcanvas.C index ab93d623..97fe7a27 100644 --- a/cinelerra-5.1/cinelerra/trackcanvas.C +++ b/cinelerra-5.1/cinelerra/trackcanvas.C @@ -2170,6 +2170,7 @@ int TrackCanvas::do_keyframes(int cursor_x, pankeyframe_pixmap, modekeyframe_pixmap, maskkeyframe_pixmap, + 0, }; @@ -2227,10 +2228,9 @@ int TrackCanvas::do_keyframes(int cursor_x, if( !result && buttonpress && i == AUTOMATION_SPEED ) mwindow->speed_after(-1); - int current_grouptype = mwindow->edl->local_session->zoombar_showautotype; - if( result && buttonpress && grouptype != current_grouptype ) { - mwindow->edl->local_session->zoombar_showautotype = grouptype; - mwindow->gui->zoombar->update_autozoom(); + if( result && buttonpress ) { + int color = GWindowGUI::auto_colors[i]; + mwindow->gui->zoombar->update_autozoom(grouptype, color); } break; } @@ -2337,7 +2337,6 @@ int TrackCanvas::do_keyframes(int cursor_x, new_cursor = UPRIGHT_ARROW_CURSOR; } - return result; } @@ -2470,12 +2469,23 @@ void TrackCanvas::draw_floatauto(FloatAuto *current, CLAMP(y1, ymin, ymax); CLAMP(y2, ymin, ymax); - if(y2 - 1 > y1) - { - set_color(BLACK); - draw_box(x1 + 1, y1 + 1, x2 - x1, y2 - y1); - set_color(color); - draw_box(x1, y1, x2 - x1, y2 - y1); + if( y2-1 > y1 ) { + if( current->curve_mode == FloatAuto::LINEAR ) { + draw_box(x1, y1, x2 - x1, y2 - y1); + } + else { + ArrayList polygon_x; + ArrayList polygon_y; + polygon_x.append((x1 + x2) / 2 + 1); + polygon_y.append(y1 + 1); + polygon_x.append(x2 + 1); + polygon_y.append((y1 + y2) / 2 + 1); + polygon_x.append((x1 + x2) / 2 + 1); + polygon_y.append(y2 + 1); + polygon_x.append(x1 + 1); + polygon_y.append((y1 + y2) / 2 + 1); + fill_polygon(&polygon_x, &polygon_y); + } } // show bezier control points (only) if this @@ -3817,23 +3827,28 @@ void TrackCanvas::update_drag_handle() !session->drag_edit ? 0 : session->drag_edit->group_id); double position = -1; + int show_edge = !session->drag_handle ? 1 : 2; switch( handle_mode ) { case MOVE_RIPPLE: + case MOVE_EDGE: + position = session->drag_handle ? + session->drag_position : session->drag_start; + show_edge = 3 - show_edge; + break; case MOVE_ROLL: case MOVE_SLIDE: position = session->drag_position; break; case MOVE_SLIP: - case MOVE_EDGE: position = session->drag_start; + show_edge = 3 - show_edge; break; } if( position < 0 ) position = 0; Track *track = session->drag_handle_track(); int64_t pos = track->to_units(position, 0); - render_handle_frame(edl, pos, shift_down() ? 0 : - session->drag_handle ? 1 : 2); + render_handle_frame(edl, pos, shift_down() ? 0 : show_edge); edl->remove_user(); } } @@ -3857,8 +3872,6 @@ int TrackCanvas::render_handle_frame(EDL *edl, int64_t pos, int mode) CICache *video_cache = new CICache(preferences); render_engine->set_vcache(video_cache); render_engine->arm_command(&command); - int64_t left = pos-1; - if( left < 0 ) left = 0; VRender *vrender = render_engine->vrender; result = vrender && !vrender->process_buffer(&vlt, left, 0) && @@ -3867,7 +3880,6 @@ int TrackCanvas::render_handle_frame(EDL *edl, int64_t pos, int mode) delete video_cache; mwindow->cwindow->gui->lock_window("TrackCanvas::render_handle_frame 0"); Canvas *canvas = mwindow->cwindow->gui->canvas; - canvas->lock_canvas("TrackCanvas::render_handle_frame 1"); int w = canvas->w, h = canvas->h, w2 = w/2, h2 = h/2; int lx = 0, ly = h2/2, rx = w2, ry = h2/2; BC_WindowBase *window = canvas->get_canvas(); @@ -3876,7 +3888,6 @@ int TrackCanvas::render_handle_frame(EDL *edl, int64_t pos, int mode) window->draw_vframe(&vlt, lx,ly, w2,h2, 0,0,vlt.get_w(),vlt.get_h()); window->draw_vframe(&vrt, rx,ry, w2,h2, 0,0,vrt.get_w(),vrt.get_h()); window->flash(1); - canvas->unlock_canvas(); mwindow->cwindow->gui->unlock_window(); break; } case 1: @@ -3884,12 +3895,12 @@ int TrackCanvas::render_handle_frame(EDL *edl, int64_t pos, int mode) Track *track = mwindow->session->drag_handle_track(); double position = track->from_units(mode == 1 ? left : pos); if( position < 0 ) position = 0; - edl->local_session->set_selectionstart(position); - edl->local_session->set_selectionend(position); PlaybackEngine *playback_engine = mwindow->cwindow->playback_engine; if( playback_engine->is_playing_back ) playback_engine->stop_playback(1); - mwindow->cwindow->playback_engine->refresh_frame(CHANGE_NONE, edl, 0); + edl->local_session->set_selectionstart(position); + edl->local_session->set_selectionend(position); + mwindow->cwindow->playback_engine->refresh_frame(CHANGE_EDL, edl, 0); break; } } return result; @@ -3993,7 +4004,7 @@ int TrackCanvas::update_drag_floatauto(int cursor_x, int cursor_y) // Snap to nearby values old_value = current->get_value(); if(shift_down()) { - double value1, value2, distance1, distance2; + double value1, value2, distance1=-1, distance2=-1; if(current->previous) { int autogrouptype = current->previous->autos->autogrouptype; @@ -4032,7 +4043,8 @@ int TrackCanvas::update_drag_floatauto(int cursor_x, int cursor_y) float change = value - old_value; current->adjust_to_new_coordinates(position, value); update_ganged_autos(change, current->autos->track, current); - show_message(current, 1,", %.2f", current->get_value()); + int color = GWindowGUI::auto_colors[current->autos->autoidx]; + show_message(current, color, ", %.2f", current->get_value()); } break; @@ -4051,7 +4063,8 @@ int TrackCanvas::update_drag_floatauto(int cursor_x, int cursor_y) value * levered_position(position - current->position, current->get_control_in_position())); update_ganged_autos(0, current->autos->track, current); - show_message(current, 1,", %.2f", current->get_control_in_value()); + int color = GWindowGUI::auto_colors[current->autos->autoidx]; + show_message(current, color, ", %.2f", current->get_control_in_value()); } break; } @@ -4065,7 +4078,8 @@ int TrackCanvas::update_drag_floatauto(int cursor_x, int cursor_y) value * levered_position(position - current->position, current->get_control_out_position())); update_ganged_autos(0, current->autos->track, current); - show_message(current, 1,", %.2f", current->get_control_out_value()); + int color = GWindowGUI::auto_colors[current->autos->autoidx]; + show_message(current, color, ", %.2f", current->get_control_out_value()); } break; } } @@ -4085,7 +4099,7 @@ int TrackCanvas::update_drag_toggleauto(int cursor_x, int cursor_y) result = 1; current->value = value; current->position = position; - show_message(current, 0,", %d", current->value); + show_message(current, -1, ", %d", current->value); } return result; @@ -4102,7 +4116,7 @@ int TrackCanvas::update_drag_auto(int cursor_x, int cursor_y) { result = 1; current->position = position; - show_message(current, 0,""); + show_message(current, -1, ""); double position_f = current->autos->track->from_units(current->position); double center_f = (mwindow->edl->local_session->get_selectionstart(1) + @@ -4166,7 +4180,7 @@ int TrackCanvas::update_drag_pluginauto(int cursor_x, int cursor_y) mwindow->session->track_highlighted = track; result = 1; current->position = position; - show_message(current, 0,""); + show_message(current, -1, ""); double position_f = current->autos->track->from_units(current->position); double center_f = (mwindow->edl->local_session->get_selectionstart(1) + @@ -4677,6 +4691,9 @@ int TrackCanvas::button_release_event() } } + if( mwindow->edl->local_session->zoombar_showautocolor >= 0 ) + mwindow->gui->zoombar->update_autozoom(-1); + if (result) cursor_update(0); @@ -5018,11 +5035,8 @@ int TrackCanvas::do_edits(int cursor_x, int cursor_y, int button_press, int drag mwindow->session->drag_group->remove_user(); double start_position = 0; mwindow->session->drag_group = - mwindow->selected_edits_to_clip(0, &start_position, - &mwindow->session->drag_group_first_track, - mwindow->edl->session->labels_follow_edits, - mwindow->edl->session->autos_follow_edits, - mwindow->edl->session->plugins_follow_edits); + mwindow->edl->selected_edits_to_clip(0, &start_position, + &mwindow->session->drag_group_first_track); if( mwindow->session->drag_group ) { mwindow->session->current_operation = DRAG_GROUP; mwindow->session->drag_group_position = start_position; @@ -5272,7 +5286,7 @@ int TrackCanvas::button_press_event() gui->stop_transport("TrackCanvas::button_press_event"); } - int update_overlay = 0, update_cursor = 0, rerender = 0; + int update_overlay = 0, update_cursor = 0, rerender = 0, update_message = 0; if(get_buttonpress() == WHEEL_UP) { if(shift_down()) @@ -5315,6 +5329,7 @@ int TrackCanvas::button_press_event() if( do_keyframes(cursor_x, cursor_y, 0, get_buttonpress(), new_cursor, update_cursor, rerender) ) break; + update_message = 1; // Test edit boundaries if( do_edit_handles(cursor_x, cursor_y, 1, rerender, update_overlay, new_cursor, @@ -5350,6 +5365,7 @@ int TrackCanvas::button_press_event() update_overlay = 1; break; } + update_message = 1; // Test edit boundaries if( do_edit_handles(cursor_x, cursor_y, 1, rerender, update_overlay, new_cursor, update_cursor) ) break; @@ -5380,9 +5396,12 @@ int TrackCanvas::button_press_event() gui->update_patchbay(); } - if( update_overlay ) { + if( update_message ) + gui->default_message(); + + if( update_overlay ) gui->draw_overlays(1); - } + if( update_cursor < 0 ) { // double_click edit gui->swindow->update_selection(); @@ -5459,11 +5478,11 @@ double TrackCanvas::time_visible() } -void TrackCanvas::show_message(Auto *current, int show_curve_type, const char *fmt, ...) +void TrackCanvas::show_message(Auto *current, int box_color, const char *fmt, ...) { char string[BCTEXTLEN]; char *cp = string, *ep = cp + sizeof(string)-1; - if( show_curve_type ) { + if( box_color >= 0 ) { cp += snprintf(string, ep-cp, "%-8s ", FloatAuto::curve_name(((FloatAuto*)current)->curve_mode)); } @@ -5479,7 +5498,7 @@ void TrackCanvas::show_message(Auto *current, int show_curve_type, const char *f va_start(ap, fmt); vsnprintf(cp, ep-cp, fmt, ap); va_end(ap); - gui->show_message(string); + gui->show_message(string, -1, box_color); } // Patchbay* TrackCanvas::get_patchbay()