From f91a26f0456e144baff98bef78762a4dc6b2f063 Mon Sep 17 00:00:00 2001 From: curt <curt> Date: Wed, 12 May 1999 02:11:43 +0000 Subject: [PATCH] Initial revision. --- Simulator/Cockpit/hud_lat.cxx | 168 ++++++++++++++++++++++++++++++++++ Simulator/Cockpit/hud_lon.cxx | 167 +++++++++++++++++++++++++++++++++ 2 files changed, 335 insertions(+) create mode 100644 Simulator/Cockpit/hud_lat.cxx create mode 100644 Simulator/Cockpit/hud_lon.cxx diff --git a/Simulator/Cockpit/hud_lat.cxx b/Simulator/Cockpit/hud_lat.cxx new file mode 100644 index 000000000..5ee014b51 --- /dev/null +++ b/Simulator/Cockpit/hud_lat.cxx @@ -0,0 +1,168 @@ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef HAVE_WINDOWS_H +# include <windows.h> +#endif +#include <stdlib.h> +#include <string.h> +#include <Aircraft/aircraft.hxx> +#include <GUI/gui.h> +#include <Include/fg_constants.h> +#include <Math/fg_random.h> +#include <Math/mat3.h> +#include <Math/polar3d.hxx> +#include <Scenery/scenery.hxx> +#include <Time/fg_timer.hxx> + +#include "hud.hxx" + + +#ifdef USE_HUD_TextList +#define textString( x , y, text, font ) TextString( font, text, x , y ) +#endif + +//======================= Top of instr_label class ========================= +lat_label :: + lat_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 ): + 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. + + +lat_label :: ~lat_label() +{ +} + +// Copy constructor +lat_label :: lat_label( const lat_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. + +} + +lat_label & lat_label ::operator = (const lat_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 lat_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 lat = get_value(); +// double lat = get_value(); + + if( data_available() ) { +// char *latstring = coord_format_lat(lat); + lenstr = sprintf( label_buffer, format_buffer, coord_format_lat(lat) ); + } + 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" ); +#endif +// lenstr = strlen( label_buffer ); + + posincr = 0; // default to RIGHT_JUST ... center located calc: -lenstr*8; + + if( justify == CENTER_JUST ) { + posincr = - (lenstr << 2); // -lenstr*4; + } + else { + if( justify == LEFT_JUST ) { + posincr = - (lenstr << 8); // 0; + } + } + 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); + } + } +} + diff --git a/Simulator/Cockpit/hud_lon.cxx b/Simulator/Cockpit/hud_lon.cxx new file mode 100644 index 000000000..9ac38eab0 --- /dev/null +++ b/Simulator/Cockpit/hud_lon.cxx @@ -0,0 +1,167 @@ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef HAVE_WINDOWS_H +# include <windows.h> +#endif +#include <stdlib.h> +#include <string.h> +#include <Aircraft/aircraft.hxx> +#include <GUI/gui.h> +#include <Include/fg_constants.h> +#include <Math/fg_random.h> +#include <Math/mat3.h> +#include <Math/polar3d.hxx> +#include <Scenery/scenery.hxx> +#include <Time/fg_timer.hxx> + + +#include "hud.hxx" + +#ifdef USE_HUD_TextList +#define textString( x , y, text, font ) TextString( font, text, x , y ) +#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 ): + 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); + } + 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( 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" ); +#endif +// lenstr = strlen( label_buffer ); + + posincr = 0; // default to RIGHT_JUST ... center located calc: -lenstr*8; + + if( justify == CENTER_JUST ) { + posincr = - (lenstr << 2); // -lenstr*4; + } + else { + if( justify == LEFT_JUST ) { + posincr = - (lenstr << 8); // 0; + } + } + 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); + } + } +} +