#include "hud.hxx" #ifdef USE_HUD_TextList #define textString( x , y, text, font,digit ) TextString( text, x , y,digit ) //suma #else #define textString( x , y, text, font,digit ) puDrawString ( guiFnt, text, x, y ); //suma #endif //======================= Top of instr_label class ========================= lon_label :: lon_label( int x, int y, UINT width, UINT height, FLTFNPTR data_source, // DBLFNPTR data_source, const char *label_format, const char *pre_label_string, const char *post_label_string, float scale_data, // double scale_data, UINT options, fgLabelJust justification, int font_size, int blinking, bool working, int digit): //suma instr_item( x, y, width, height, data_source, scale_data,options, working,digit ), //suma 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); } return *this; } // // 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); lenstr = sprintf( label_buffer, format_buffer, coord_format_lon(lon) ); } else { lenstr = sprintf( label_buffer, format_buffer ); } #ifdef DEBUGHUD fgPrintf( SG_COCKPIT, SG_DEBUG, format_buffer ); fgPrintf( SG_COCKPIT, SG_DEBUG, "\n" ); fgPrintf( SG_COCKPIT, SG_DEBUG, label_buffer ); fgPrintf( SG_COCKPIT, SG_DEBUG, "\n" ); #endif lenstr = getStringWidth(label_buffer); if( justify == RIGHT_JUST ) { posincr = scrn_rect.right - lenstr; }else if( justify == CENTER_JUST ) { posincr = get_span() - (lenstr/2); } else { // justify == LEFT_JUST posincr = 0; } if( fontSize == SMALL ) { textString( scrn_rect.left + posincr, scrn_rect.top, label_buffer, GLUT_BITMAP_8_BY_13, get_digits()); //suma } else { if( fontSize == LARGE ) { textString( scrn_rect.left + posincr, scrn_rect.top, label_buffer, GLUT_BITMAP_9_BY_15, get_digits()); //suma } } }