1
0
Fork 0
flightgear/src/Cockpit/hud_lon.cxx

153 lines
4.5 KiB
C++
Raw Normal View History

1999-05-12 02:11:43 +00:00
#include "hud.hxx"
2000-02-15 03:30:01 +00:00
1999-05-12 02:11:43 +00:00
#ifdef USE_HUD_TextList
#define textString( x , y, text, font ) TextString( text, x , y )
#else
#define textString( x , y, text, font ) puDrawString ( guiFnt, text, x, y );
1999-05-12 02:11:43 +00:00
#endif
//======================= Top of instr_label class =========================
lon_label ::
lon_label( int x,
int y,
UINT width,
UINT height,
FLTFNPTR data_source,
// DBLFNPTR data_source,
1999-05-12 02:11:43 +00:00
const char *label_format,
const char *pre_label_string,
const char *post_label_string,
float scale_data,
// double scale_data,
1999-05-12 02:11:43 +00:00
UINT options,
fgLabelJust justification,
int font_size,
int blinking,
bool working ):
instr_item( x, y, width, height,
data_source, scale_data,options, working ),
pformat ( label_format ),
pre_str ( pre_label_string ),
post_str ( post_label_string ),
justify ( justification ),
fontSize ( font_size ),
blink ( blinking )
{
if( pre_str != NULL) {
if( post_str != NULL ) {
sprintf( format_buffer, "%s%s%s", pre_str, pformat, post_str );
}
else {
sprintf( format_buffer, "%s%s", pre_str, pformat );
}
}
else {
if( post_str != NULL ) {
sprintf( format_buffer, "%s%s", pformat, post_str );
}
} // else do nothing if both pre and post strings are nulls. Interesting.
}
// I put this in to make it easy to construct a class member using the current
// C code.
lon_label :: ~lon_label()
{
}
// Copy constructor
lon_label :: lon_label( const lon_label & image) :
instr_item((const instr_item &)image),
pformat ( image.pformat ),
pre_str ( image.pre_str ),
post_str ( image.post_str ),
blink ( image.blink )
{
if( pre_str != NULL) {
if( post_str != NULL ) {
sprintf( format_buffer, "%s%s%s", pre_str, pformat, post_str );
}
else {
sprintf( format_buffer, "%s%s", pre_str, pformat );
}
}
else {
if( post_str != NULL ) {
sprintf( format_buffer, "%s%s", pformat, post_str );
}
} // else do nothing if both pre and post strings are nulls. Interesting.
}
lon_label & lon_label ::operator = (const lon_label & rhs )
{
if( !(this == &rhs)) {
instr_item::operator = (rhs);
pformat = rhs.pformat;
fontSize = rhs.fontSize;
blink = rhs.blink;
justify = rhs.justify;
pre_str = rhs.pre_str;
post_str = rhs.post_str;
strcpy(format_buffer,rhs.format_buffer);
1999-05-12 02:11:43 +00:00
}
return *this;
1999-05-12 02:11:43 +00:00
}
//
// draw Draws a label anywhere in the HUD
//
//
void lon_label ::
draw( void ) // Required method in base class
{
// char format_buffer[80];
char label_buffer[80];
int posincr;
int lenstr;
RECT scrn_rect = get_location();
float lon = get_value();
// double lon = get_value();
if( data_available() ) {
// char *lonstring = coord_format_lon(lon);
1999-05-12 02:11:43 +00:00
lenstr = sprintf( label_buffer, format_buffer, coord_format_lon(lon) );
}
else {
lenstr = sprintf( label_buffer, format_buffer );
}
#ifdef DEBUGHUD
fgPrintf( FG_COCKPIT, FG_DEBUG, format_buffer );
fgPrintf( FG_COCKPIT, FG_DEBUG, "\n" );
fgPrintf( FG_COCKPIT, FG_DEBUG, label_buffer );
fgPrintf( FG_COCKPIT, FG_DEBUG, "\n" );
1999-05-12 02:11:43 +00:00
#endif
lenstr = getStringWidth(label_buffer);
if( justify == RIGHT_JUST ) {
posincr = scrn_rect.right - lenstr;
}else if( justify == CENTER_JUST ) {
2000-05-13 00:02:43 +00:00
posincr = get_span() - (lenstr/2);
} else {
// justify == LEFT_JUST
2000-05-13 00:02:43 +00:00
posincr = 0;
}
1999-05-12 02:11:43 +00:00
if( fontSize == SMALL ) {
textString( scrn_rect.left + posincr, scrn_rect.top,
label_buffer, GLUT_BITMAP_8_BY_13);
}
else {
if( fontSize == LARGE ) {
textString( scrn_rect.left + posincr, scrn_rect.top,
label_buffer, GLUT_BITMAP_9_BY_15);
}
}
}