]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/gui_local.cxx
Don't restore initial screen geometry because there is nothing in fg_os* to resize...
[flightgear.git] / src / GUI / gui_local.cxx
index 398a47ac8dd910f1956833ed046edc7662db9b64..64318b62e149fa05670259a10cad78e15156cec4 100644 (file)
@@ -1,8 +1,21 @@
-#include <GL/glut.h>           // needed before pu.h
-#include <plib/pu.h>           // plib include
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
 
+#ifdef HAVE_WINDOWS_H
+#  include <windows.h>
+#endif
 
+#include <plib/pu.h>        // plib include
+
+#include <FDM/flight.hxx>
+
+#include <Main/globals.hxx>
 #include <Main/fg_init.hxx>
+#include <Main/fg_props.hxx>
+#include <Main/renderer.hxx>
+#include <Scenery/tilemgr.hxx>
+#include <Time/light.hxx>
 
 #include "gui.h"
 #include "trackball.h"
@@ -20,25 +33,67 @@ float curGuiQuat[4];
 float GuiQuat_mat[4][4];
 
 void Quat0( void ) {
-       curGuiQuat[0] = _quat0[0];
-       curGuiQuat[1] = _quat0[1];
-       curGuiQuat[2] = _quat0[2];
-       curGuiQuat[3] = _quat0[3];
+    curGuiQuat[0] = _quat0[0];
+    curGuiQuat[1] = _quat0[1];
+    curGuiQuat[2] = _quat0[2];
+    curGuiQuat[3] = _quat0[3];
 }
 
 void initMouseQuat(void) {
-       trackball(_quat0, 0.0, 0.0, 0.0, 0.0);  
-       Quat0();
-       build_rotmatrix(GuiQuat_mat, curGuiQuat);
+    trackball(_quat0, 0.0, 0.0, 0.0, 0.0);  
+    Quat0();
+    build_rotmatrix(GuiQuat_mat, curGuiQuat);
 }
 
 
 void reInit(puObject *cb)
 {
-       BusyCursor(0);
-       Quat0();
-       build_rotmatrix(GuiQuat_mat, curGuiQuat);
-       fgReInitSubsystems();
-       BusyCursor(1);
+    // BusyCursor(0);
+    Quat0();
+
+    static const SGPropertyNode *master_freeze
+       = fgGetNode("/sim/freeze/master");
+
+    bool freeze = master_freeze->getBoolValue();
+    if ( !freeze ) {
+        fgSetBool("/sim/freeze/master", true);
+    }
+
+    cur_fdm_state->unbind();
+
+    // in case user has changed window size as
+    // restoreInitialState() overwrites these
+    int xsize = fgGetInt("/sim/startup/xsize");
+    int ysize = fgGetInt("/sim/startup/ysize");
+
+    build_rotmatrix(GuiQuat_mat, curGuiQuat);
+
+    globals->restoreInitialState();
+
+    // update our position based on current presets
+    fgInitPosition();
+
+    // We don't know how to resize the window, so keep the last values 
+    //  for xsize and ysize, and don't use the one set initially
+    fgSetInt("/sim/startup/xsize",xsize);
+    fgSetInt("/sim/startup/ysize",ysize);
+
+    SGTime *t = globals->get_time_params();
+    delete t;
+    t = fgInitTime();
+    globals->set_time_params( t );
+
+    fgReInitSubsystems();
+
+    globals->get_tile_mgr()->update( fgGetDouble("/environment/visibility-m") );
+    globals->get_renderer()->resize( xsize, ysize );
+
+    fgSetBool("/sim/signals/reinit", true);
+
+    // BusyCursor(1);
+    
+    if ( !freeze ) {
+        fgSetBool("/sim/freeze/master", false);
+    }
 }