]> git.mxchange.org Git - flightgear.git/blobdiff - src/Cockpit/panel.cxx
Martin Spott: Use standardized Sun directive.
[flightgear.git] / src / Cockpit / panel.cxx
index 16d7b77923462b1094cee530ff13ed4d76098919..03e003c6c218d34375b8975f6c16e3919240849c 100644 (file)
 #include <stdio.h>     // sprintf
 #include <string.h>
 
+#include <simgear/compiler.h>
+
+#include SG_GLU_H
+
 #include <plib/ssg.h>
 #include <plib/fnt.h>
 
 // my hardware/driver requires many more.
 #define POFF_UNITS 4
 
-#ifndef HAVE_TRUNCF
-inline float truncf (float d) {
-    return (d < 0) ? -floorf(-d) : floorf(d);
-}
-#endif
-
-\f
 ////////////////////////////////////////////////////////////////////////
 // Local functions.
 ////////////////////////////////////////////////////////////////////////
@@ -171,6 +168,7 @@ FGCroppedTexture::getTexture ()
 static fntRenderer text_renderer;
 static fntTexFont *default_font = 0;
 static fntTexFont *led_font = 0;
+static sgVec4 panel_color;
 
 /**
  * Constructor.
@@ -186,7 +184,8 @@ FGPanel::FGPanel ()
     _jitter(fgGetNode("/sim/panel/jitter", true)),
     _flipx(fgGetNode("/sim/panel/flip-x", true)),
     _xsize_node(fgGetNode("/sim/startup/xsize", true)),
-    _ysize_node(fgGetNode("/sim/startup/ysize", true))
+    _ysize_node(fgGetNode("/sim/startup/ysize", true)),
+    _enable_depth_test(false)
 {
 }
 
@@ -385,8 +384,10 @@ FGPanel::draw()
   glEnable(GL_COLOR_MATERIAL);
   glEnable(GL_CULL_FACE);
   glCullFace(GL_BACK);
-  glDisable(GL_DEPTH_TEST);
-  sgVec4 panel_color;
+  if( _enable_depth_test )
+      glDepthFunc(GL_ALWAYS);
+  else
+    glDisable(GL_DEPTH_TEST);
 
   FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
   sgCopyVec4( panel_color, l->scene_diffuse());
@@ -454,6 +455,8 @@ FGPanel::draw()
 
 
   // restore some original state
+  if( _enable_depth_test )
+    glDepthFunc(GL_LESS);
   glPopAttrib();
   glPolygonOffset(0, 0);
   glDisable(GL_POLYGON_OFFSET_FILL);
@@ -587,6 +590,10 @@ FGPanel::doMouseAction (int button, int updown, int x, int y)
   return doLocalMouseAction(button, updown, x, y);
 } 
 
+void FGPanel::setDepthTest (bool enable) {
+    _enable_depth_test = enable;
+}
+
 
 \f
 ////////////////////////////////////////////////////////////////////////.
@@ -601,14 +608,14 @@ FGPanelAction::FGPanelAction (int button, int x, int y, int w, int h,
                               bool repeatable)
     : _button(button), _x(x), _y(y), _w(w), _h(h), _repeatable(repeatable)
 {
-  for (unsigned int i = 0; i < 2; i++) {
-      for (unsigned int j = 0; j < _bindings[i].size(); j++)
-          delete _bindings[i][j];
-  }
 }
 
 FGPanelAction::~FGPanelAction ()
 {
+  for (unsigned int i = 0; i < 2; i++) {
+      for (unsigned int j = 0; j < _bindings[i].size(); j++)
+          delete _bindings[i][j];
+  }
 }
 
 void
@@ -950,15 +957,6 @@ FGTexturedLayer::draw ()
     
                                // From Curt: turn on the panel
                                // lights after sundown.
-    sgVec4 panel_color;
-
-    FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
-    sgCopyVec4( panel_color, l->scene_diffuse());
-    if ( fgGetDouble("/systems/electrical/outputs/instrument-lights") > 1.0 ) {
-        if ( panel_color[0] < 0.7 ) panel_color[0] = 0.7;
-        if ( panel_color[1] < 0.2 ) panel_color[1] = 0.2;
-        if ( panel_color[2] < 0.2 ) panel_color[2] = 0.2;
-    }
     glColor4fv( panel_color );
 
     glTexCoord2f(_texture.getMinX(), _texture.getMinY()); glVertex2f(-w2, -h2);
@@ -1125,7 +1123,7 @@ FGTextLayer::Chunk::getValue () const
       break;
     case DOUBLE_VALUE:
       double d = _offs + _node->getFloatValue() * _mult;
-      if (_trunc)  d = truncf(d);
+      if (_trunc)  d = (d < 0) ? -floor(-d) : floor(d);
       sprintf(_buf, _fmt.c_str(), d);
       break;
     }