ffmpeg scan remap fix, configure.ac all or none fix, 3rd party libs: ffmpeg, turbo...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowtool.C
index 8370ab97167c705e9aef302452c8ac8e3fa31407..55d64b4504a871d9588508618ed8fd17618f640b 100644 (file)
@@ -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 && i<mask_auto->masks.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();