]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/HUD/HUD_tape.cxx
Merge branch 'next' of D:\Git_New\flightgear into next
[flightgear.git] / src / Instrumentation / HUD / HUD_tape.cxx
index db9e68fef14f59f024a7898c376df2b05991fa91..02fb76f150c946cc76a74a5086a286cb3fcfbd10 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "HUD.hxx"
 
+static const float TICK_OFFSET = 2.f;
+
 
 HUD::Tape::Tape(HUD *hud, const SGPropertyNode *n, float x, float y) :
     Scale(hud, n, x, y),
@@ -33,6 +35,7 @@ HUD::Tape::Tape(HUD *hud, const SGPropertyNode *n, float x, float y) :
     _draw_cap_right(n->getBoolValue("cap-right", false)),
     _draw_cap_left(n->getBoolValue("cap-left", false)),
     _marker_offset(n->getFloatValue("marker-offset")),
+    _label_offset(n->getFloatValue("label-offset", 3.0)),
     _label_gap(n->getFloatValue("label-gap-width") / 2.0),
     _pointer(n->getBoolValue("enable-pointer", true)),
     _format(n->getStringValue("format", "%d"))
@@ -64,7 +67,9 @@ HUD::Tape::Tape(HUD *hud, const SGPropertyNode *n, float x, float y) :
         _div_ratio = 0, _minor_divs = _major_divs;
 
 //    int k; //odd or even values for ticks            // FIXME odd scale
-    _odd_type = int(floorf(_input.max() + 0.5)) & 1 ? true : false;
+    _odd_type = false;
+    if (_input.max() + .5f < float(SGLimits<long>::max()))
+        _odd_type = long(floorf(_input.max() + 0.5f)) & 1 ? true : false;
 }
 
 
@@ -238,17 +243,18 @@ void HUD::Tape::draw_vertical(float value)
     for (int i = 0; ; i++) {
         float v = vstart + i * _minor_divs;
 
-        if (!_modulo)
+        if (!_modulo) {
             if (v < _input.min())
                 continue;
             else if (v > _input.max())
                 break;
+        }
 
         float y = _y + (v - vmin) * factor();
 
-        if (y < _y + 0)
+        if (y < _y + TICK_OFFSET)
             continue;
-        if (y > top - 0)
+        if (y > top - TICK_OFFSET)
             break;
 
         if (_div_ratio && i % _div_ratio) { // minor div
@@ -315,9 +321,9 @@ void HUD::Tape::draw_vertical(float value)
                     draw_bullet(marker_xs + 4, y, 5.0);
 
                 if (option_left())
-                    x = marker_xs, align = RIGHT|VCENTER;
+                    x = marker_xs - _label_offset, align = RIGHT|VCENTER;
                 else
-                    x = marker_xe, align = LEFT|VCENTER;
+                    x = marker_xe + _label_offset, align = LEFT|VCENTER;
             }
 
             if (!option_notext()) {
@@ -330,8 +336,8 @@ void HUD::Tape::draw_vertical(float value)
                     continue;
 
                 if (_label_gap == 0.0
-                        || b < _center_y - _label_gap && t < _center_y - _label_gap
-                        || b > _center_y + _label_gap && t > _center_y + _label_gap) {
+                        || (b < _center_y - _label_gap && t < _center_y - _label_gap)
+                        || (b > _center_y + _label_gap && t > _center_y + _label_gap)) {
                     draw_text(x, y, s);
                 }
             }
@@ -446,17 +452,18 @@ void HUD::Tape::draw_horizontal(float value)
     for (int i = 0; ; i++) {
         float v = vstart + i * _minor_divs;
 
-        if (!_modulo)
+        if (!_modulo) {
             if (v < _input.min())
                 continue;
             else if (v > _input.max())
                 break;
+        }
 
         float x = _x + (v - vmin) * factor();
 
-        if (x < _x + 0)
+        if (x < _x + TICK_OFFSET)
             continue;
-        if (x > right - 0)
+        if (x > right - TICK_OFFSET)
             break;
 
         if (_div_ratio && i % _div_ratio) { // minor div
@@ -500,9 +507,9 @@ void HUD::Tape::draw_horizontal(float value)
                 draw_line(x, marker_ys, x, marker_ye);
 
                 if (option_top())
-                    y = top, align = TOP|HCENTER;
+                    y = top - _label_offset, align = TOP|HCENTER;
                 else
-                    y = _y, align = BOTTOM|HCENTER;
+                    y = _y + _label_offset, align = BOTTOM|HCENTER;
             }
 
             if (!option_notext()) {
@@ -515,8 +522,8 @@ void HUD::Tape::draw_horizontal(float value)
                     continue;
 
                 if (_label_gap == 0.0
-                        || l < _center_x - _label_gap && r < _center_x - _label_gap
-                        || l > _center_x + _label_gap && r > _center_x + _label_gap) {
+                        || (l < _center_x - _label_gap && r < _center_x - _label_gap)
+                        || (l > _center_x + _label_gap && r > _center_x + _label_gap)) {
                     draw_text(x, y, s);
                 }
             }