1
0
Fork 0

fix <modulo> feature (required for the compass tape)

This commit is contained in:
mfranz 2006-07-06 16:46:25 +00:00
parent 6c8ae0df1f
commit 5000731c03
3 changed files with 19 additions and 12 deletions

View file

@ -457,18 +457,17 @@ public:
virtual void draw ( void ) {} // No-op here. Defined in derived classes.
protected:
inline unsigned int modulo() const { return _modulo; }
inline float factor() const { return _display_factor; }
inline float range_to_show() const { return _range_shown; }
Input _input;
float _major_divs; // major division marker units
float _minor_divs; // minor division marker units
float _major_divs; // major division marker units
float _minor_divs; // minor division marker units
unsigned int _modulo; // Roll over point
private:
float _range_shown; // Width Units.
float _display_factor; // factor => screen units/range values.
unsigned int _modulo; // Roll over point
};

View file

@ -219,7 +219,7 @@ void HUD::Gauge::draw(void)
i = (int)vmin;
for (; i <last ; i++) {
condition = true;
if (!modulo() && i < _input.min())
if (!_modulo && i < _input.min())
condition = false;
if (condition) {
@ -246,12 +246,12 @@ void HUD::Gauge::draw(void)
if (_major_divs) {
if (!(i % (int)_major_divs)) {
if (modulo()) {
if (_modulo) {
if (disp_val < 0) {
while (disp_val < 0)
disp_val += modulo();
disp_val += _modulo;
}
disp_val = i % (int)modulo();
disp_val = i % (int)_modulo;
} else {
disp_val = i;
}

View file

@ -274,7 +274,7 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
for (int i = 0; ; i++) {
float v = vstart + i * _minor_divs;
if (!modulo() && (v < _input.min() || v > _input.max()))
if (!_modulo && (v < _input.min() || v > _input.max()))
continue;
float y = _y + (v - vmin) * factor();
@ -342,7 +342,11 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
} // end huds both
} else { // major div
lenstr = snprintf(buf, BUFSIZE, "%d", int(v));
int display_value = int(v);
if (_modulo)
display_value %= _modulo;
lenstr = snprintf(buf, BUFSIZE, "%d", display_value);
if (option_both()) {
// draw_line(_x, y, marker_xs, y);
@ -501,7 +505,7 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
for (int i = 0; ; i++) {
float v = vstart + i * _minor_divs;
if (!modulo() && (v < _input.min() || v > _input.max()))
if (!_modulo && (v < _input.min() || v > _input.max()))
continue;
float x = _x + (v - vmin) * factor();
@ -543,7 +547,11 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
}
} else { // major divs
lenstr = snprintf(buf, BUFSIZE, "%d", int(v));
int display_value = int(v);
if (_modulo)
display_value %= _modulo;
lenstr = snprintf(buf, BUFSIZE, "%d", display_value);
// Draw major ticks and text only if far enough from the edge. // FIXME
if (x < _x + 10 || x + 10 > _x + _w)