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
};
i = (int)vmin;
for (; i <last ; i++) {
condition = true;
- if (!modulo() && i < _input.min())
+ if (!_modulo && i < _input.min())
condition = false;
if (condition) {
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;
}
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();
} // 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);
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();
}
} 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)