X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fapatchgui.C;h=3960dda8c67b9c01841d19bf6d38c3698e9dbd37;hp=f46e4ab7390d6426e0f7d7c007e373abd6292784;hb=84ac8a2bb3357c04a3f67cf763b0f61ddbbd021d;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/apatchgui.C b/cinelerra-5.1/cinelerra/apatchgui.C index f46e4ab7..3960dda8 100644 --- a/cinelerra-5.1/cinelerra/apatchgui.C +++ b/cinelerra-5.1/cinelerra/apatchgui.C @@ -104,9 +104,9 @@ int APatchGUI::update(int x, int y) FloatAuto *previous = 0, *next = 0; double unit_position = mwindow->edl->local_session->get_selectionstart(1); unit_position = mwindow->edl->align_to_frame(unit_position, 0); - unit_position = atrack->to_units(unit_position, 0); + int64_t unit_pos = atrack->to_units(unit_position, 0); FloatAutos *ptr = (FloatAutos*)atrack->automation->autos[AUTOMATION_FADE]; - float value = ptr->get_value((long)unit_position, PLAY_FORWARD, previous, next); + float value = ptr->get_value(unit_pos, PLAY_FORWARD, previous, next); fade->update(fade->get_w(), value, mwindow->edl->local_session->automation_mins[AUTOGROUPTYPE_AUDIO_FADE], mwindow->edl->local_session->automation_maxs[AUTOGROUPTYPE_AUDIO_FADE]); @@ -115,7 +115,7 @@ int APatchGUI::update(int x, int y) else if( h >= y2 ) { float v = mwindow->get_float_auto(this, AUTOMATION_FADE)->get_value(); patchbay->add_subwindow(fade = new AFadePatch(this, x1+x, y1+y, - patchbay->get_w() - 10, v)); + patchbay->get_w() - xS(10), v)); } y1 = y2; @@ -162,11 +162,11 @@ int APatchGUI::update(int x, int y) } else if( h >= y2 ) { patchbay->add_subwindow(mix = new AMixPatch(mwindow, this, x1+x, y1+y+5)); - x1 += mix->get_w() + 10; + x1 += mix->get_w() + xS(10); patchbay->add_subwindow(pan = new APanPatch(mwindow, this, x1+x, y1+y)); - x1 += pan->get_w() + 20; + x1 += pan->get_w() + xS(20); patchbay->add_subwindow(nudge = new NudgePatch(mwindow, this, x1+x, y1+y, - patchbay->get_w() - x1-x - 10)); + patchbay->get_w() - x1-x - xS(10))); } y1 = y2; @@ -182,14 +182,12 @@ void APatchGUI::update_faders(float v) double position = mwindow->edl->local_session->get_selectionstart(1); Autos *fade_autos = atrack->automation->autos[AUTOMATION_FADE]; int need_undo = !fade_autos->auto_exists_for_editing(position); - mwindow->undo->update_undo_before(_("fade"), need_undo ? 0 : this); FloatAuto *current = (FloatAuto*)fade_autos->get_auto_for_editing(position); - float change = v - current->get_value(); - current->set_value(v); - - if( track->gang && track->record ) - patchbay->synchronize_faders(change, TRACK_AUDIO, track); + float change = v - current->get_value(edge); + current->bump_value(v, edge, span); + if( track->is_ganged() && track->is_armed() ) + patchbay->synchronize_faders(change, TRACK_AUDIO, track, edge, span); mwindow->undo->update_undo_after(_("fade"), LOAD_AUTOMATION); change_source = 0; @@ -220,33 +218,64 @@ int AFadePatch::handle_event() return 1; } -AKeyFadePatch::AKeyFadePatch(MWindow *mwindow, APatchGUI *patch, int x, int y) - : BC_SubWindow(x,y, 200,20, GWindowGUI::auto_colors[AUTOMATION_FADE]) +AKeyFadePatch::AKeyFadePatch(MWindow *mwindow, APatchGUI *gui, + int bump, int x, int y) + : BC_SubWindow(x,y, xS(200)+4,yS(bump ? 50 : 24)+4, + GWindowGUI::auto_colors[AUTOMATION_FADE]) { this->mwindow = mwindow; - this->patch = patch; + this->gui = gui; +} +AKeyFadePatch::~AKeyFadePatch() +{ } void AKeyFadePatch::create_objects() { - int x = 0, y = 0; - float v = mwindow->get_float_auto(patch, AUTOMATION_FADE)->get_value(); - add_subwindow(akey_fade_text = new AKeyFadeText(this, x, y, 64, v)); + int x = 2, x1 = x, y = 0, dy = 0; + FloatAuto *fade_auto = mwindow->get_float_auto(gui, AUTOMATION_FADE); + float v = fade_auto->get_value(gui->edge); + add_subwindow(akey_fade_text = new AKeyFadeText(this, x, y, xS(64), v)); x += akey_fade_text->get_w(); + dy = bmax(dy, akey_fade_text->get_h()); VFrame **lok_images = mwindow->theme->get_image_set("lok"); - int w1 = get_w() - x - lok_images[0]->get_w(); + int w1 = get_w()-2 - x - lok_images[0]->get_w(); add_subwindow(akey_fade_slider = new AKeyFadeSlider(this, x, y, w1, v)); x += akey_fade_slider->get_w(); + dy = bmax(dy, akey_fade_slider->get_h()); add_subwindow(akey_fade_ok = new AKeyFadeOK(this, x, y, lok_images)); + dy = bmax(dy, akey_fade_ok->get_h()); + if( fade_auto->is_bump() ) { + y += dy; + set_color(get_resources()->get_bg_color()); + draw_box(0,y, get_w(),get_h()); + add_subwindow(auto_edge = new AKeyPatchAutoEdge(mwindow, this, x1, y)); + x1 += auto_edge->get_w() + xS(15); + add_subwindow(auto_span = new AKeyPatchAutoSpan(mwindow, this, x1, y)); + } + draw_3d_border(0,0, get_w(), get_h(), 0); activate(); show_window(); } +void AKeyFadePatch::set_edge(int edge) +{ + gui->edge = edge; + FloatAuto *fade_auto = mwindow->get_float_auto(gui, AUTOMATION_FADE); + float v = fade_auto->get_value(edge); + update(v); +} + +void AKeyFadePatch::set_span(int span) +{ + gui->span = span; +} + void AKeyFadePatch::update(float v) { akey_fade_text->update(v); akey_fade_slider->update(v); - patch->update_faders(v); + gui->update_faders(v); } AKeyFadeOK::AKeyFadeOK(AKeyFadePatch *akey_fade_patch, int x, int y, VFrame **images) @@ -257,9 +286,8 @@ AKeyFadeOK::AKeyFadeOK(AKeyFadePatch *akey_fade_patch, int x, int y, VFrame **im int AKeyFadeOK::handle_event() { - MWindowGUI *mgui = akey_fade_patch->mwindow->gui; - delete mgui->keyvalue_popup; - mgui->keyvalue_popup = 0; + MWindow *mwindow = akey_fade_patch->mwindow; + mwindow->gui->close_keyvalue_popup(); return 1; } @@ -278,7 +306,7 @@ int AKeyFadeText::handle_event() } AKeyFadeSlider::AKeyFadeSlider(AKeyFadePatch *akey_fade_patch, int x, int y, int w, float v) - : AFadePatch(akey_fade_patch->patch, x, y, w, v) + : AFadePatch(akey_fade_patch->gui, x, y, w, v) { this->akey_fade_patch = akey_fade_patch; } @@ -310,19 +338,13 @@ int APanPatch::handle_event() double position = mwindow->edl->local_session->get_selectionstart(1); Autos *pan_autos = patch->atrack->automation->autos[AUTOMATION_PAN]; int need_undo = !pan_autos->auto_exists_for_editing(position); - mwindow->undo->update_undo_before(_("pan"), need_undo ? 0 : this); - current = (PanAuto*)pan_autos->get_auto_for_editing(position); - current->handle_x = get_stick_x(); current->handle_y = get_stick_y(); memcpy(current->values, get_values(), sizeof(float) * mwindow->edl->session->audio_channels); - mwindow->undo->update_undo_after(_("pan"), LOAD_AUTOMATION); - mwindow->sync_parameters(CHANGE_PARAMS); - if( need_undo && mwindow->edl->session->auto_conf->autos[AUTOMATION_PAN] ) { mwindow->gui->draw_overlays(1); } @@ -345,14 +367,13 @@ int AKeyPanPatch::handle_event() AMeterPatch::AMeterPatch(MWindow *mwindow, APatchGUI *patch, int x, int y) - : BC_Meter(x, y, METER_HORIZ, patch->patchbay->get_w() - 10, + : BC_Meter(x, y, METER_HORIZ, patch->patchbay->get_w() - xS(10), mwindow->edl->session->min_meter_db, mwindow->edl->session->max_meter_db, mwindow->edl->session->meter_format, 0, -1) { this->mwindow = mwindow; this->patch = patch; - set_delays(TRACKING_RATE * 10, - TRACKING_RATE); + set_delays(TRACKING_RATE * 10, TRACKING_RATE); } int AMeterPatch::button_press_event() @@ -375,3 +396,35 @@ AMixPatch::~AMixPatch() { } +AKeyPatchAutoEdge::AKeyPatchAutoEdge(MWindow *mwindow, + AKeyFadePatch *patch, int x, int y) + : BC_Toggle(x, y, mwindow->theme->get_image_set("bump_edge"), + patch->gui->span,_("Edge")) +{ + this->mwindow = mwindow; + this->patch = patch; + set_tooltip(_("Bump uses left edge")); +} + +int AKeyPatchAutoEdge::handle_event() +{ + patch->set_edge(get_value()); + return 1; +} + +AKeyPatchAutoSpan::AKeyPatchAutoSpan(MWindow *mwindow, + AKeyFadePatch *patch, int x, int y) + : BC_Toggle(x, y, mwindow->theme->get_image_set("bump_span"), + patch->gui->span,_("Span")) +{ + this->mwindow = mwindow; + this->patch = patch; + set_tooltip(_("Bump spans to next")); +} + +int AKeyPatchAutoSpan::handle_event() +{ + patch->set_span(get_value()); + return 1; +} +