X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowtool.C;h=55d64b4504a871d9588508618ed8fd17618f640b;hb=b2d226c1f41e84bbb3af93ebc0aa89f98ec0fd52;hp=8370ab97167c705e9aef302452c8ac8e3fa31407;hpb=c63c2c2707e1b1145db2edd6824bd69f59341e15;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/cwindowtool.C b/cinelerra-5.1/cinelerra/cwindowtool.C index 8370ab97..55d64b45 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.C +++ b/cinelerra-5.1/cinelerra/cwindowtool.C @@ -436,6 +436,7 @@ CWindowCoordRange::~CWindowCoordRange() int CWindowCoordRange::update(float scale) { + CWindowCoordSlider *slider = coord->slider; MWindow *mwindow = coord->gui->mwindow; LocalSession *local_session = mwindow->edl->local_session; int group = Automation::autogrouptype(coord->type, 0); @@ -448,22 +449,24 @@ int CWindowCoordRange::update(float scale) case AUTOGROUPTYPE_Y: min = -100; max = 100; break; } } - float range = max - min; - min -= range * scale; - max += range * scale; switch( group ) { - case AUTOGROUPTYPE_ZOOM: + case AUTOGROUPTYPE_ZOOM: { // exp + float lv = log(slider->get_value()); + float lmin = log(min), lmax = log(max); + float lr = (lmax - lmin) * scale; + min = exp(lv - 0.5*lr); + max = exp(lv + 0.5*lr); if( min < 0.001 ) min = 0.001; if( max > 1000. ) max = 1000.; - break; + break; } case AUTOGROUPTYPE_X: - case AUTOGROUPTYPE_Y: - if( min < -32767 ) min = -32767; - if( max > 32767 ) max = 32767; - break; + case AUTOGROUPTYPE_Y: { // linear + float dr = (max - min) * (scale-1); + if( (min -= dr) < -32767 ) min = -32767; + if( (max += dr) > 32767 ) max = 32767; + break; } } - CWindowCoordSlider *slider = coord->slider; - coord->slider->update(slider->get_pointer_motion_range(), + slider->update(slider->get_pointer_motion_range(), slider->get_value(), min, max); unlock_window(); MWindowGUI *mgui = mwindow->gui; @@ -482,11 +485,11 @@ int CWindowCoordRange::update(float scale) int CWindowCoordRange::handle_up_event() { - return update(0.5); + return update(1.25); } int CWindowCoordRange::handle_down_event() { - return update(-0.25); + return update(0.8); } CWindowCropApply::CWindowCropApply(MWindow *mwindow, CWindowCropGUI *crop_gui, int x, int y) @@ -1737,7 +1740,7 @@ int CWindowMaskOnTrack::handle_event() if( k >= 0 ) { track_item = (CWindowMaskItem *)track_items[k]; Track *track = track_item ? mwindow->edl->tracks->get_track_by_id(track_item->id) : 0; - if( track && track->record ) track_id = track->get_id(); + if( track && track->is_armed() ) track_id = track->get_id(); } else track_id = mwindow->cwindow->mask_track_id; @@ -1761,7 +1764,7 @@ void CWindowMaskOnTrack::update_items() for( Track *track=mwindow->edl->tracks->first; track; track=track->next ) { if( track->data_type != TRACK_VIDEO ) continue; MaskAutos *mask_autos = (MaskAutos*)track->automation->autos[AUTOMATION_MASK]; - int color = !track->record ? RED : mask_autos->first ? high_color : -1; + int color = !track->is_armed() ? RED : mask_autos->first ? high_color : -1; MaskAuto *mask_auto = (MaskAuto*)mask_autos->default_auto; for( int i=0; color<0 && imasks.size(); ++i ) if( mask_auto->masks[i]->points.size() > 0 ) color = high_color; @@ -1809,7 +1812,7 @@ int CWindowMaskTrackTumbler::do_event(int dir) track_item = items[0]; } Track *track = track_item ? mwindow->edl->tracks->get_track_by_id(track_item->id) : 0; - int track_id = track_item && track && track->record ? track_item->id : -1; + int track_id = track_item && track && track->is_armed() ? track_item->id : -1; gui->mask_on_track->set_back_color(track_id >= 0 ? gui->get_resources()->text_background : gui->get_resources()->text_background_disarmed); @@ -3018,7 +3021,7 @@ void CWindowMaskGUI::update() //printf("CWindowMaskGUI::update 1\n"); get_keyframe(track, autos, keyframe, mask, point, 0); mwindow->cwindow->mask_track_id = track ? track->get_id() : -1; - mask_on_track->set_back_color(!track || track->record ? + mask_on_track->set_back_color(!track || track->is_armed() ? get_resources()->text_background : get_resources()->text_background_disarmed); mask_on_track->update_items();