first stab at label box pointers. <option>top</option> on a <label> makes
such a box: _____/\_____ | Booo | |__________| likewise with options bottom, left, right. The size can be set via option <marker-offset> (analogous to <tape> offsets), which describes the distance from the base to the peak. Default: 8 px
This commit is contained in:
parent
a6c8610682
commit
7a52695de0
2 changed files with 47 additions and 4 deletions
|
@ -439,6 +439,7 @@ private:
|
||||||
int _blink;
|
int _blink;
|
||||||
bool _box;
|
bool _box;
|
||||||
float _text_y;
|
float _text_y;
|
||||||
|
float _marker_offset;
|
||||||
|
|
||||||
SGCondition *_blink_condition;
|
SGCondition *_blink_condition;
|
||||||
double _blink_interval;
|
double _blink_interval;
|
||||||
|
|
|
@ -32,6 +32,7 @@ HUD::Label::Label(HUD *hud, const SGPropertyNode *n, float x, float y) :
|
||||||
_input(n->getNode("input", false)),
|
_input(n->getNode("input", false)),
|
||||||
_fontsize(fgGetInt("/sim/startup/xsize") > 1000 ? FONT_LARGE : FONT_SMALL), // FIXME
|
_fontsize(fgGetInt("/sim/startup/xsize") > 1000 ? FONT_LARGE : FONT_SMALL), // FIXME
|
||||||
_box(n->getBoolValue("box", false)),
|
_box(n->getBoolValue("box", false)),
|
||||||
|
_marker_offset(n->getFloatValue("marker-offset", 8)),
|
||||||
_blink_condition(0),
|
_blink_condition(0),
|
||||||
_blink_interval(n->getFloatValue("blinking/interval", -1.0f)),
|
_blink_interval(n->getFloatValue("blinking/interval", -1.0f)),
|
||||||
_blink_target(0.0),
|
_blink_target(0.0),
|
||||||
|
@ -84,10 +85,51 @@ void HUD::Label::draw(void)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_box) {
|
if (_box) {
|
||||||
|
const float tan30 = 0.57735;
|
||||||
|
float base = _marker_offset * tan30;
|
||||||
|
float l, r, p;
|
||||||
|
|
||||||
|
l = _center_x - base;
|
||||||
|
r = _center_x + base;
|
||||||
|
|
||||||
|
if (option_bottom()) {
|
||||||
|
p = _y - _marker_offset;
|
||||||
|
draw_line(_x, _y, l, _y);
|
||||||
|
draw_line(l, _y, _center_x, p);
|
||||||
|
draw_line(_center_x, p, r, _y);
|
||||||
|
draw_line(r, _y, _x + _w, _y);
|
||||||
|
} else
|
||||||
draw_line(_x, _y, _x + _w, _y);
|
draw_line(_x, _y, _x + _w, _y);
|
||||||
draw_line(_x + _w, _y, _x + _w, _y + _h);
|
|
||||||
|
if (option_top()) {
|
||||||
|
p = _y + _h + _marker_offset;
|
||||||
|
draw_line(_x, _y + _h, l, _y + _h);
|
||||||
|
draw_line(l, _y + _h, _center_x, p);
|
||||||
|
draw_line(_center_x, p, r, _y + _h);
|
||||||
|
draw_line(r, _y + _h, _x + _w, _y + _h);
|
||||||
|
} else
|
||||||
draw_line(_x + _w, _y + _h, _x, _y + _h);
|
draw_line(_x + _w, _y + _h, _x, _y + _h);
|
||||||
|
|
||||||
|
l = _center_y - base;
|
||||||
|
r = _center_y + base;
|
||||||
|
|
||||||
|
if (option_left()) {
|
||||||
|
p = _x - _marker_offset;
|
||||||
|
draw_line(_x, _y, _x, l);
|
||||||
|
draw_line(_x, l, p, _center_y);
|
||||||
|
draw_line(p, _center_y, _x, r);
|
||||||
|
draw_line(_x, r, _x, _y + _h);
|
||||||
|
} else
|
||||||
draw_line(_x, _y + _h, _x, _y);
|
draw_line(_x, _y + _h, _x, _y);
|
||||||
|
|
||||||
|
if (option_right()) {
|
||||||
|
p = _x + _w + _marker_offset;
|
||||||
|
draw_line(_x + _w, _y, _x + _w, l);
|
||||||
|
draw_line(_x + _w, l, p, _center_y);
|
||||||
|
draw_line(p, _center_y, _x + _w, r);
|
||||||
|
draw_line(_x + _w, r, _x + _w, _y + _h);
|
||||||
|
} else
|
||||||
|
draw_line(_x + _w, _y, _x + _w, _y + _h);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int BUFSIZE = 256;
|
const int BUFSIZE = 256;
|
||||||
|
|
Loading…
Reference in a new issue