1
0
Fork 0

- collect drawing primitives in the Item base class

- rename circle to draw_bullet, which is more correct
This commit is contained in:
mfranz 2006-07-04 21:04:22 +00:00
parent eb69a4bd4b
commit 1d0b6290c4
3 changed files with 73 additions and 65 deletions

View file

@ -396,34 +396,12 @@ protected:
inline bool option_top() const { return _options & TOP; } inline bool option_top() const { return _options & TOP; }
inline bool option_bottom() const { return _options & BOTTOM; } inline bool option_bottom() const { return _options & BOTTOM; }
void draw_line( float x1, float y1, float x2, float y2) { void draw_line( float x1, float y1, float x2, float y2);
_hud->_line_list.add(LineSegment(x1, y1, x2, y2)); void draw_stipple_line( float x1, float y1, float x2, float y2);
} void draw_text( float x, float y, char *msg, int digit);
float text_width(char *str) const;
void draw_stipple_line( float x1, float y1, float x2, float y2) { void draw_circle(float x1, float y1, float r) const;
_hud->_stipple_line_list.add(LineSegment(x1, y1, x2, y2)); void draw_bullet(float, float, float);
}
void draw_text( float x, float y, char *msg, int digit) {
_hud->_text_list.add(HUDText(x, y, msg, digit));
}
float text_width(char *str) const {
assert(_hud->_font_renderer);
float r, l;
_hud->_font->getBBox(str, _hud->_font_size, 0, &l, &r, 0, 0);
return r - l;
}
void draw_circle(float x1, float y1, float r) const {
glBegin(GL_LINE_LOOP);
for (int count = 0; count < 25; count++) {
float cosine = r * cos(count * 2 * SG_PI / 10.0);
float sine = r * sin(count * 2 * SG_PI / 10.0);
glVertex2f(cosine + x1, sine + y1);
}
glEnd();
}
HUD *_hud; HUD *_hud;
string _name; string _name;
@ -522,7 +500,6 @@ public:
virtual void draw(); virtual void draw();
protected: protected:
void circle(float, float, float);
void fixed(float, float, float, float, float, float); void fixed(float, float, float, float, float, float);
void zoomed_scale(int, int); void zoomed_scale(int, int);

View file

@ -87,10 +87,60 @@ HUD::Item::Item(HUD *hud, const SGPropertyNode *n, float x, float y) :
bool HUD::Item::isEnabled() bool HUD::Item::isEnabled()
{ {
if (!_condition) return _condition ? _condition->test() : true;
return true; }
return _condition->test();
void HUD::Item::draw_line( float x1, float y1, float x2, float y2)
{
_hud->_line_list.add(LineSegment(x1, y1, x2, y2));
}
void HUD::Item::draw_stipple_line( float x1, float y1, float x2, float y2)
{
_hud->_stipple_line_list.add(LineSegment(x1, y1, x2, y2));
}
void HUD::Item::draw_text( float x, float y, char *msg, int digit)
{
_hud->_text_list.add(HUDText(x, y, msg, digit));
}
void HUD::Item::draw_circle(float x1, float y1, float r) const
{
glBegin(GL_LINE_LOOP);
for (int count = 0; count < 25; count++) {
float cosine = r * cos(count * 2 * SG_PI / 10.0);
float sine = r * sin(count * 2 * SG_PI / 10.0);
glVertex2f(cosine + x1, sine + y1);
}
glEnd();
}
void HUD::Item::draw_bullet(float x, float y, float size)
{
glEnable(GL_POINT_SMOOTH);
glPointSize(size);
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();
glPointSize(1.0);
glDisable(GL_POINT_SMOOTH);
}
float HUD::Item::text_width(char *str) const
{
assert(_hud->_font_renderer);
float r, l;
_hud->_font->getBBox(str, _hud->_font_size, 0, &l, &r, 0, 0);
return r - l;
} }

View file

@ -83,8 +83,6 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
width = scrn_rect.left + scrn_rect.right; width = scrn_rect.left + scrn_rect.right;
// was: if (type != "gauge") { ... until end
// if its not explicitly a gauge default to tape
if (_pointer) { if (_pointer) {
if (_pointer_type == MOVING) { if (_pointer_type == MOVING) {
vmin = _input.min(); vmin = _input.min();
@ -272,9 +270,6 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
// minor and major ticks. // minor and major ticks.
// draw scale or tape // draw scale or tape
// last = float_to_int(vmax)+1;
// i = float_to_int(vmin);
last = (int)vmax + 1; // N last = (int)vmax + 1; // N
i = (int)vmin; // N i = (int)vmin; // N
@ -327,7 +322,7 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
} }
} else if (_tick_type == CIRCLE) { } else if (_tick_type == CIRCLE) {
circle(scrn_rect.left,(float)marker_ys, 3.0); draw_bullet(scrn_rect.left,(float)marker_ys, 3.0);
} else { } else {
// if neither line nor circle draw default as line // if neither line nor circle draw default as line
@ -355,7 +350,7 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
marker_xe, marker_ys); marker_xe, marker_ys);
} }
} else if (_tick_type == CIRCLE) { } else if (_tick_type == CIRCLE) {
circle((float)marker_xs + 4, (float)marker_ys, 3.0); draw_bullet((float)marker_xs + 4, (float)marker_ys, 3.0);
} else { } else {
draw_line(marker_xs + 4, marker_ys, draw_line(marker_xs + 4, marker_ys,
@ -373,7 +368,7 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
} }
} else if (_tick_type == CIRCLE) { } else if (_tick_type == CIRCLE) {
circle((float)marker_xe - 4, (float)marker_ys, 3.0); draw_bullet((float)marker_xe - 4, (float)marker_ys, 3.0);
} else { } else {
draw_line(marker_xs, marker_ys, draw_line(marker_xs, marker_ys,
marker_xe - 4, marker_ys); marker_xe - 4, marker_ys);
@ -418,7 +413,7 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
glEnd(); glEnd();
} else if (_tick_type == CIRCLE) { } else if (_tick_type == CIRCLE) {
circle(scrn_rect.left, (float)marker_ys, 5.0); draw_bullet(scrn_rect.left, (float)marker_ys, 5.0);
} else { } else {
glBegin(GL_LINE_STRIP); glBegin(GL_LINE_STRIP);
@ -437,7 +432,7 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
if (_tick_type == LINE) if (_tick_type == LINE)
draw_line(marker_xs, marker_ys, marker_xe, marker_ys); draw_line(marker_xs, marker_ys, marker_xe, marker_ys);
else if (_tick_type == CIRCLE) else if (_tick_type == CIRCLE)
circle((float)marker_xs + 4, (float)marker_ys, 5.0); draw_bullet((float)marker_xs + 4, (float)marker_ys, 5.0);
else else
draw_line(marker_xs, marker_ys, marker_xe, marker_ys); draw_line(marker_xs, marker_ys, marker_xe, marker_ys);
@ -703,20 +698,6 @@ void HUD::Tape::draw(void) // (HUD_scale * pscale)
void HUD::Tape::circle(float x, float y, float size)
{
glEnable(GL_POINT_SMOOTH);
glPointSize(size);
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();
glPointSize(1.0);
glDisable(GL_POINT_SMOOTH);
}
void HUD::Tape::fixed(float x1, float y1, float x2, float y2, float x3, float y3) void HUD::Tape::fixed(float x1, float y1, float x2, float y2, float x3, float y3)
{ {
glBegin(GL_LINE_STRIP); glBegin(GL_LINE_STRIP);
@ -825,8 +806,8 @@ void HUD::Tape::zoomed_scale(int first, int last)
for (i = 1; i < 5; i++) { for (i = 1; i < 5; i++) {
yfirst += factor; yfirst += factor;
ycentre += factor; ycentre += factor;
circle(xstart - 2.5, yfirst, 3.0); draw_bullet(xstart - 2.5, yfirst, 3.0);
circle(xstart - 2.5, ycentre, 3.0); draw_bullet(xstart - 2.5, ycentre, 3.0);
} }
yfirst = mid_scr.y - hgt; yfirst = mid_scr.y - hgt;
@ -876,8 +857,8 @@ void HUD::Tape::zoomed_scale(int first, int last)
for (i = 1; i < 5; i++) { for (i = 1; i < 5; i++) {
yfirst += factor; yfirst += factor;
ycentre += factor; ycentre += factor;
circle(xstart + 2.5, yfirst, 3.0); draw_bullet(xstart + 2.5, yfirst, 3.0);
circle(xstart + 2.5, ycentre, 3.0); draw_bullet(xstart + 2.5, ycentre, 3.0);
} }
yfirst = mid_scr.y - hgt; yfirst = mid_scr.y - hgt;
@ -988,8 +969,8 @@ void HUD::Tape::zoomed_scale(int first, int last)
for (i = 1; i < 5; i++) { for (i = 1; i < 5; i++) {
xfirst += factor; xfirst += factor;
xcentre += factor; xcentre += factor;
circle(xfirst, ystart - 2.5, 3.0); draw_bullet(xfirst, ystart - 2.5, 3.0);
circle(xcentre, ystart - 2.5, 3.0); draw_bullet(xcentre, ystart - 2.5, 3.0);
} }
xfirst = mid_scr.x - hgt; xfirst = mid_scr.x - hgt;
@ -1040,8 +1021,8 @@ void HUD::Tape::zoomed_scale(int first, int last)
for (i = 1; i < 5; i++) { for (i = 1; i < 5; i++) {
xfirst += factor; xfirst += factor;
xcentre += factor; xcentre += factor;
circle(xfirst, ystart + 2.5, 3.0); draw_bullet(xfirst, ystart + 2.5, 3.0);
circle(xcentre, ystart + 2.5, 3.0); draw_bullet(xcentre, ystart + 2.5, 3.0);
} }
xfirst = mid_scr.x - hgt; xfirst = mid_scr.x - hgt;