tweak zoom/fullscr to remember cwdw scale after fullscr
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowgui.C
index 1266f241653cc662e1e792d0297656977a30c807..567c9338c8f129dbd95995eae96831b6c70e88ef 100644 (file)
@@ -443,9 +443,11 @@ int CWindowGUI::keypress_event()
                result = 1;
                break;
        case 'f':
-               unlock_window();
-               canvas->use_fullscreen(canvas->get_fullscreen() ? 0 : 1);
-               lock_window("CWindowGUI::keypress_event 1");
+               canvas->set_fullscreen(canvas->get_fullscreen() ? 0 : 1);
+               result = 1;
+               break;
+       case ESC:
+               canvas->set_fullscreen(0);
                result = 1;
                break;
        case 'x':
@@ -465,12 +467,6 @@ int CWindowGUI::keypress_event()
                lock_window("CWindowGUI::keypress_event 3");
                result = 1;
                break;
-       case ESC:
-               unlock_window();
-               canvas->use_fullscreen(0);
-               lock_window("CWindowGUI::keypress_event 4");
-               result = 1;
-               break;
        case LEFT:
                if( !ctrl_down() ) {
                        int alt_down = this->alt_down();
@@ -984,6 +980,9 @@ CWindowCanvas::CWindowCanvas(MWindow *mwindow, CWindowGUI *gui)
 {
        this->mwindow = mwindow;
        this->gui = gui;
+       last_xscroll = 0;
+       last_yscroll = 0;
+       last_zoom = 0;
 }
 
 void CWindowCanvas::status_event()
@@ -1000,15 +999,25 @@ void CWindowCanvas::update_zoom(int x, int y, float zoom)
        mwindow->edl->session->cwindow_scrollbars = use_scrollbars;
 }
 
-int CWindowCanvas::use_fullscreen(int on)
+int CWindowCanvas::set_fullscreen(int on)
 {
-       if( Canvas::use_fullscreen(on) ) {
-               gui->lock_window("CWindowCanvas::use_fullscreen");
+       int ret = 0;
+       if( on && !get_fullscreen() ) {
+               last_xscroll = get_xscroll();
+               last_yscroll = get_yscroll();
+               last_zoom = get_zoom();
+               Canvas::set_fullscreen(1);
                zoom_auto();
-               if( !on ) gui->zoom_panel->update(0);
-               gui->unlock_window();
+               ret = 1;
        }
-       return 1;
+       if( !on && get_fullscreen() ) {
+               Canvas::set_fullscreen(0);
+               gui->zoom_panel->update(get_zoom());
+               update_zoom(last_xscroll, last_yscroll, last_zoom);
+               gui->update_canvas();
+               ret = 1;
+       }
+       return ret;
 }
 
 int CWindowCanvas::get_xscroll()
@@ -3085,7 +3094,9 @@ int CWindowCanvas::test_zoom(int &redraw)
                        if( EQUIV(zoom, my_zoom_table[idx]) ) continue;
                        if( zoom < my_zoom_table[idx] ) break;
                }
-               zoom = idx < total_zooms ? my_zoom_table[idx] : 1.1 * zoom;
+               float zoom11 = 1.1f * zoom;
+               zoom = idx < total_zooms ? my_zoom_table[idx] : zoom11;
+               if( zoom > zoom11 ) zoom = zoom11;
                break; }
        case WHEEL_DOWN: {
                int idx = total_zooms;
@@ -3093,7 +3104,9 @@ int CWindowCanvas::test_zoom(int &redraw)
                        if( EQUIV(my_zoom_table[idx], zoom) ) continue;
                        if( my_zoom_table[idx] < zoom ) break;
                }
-               zoom = idx >= 0 ? my_zoom_table[idx] : 0.9 * zoom;
+               float zoom09 = 0.9f * zoom;
+               zoom = idx >= 0 ? my_zoom_table[idx] : zoom09;
+               if( zoom < zoom09 ) zoom = zoom09;
                break; }
        case MIDDLE_BUTTON:
                if( gui->shift_down() ) {
@@ -3259,7 +3272,7 @@ int CWindowCanvas::button_press_event()
                        break;
 
                case CWINDOW_ZOOM:
-                       test_zoom(redraw);
+                       result = test_zoom(redraw);
                        break;
 
                case CWINDOW_CROP: