]> git.mxchange.org Git - flightgear.git/commitdiff
Patch from Andy Ross to allow virtual panel to tilt with mouse view:
authordavid <david>
Wed, 6 Mar 2002 13:53:18 +0000 (13:53 +0000)
committerdavid <david>
Wed, 6 Mar 2002 13:53:18 +0000 (13:53 +0000)
OK, attached is a replacement for mouse.cxx that works the view using
the view-offset/tilt interface, rather than the (kinda odd) GuiQuat
stuff.  It's kind of a hack job, as I left the hooks to GuiQuat in in
other places for fear of breaking something.  Still, it removed more
code from mouse.cxx than it added, which has to count for some
elegance points.

src/GUI/mouse.cxx

index 9a08c457b8bbdf17018ee562b1e3d015b90cf17d..1bd1e5be8cb4775df5693a3d8225b51c69479797 100644 (file)
@@ -107,11 +107,6 @@ static int glut_active_alt = 0;
 static int MOUSE_XSIZE = 0;
 static int MOUSE_YSIZE = 0;
 
-// uncomment this for view to exactly follow mouse in MOUSE_VIEW mode
-// else smooth out the view panning to .01 radian per frame
-// see view_offset smoothing mechanism in main.cxx
-#define NO_SMOOTH_MOUSE_VIEW
-
 // uncomment following to
 #define RESET_VIEW_ON_LEAVING_MOUSE_VIEW
 
@@ -191,6 +186,20 @@ static inline float get_goal_view_offset() {
        return globals->get_current_view()->get_goal_view_offset();
 }
 
+static inline void set_goal_view_tilt( float tilt )
+{
+       globals->get_current_view()->set_goal_view_tilt(tilt);
+}
+
+static inline void set_view_tilt( float tilt )
+{
+       globals->get_current_view()->set_view_tilt(tilt);
+}
+
+static inline float get_view_tilt() {
+       return globals->get_current_view()->get_view_tilt();
+}
+
 static inline void move_brake(float offset) {
        globals->get_controls()->move_brake(FGControls::ALL_WHEELS, offset);
 }
@@ -416,19 +425,10 @@ void guiMotionFunc ( int x, int y )
                 
             case MOUSE_VIEW:
                 if( y <= 0 ) {
-#define CONTRAINED_MOUSE_VIEW_Y
-#ifdef CONTRAINED_MOUSE_VIEW_Y
                     y = 1;
-#else
-                    y = wh-2;
-#endif // CONTRAINED_MOUSE_VIEW_Y
                     need_warp = 1;
                 } else if( y >= wh-1) {
-#ifdef CONTRAINED_MOUSE_VIEW_Y
                     y = wh-2;
-#else
-                    y = 1;
-#endif // CONTRAINED_MOUSE_VIEW_Y
                     need_warp = 1;
                 }
                 // wrap MOUSE_VIEW mode cursor x position
@@ -439,49 +439,20 @@ void guiMotionFunc ( int x, int y )
                     need_warp = 1;
                     x = 1;
                 }
-                // try to get SGD_PI movement in each half of screen
-                // do spherical pan
-                W = ww;
-                H = wh;
-                if( middle_button() ) {
-                    trackball(lastGuiQuat,
-                              (2.0f * _mX - W) / W,
-                              0, //(H - 2.0f * y) / H,         // 3
-                              (2.0f * x - W) / W,
-                              0 //(H - 2.0f * _mY) / H       // 1
-                             );
-                    x = _mX;
-                    y = _mY;
-                    need_warp = 1;
-                } else {
-                    trackball(lastGuiQuat,
-                              0, //(2.0f * _mX - W) / W,  // 0
-                              (H - 2.0f * y) / H,         // 3
-                              0, //(2.0f * x - W) / W,    // 2
-                              (H - 2.0f * _mY) / H        // 1 
-                             );
-                }
-                add_quats(lastGuiQuat, curGuiQuat, curGuiQuat);
-                build_rotmatrix(GuiQuat_mat, curGuiQuat);
-                
-                // do horizontal pan
-                // this could be done in above quat
-                // but requires redoing view pipeline
-                offset = get_goal_view_offset();
-                offset += ((_mX - x) * SGD_2PI / W );
-                while (offset < 0.0) {
-                    offset += SGD_2PI;
-                }
-                while (offset > SGD_2PI) {
-                    offset -= SGD_2PI;
-                }
-                set_goal_view_offset(offset);
-#ifdef NO_SMOOTH_MOUSE_VIEW
-                set_view_offset(offset);
-#endif
-                break;
-            
-            default:
+
+               {
+                   float scale = SGD_PI / MOUSE_XSIZE;
+                   float dx = (_mX - x) * scale;
+                   float dy = (_mY - y) * scale;
+                   
+                   float newOffset = get_view_offset() + dx;
+                   set_goal_view_offset(newOffset);
+                   set_view_offset(newOffset);
+                   
+                   float newTilt = get_view_tilt() + dy;
+                   set_goal_view_tilt(newTilt);
+                   set_view_tilt(newTilt);
+               }
                 break;
         }
     }