fullscreen tweaks, vwdw refresh frame scale, cleanup
authorGood Guy <good1.2guy@gmail.com>
Sat, 8 Sep 2018 21:17:28 +0000 (15:17 -0600)
committerGood Guy <good1.2guy@gmail.com>
Sat, 8 Sep 2018 21:17:28 +0000 (15:17 -0600)
cinelerra-5.1/cinelerra/canvas.C
cinelerra-5.1/cinelerra/canvas.h
cinelerra-5.1/cinelerra/vwindowgui.C
cinelerra-5.1/guicast/bcwindowbase.C

index 4f9d92344a882ea48bdb87f8ebce1825e0fc6b12..3e7ee0be96c1e6427b9e2f8140cee1d891514368 100644 (file)
@@ -808,7 +808,6 @@ int Canvas::button_press_event_base(BC_WindowBase *caller)
 
 int Canvas::keypress_event(BC_WindowBase *caller)
 {
-       int caller_is_canvas = (caller == get_canvas());
        int key = caller->get_keypress();
        switch( key ) {
        case 'f':
@@ -817,13 +816,13 @@ int Canvas::keypress_event(BC_WindowBase *caller)
                        stop_fullscreen();
                else
                        start_fullscreen();
-               if(!caller_is_canvas) caller->lock_window("Canvas::keypress_event 1");
+               caller->lock_window("Canvas::keypress_event 1");
                break;
        case ESC:
                caller->unlock_window();
                if(get_fullscreen())
                        stop_fullscreen();
-               if(!caller_is_canvas) caller->lock_window("Canvas::keypress_event 2");
+               caller->lock_window("Canvas::keypress_event 2");
                break;
        default:
                return 0;
@@ -899,17 +898,17 @@ CanvasOutput::~CanvasOutput()
 
 int CanvasOutput::cursor_leave_event()
 {
-       return canvas->cursor_leave_event_base(this);
+       return canvas->cursor_leave_event_base(canvas->get_canvas());
 }
 
 int CanvasOutput::cursor_enter_event()
 {
-       return canvas->cursor_enter_event_base(this);
+       return canvas->cursor_enter_event_base(canvas->get_canvas());
 }
 
 int CanvasOutput::button_press_event()
 {
-       return canvas->button_press_event_base(this);
+       return canvas->button_press_event_base(canvas->get_canvas());
 }
 
 int CanvasOutput::button_release_event()
@@ -924,7 +923,7 @@ int CanvasOutput::cursor_motion_event()
 
 int CanvasOutput::keypress_event()
 {
-       return canvas->keypress_event(this);
+       return canvas->keypress_event(canvas->get_canvas());
 }
 
 
index aa4879a125e28e34d763e1ab419061f6ebdaa08f..9a78095eacea972c62543eafe57028edc0e39d21 100644 (file)
@@ -226,10 +226,7 @@ public:
 
 private:
        void get_scrollbars(EDL *edl,
-               int &canvas_x,
-               int &canvas_y,
-               int &canvas_w,
-               int &canvas_h);
+               int &canvas_x, int &canvas_y, int &canvas_w, int &canvas_h);
        Mutex *canvas_lock;
 };
 
@@ -238,10 +235,7 @@ class CanvasOutput : public BC_SubWindow
 {
 public:
        CanvasOutput(Canvas *canvas,
-        int x,
-        int y,
-        int w,
-        int h);
+               int x, int y, int w, int h);
        ~CanvasOutput();
 
        int cursor_leave_event();
@@ -260,9 +254,7 @@ public:
 class CanvasFullScreen : public BC_FullScreen
 {
 public:
-       CanvasFullScreen(Canvas *canvas,
-        int w,
-        int h);
+       CanvasFullScreen(Canvas *canvas, int w, int h);
        ~CanvasFullScreen();
 
        Canvas *canvas;
index bc423328da44ebbc7c42b767fdd12c8837439a13..dfbffff0b7bbc1ae580304d6ff62e775298e793b 100644 (file)
@@ -830,14 +830,17 @@ void VWindowCanvas::draw_refresh(int flush)
                float in_x1, in_y1, in_x2, in_y2;
                float out_x1, out_y1, out_x2, out_y2;
                get_transfers(edl,
-                       in_x1,
-                       in_y1,
-                       in_x2,
-                       in_y2,
-                       out_x1,
-                       out_y1,
-                       out_x2,
-                       out_y2);
+                       in_x1, in_y1, in_x2, in_y2,
+                       out_x1, out_y1, out_x2, out_y2);
+// input scaled from session to refresh frame coordinates
+               int ow = get_output_w(edl);
+               int oh = get_output_h(edl);
+               int rw = refresh_frame->get_w();
+               int rh = refresh_frame->get_h();
+               float xs = (float)rw / ow;
+               float ys = (float)rh / oh;
+               in_x1 *= xs;  in_x2 *= xs;
+               in_y1 *= ys;  in_y2 *= ys;
                get_canvas()->draw_vframe(refresh_frame,
                                (int)out_x1,
                                (int)out_y1,
index f5759dd853d31b196d46040781b359f57c766ad8..7de7c15d2d13573043729aa9d01dcf9c7d69ead9 100644 (file)
@@ -1339,20 +1339,25 @@ locking_message = event->xclient.message_type;
 
        case LeaveNotify:
                if( event->xcrossing.mode != NotifyNormal ) break;
-               if( cursor_entered && event->xcrossing.window == win ) {
-                       cursor_entered = 0;
-               }
+               cursor_entered = 0;
                event_win = event->xany.window;
                dispatch_cursor_leave();
                break;
 
        case EnterNotify:
                if( event->xcrossing.mode != NotifyNormal ) break;
-               if( !cursor_entered && event->xcrossing.window == win ) {
-                       if( !event->xcrossing.focus && get_resources()->grab_input_focus ) {
-                               XSetInputFocus(display, win, RevertToParent, CurrentTime);
+
+               if( !cursor_entered ) {
+                       for( int i=0; i<popups.size(); ++i ) {  // popups always take focus
+                               if( popups[i]->win == event->xcrossing.window )
+                               cursor_entered = 1;
                        }
-                       cursor_entered = 1;
+                       if( !cursor_entered && get_resources()->grab_input_focus &&
+                           !event->xcrossing.focus && event->xcrossing.window == win ) {
+                               cursor_entered = 1;
+                       }
+                       if( cursor_entered )
+                               XSetInputFocus(display, win, RevertToParent, CurrentTime);
                }
                event_win = event->xany.window;
                cursor_x = event->xcrossing.x;