1
0
Fork 0

- fix more cases of scale tick aliasing to get smooth scale movements

- remove trailing spaces, fix indentation, unify coding style, ...
This commit is contained in:
mfranz 2006-06-12 23:27:55 +00:00
parent 365546444c
commit b674037a3c
2 changed files with 948 additions and 944 deletions

File diff suppressed because it is too large Load diff

View file

@ -3,15 +3,15 @@
#ifdef USE_HUD_TextList #ifdef USE_HUD_TextList
#define textString( x , y, text, digit ) TextString( text, x , y,digit ) //suma #define textString( x , y, text, digit ) TextString( text, x , y,digit )
#else #else
#define textString( x , y, text, digit ) puDrawString ( guiFnt, text, x, y ); //suma #define textString( x , y, text, digit ) puDrawString ( guiFnt, text, x, y )
#endif #endif
//============== Top of gauge_instr class member definitions ============== //============== Top of gauge_instr class member definitions ==============
gauge_instr :: gauge_instr::gauge_instr(
gauge_instr( int x, int x,
int y, int y,
UINT width, UINT width,
UINT height, UINT height,
@ -45,13 +45,13 @@ gauge_instr( int x,
// huds_bottom = options & HUDS_BOTTOM; // huds_bottom = options & HUDS_BOTTOM;
} }
gauge_instr ::
~gauge_instr() gauge_instr::~gauge_instr()
{ {
} }
gauge_instr ::
gauge_instr( const gauge_instr & image): gauge_instr::gauge_instr( const gauge_instr & image) :
instr_scale( (instr_scale &) image) instr_scale( (instr_scale &) image)
{ {
// UINT options = get_options(); // UINT options = get_options();
@ -65,25 +65,26 @@ gauge_instr( const gauge_instr & image):
// huds_bottom = options & HUDS_BOTTOM; // huds_bottom = options & HUDS_BOTTOM;
} }
gauge_instr & gauge_instr ::
operator = (const gauge_instr & rhs ) gauge_instr & gauge_instr::operator=(const gauge_instr & rhs)
{ {
if( !(this == &rhs)) { if (!(this == &rhs)) {
instr_scale::operator = (rhs); instr_scale::operator = (rhs);
} }
return *this; return *this;
} }
// As implemented, draw only correctly draws a horizontal or vertical // As implemented, draw only correctly draws a horizontal or vertical
// scale. It should contain a variation that permits clock type displays. // scale. It should contain a variation that permits clock type displays.
// Now is supports "tickless" displays such as control surface indicators. // Now is supports "tickless" displays such as control surface indicators.
// This routine should be worked over before using. Current value would be // This routine should be worked over before using. Current value would be
// fetched and not used if not commented out. Clearly that is intollerable. // fetched and not used if not commented out. Clearly that is intollerable.
void gauge_instr :: draw (void) void gauge_instr::draw (void)
{ {
int marker_xs, marker_xe; float marker_xs, marker_xe;
int marker_ys, marker_ye; float marker_ys, marker_ye;
int text_x, text_y; int text_x, text_y;
int width, height, bottom_4; int width, height, bottom_4;
int lenstr; int lenstr;
@ -103,7 +104,7 @@ void gauge_instr :: draw (void)
bottom_4 = scrn_rect.bottom / 4; bottom_4 = scrn_rect.bottom / 4;
// Draw the basic markings for the scale... // Draw the basic markings for the scale...
if( huds_vert(options) ) { // Vertical scale if ( huds_vert(options) ) { // Vertical scale
drawOneLine( scrn_rect.left, // Bottom tick bar drawOneLine( scrn_rect.left, // Bottom tick bar
scrn_rect.top, scrn_rect.top,
width, width,
@ -117,27 +118,27 @@ void gauge_instr :: draw (void)
marker_xs = scrn_rect.left; marker_xs = scrn_rect.left;
marker_xe = width; marker_xe = width;
if( huds_left(options) ) { // Read left, so line down right side if ( huds_left(options) ) { // Read left, so line down right side
drawOneLine( width, drawOneLine( width,
scrn_rect.top, scrn_rect.top,
width, width,
height); height);
marker_xs = marker_xe - scrn_rect.right / 3; // Adjust tick xs marker_xs = marker_xe - scrn_rect.right / 3.0; // Adjust tick xs
} }
if( huds_right(options) ) { // Read right, so down left sides if ( huds_right(options) ) { // Read right, so down left sides
drawOneLine( scrn_rect.left, drawOneLine( scrn_rect.left,
scrn_rect.top, scrn_rect.top,
scrn_rect.left, scrn_rect.left,
height); height);
marker_xe = scrn_rect.left + scrn_rect.right / 3; // Adjust tick xe marker_xe = scrn_rect.left + scrn_rect.right / 3.0; // Adjust tick xe
} }
// At this point marker x_start and x_end values are transposed. // At this point marker x_start and x_end values are transposed.
// To keep this from confusing things they are now interchanged. // To keep this from confusing things they are now interchanged.
if( huds_both(options) ) { if ( huds_both(options) ) {
marker_ye = marker_xs; marker_ye = marker_xs;
marker_xs = marker_xe; marker_xs = marker_xe;
marker_xe = marker_ye; marker_xe = marker_ye;
@ -146,29 +147,29 @@ void gauge_instr :: draw (void)
// Work through from bottom to top of scale. Calculating where to put // Work through from bottom to top of scale. Calculating where to put
// minor and major ticks. // minor and major ticks.
if( !huds_noticks(options)) { // If not no ticks...:) if ( !huds_noticks(options)) { // If not no ticks...:)
// Calculate x marker offsets // Calculate x marker offsets
int last = (int)vmax + 1; //FloatToInt(vmax)+1; int last = (int)vmax + 1; //FloatToInt(vmax)+1;
i = (int)vmin; //FloatToInt(vmin); i = (int)vmin; //FloatToInt(vmin);
for(; i <last ; i++ ) { for (; i < last; i++) {
// for( i = (int)vmin; i <= (int)vmax; i++ ) { // for ( i = (int)vmin; i <= (int)vmax; i++ ) {
// Calculate the location of this tick // Calculate the location of this tick
marker_ys = scrn_rect.top + FloatToInt((i - vmin) * factor()/* +.5f*/); marker_ys = scrn_rect.top + (i - vmin) * factor()/* +.5f*/;
// We compute marker_ys even though we don't know if we will use // We compute marker_ys even though we don't know if we will use
// either major or minor divisions. Simpler. // either major or minor divisions. Simpler.
if( div_min()) { // Minor tick marks if ( div_min()) { // Minor tick marks
if( !(i%(int)div_min()) ) { if ( !(i%(int)div_min()) ) {
if( huds_left(options) && huds_right(options) ) { if ( huds_left(options) && huds_right(options) ) {
drawOneLine( scrn_rect.left, marker_ys, drawOneLine( scrn_rect.left, marker_ys,
marker_xs - 3, marker_ys ); marker_xs - 3, marker_ys );
drawOneLine( marker_xe + 3, marker_ys, drawOneLine( marker_xe + 3, marker_ys,
width, marker_ys ); width, marker_ys );
} }
else { else {
if( huds_left(options) ) { if ( huds_left(options) ) {
drawOneLine( marker_xs + 3, marker_ys, marker_xe, marker_ys ); drawOneLine( marker_xs + 3, marker_ys, marker_xe, marker_ys );
} }
else { else {
@ -182,9 +183,9 @@ void gauge_instr :: draw (void)
// and no labels are drawn otherwise, we label inside this if // and no labels are drawn otherwise, we label inside this if
// statement. // statement.
if( div_max()) { // Major tick mark if ( div_max()) { // Major tick mark
if( !(i%(int)div_max()) ) { if ( !(i%(int)div_max()) ) {
if( huds_left(options) && huds_right(options) ) { if ( huds_left(options) && huds_right(options) ) {
drawOneLine( scrn_rect.left, marker_ys, drawOneLine( scrn_rect.left, marker_ys,
marker_xs, marker_ys ); marker_xs, marker_ys );
drawOneLine( marker_xe, marker_ys, drawOneLine( marker_xe, marker_ys,
@ -194,27 +195,27 @@ void gauge_instr :: draw (void)
drawOneLine( marker_xs, marker_ys, marker_xe, marker_ys ); drawOneLine( marker_xs, marker_ys, marker_xe, marker_ys );
} }
if( !huds_notext(options) ) { if ( !huds_notext(options) ) {
disp_val = i; disp_val = i;
sprintf( TextScale, "%d", sprintf( TextScale, "%d",
FloatToInt(disp_val * data_scaling()/*+.5*/ )); FloatToInt(disp_val * data_scaling()/*+.5*/ ));
lenstr = getStringWidth( TextScale ); lenstr = getStringWidth( TextScale );
if( huds_left(options) && huds_right(options) ) { if ( huds_left(options) && huds_right(options) ) {
text_x = mid_scr.x - lenstr/2 ; text_x = mid_scr.x - lenstr/2 ;
} }
else { else {
if( huds_left(options) ) { if ( huds_left(options) ) {
text_x = marker_xs - lenstr; text_x = FloatToInt(marker_xs - lenstr);
} }
else { else {
text_x = marker_xe - lenstr; text_x = FloatToInt(marker_xe - lenstr);
} }
} }
// Now we know where to put the text. // Now we know where to put the text.
text_y = marker_ys; text_y = FloatToInt(marker_ys);
textString( text_x, text_y, TextScale, 0 ); //suma textString( text_x, text_y, TextScale, 0 );
} }
} }
} // } //
@ -227,22 +228,23 @@ void gauge_instr :: draw (void)
text_y = scrn_rect.top + FloatToInt((cur_value - vmin) * factor() /*+.5f*/); text_y = scrn_rect.top + FloatToInt((cur_value - vmin) * factor() /*+.5f*/);
// text_x = marker_xs - scrn_rect.left; // text_x = marker_xs - scrn_rect.left;
if( huds_right(options) ) { if ( huds_right(options) ) {
glBegin(GL_LINE_STRIP); glBegin(GL_LINE_STRIP);
glVertex2f( scrn_rect.left, text_y + 5); glVertex2f( scrn_rect.left, text_y + 5);
glVertex2f( marker_xe, text_y); glVertex2f( FloatToInt(marker_xe), text_y);
glVertex2f( scrn_rect.left, text_y - 5); glVertex2f( scrn_rect.left, text_y - 5);
glEnd(); glEnd();
} }
if( huds_left(options) ) { if ( huds_left(options) ) {
glBegin(GL_LINE_STRIP); glBegin(GL_LINE_STRIP);
glVertex2f( width, text_y + 5); glVertex2f( width, text_y + 5);
glVertex2f( marker_xs, text_y); glVertex2f( FloatToInt(marker_xs), text_y);
glVertex2f( width, text_y - 5); glVertex2f( width, text_y - 5);
glEnd(); glEnd();
} }
} // End if VERTICAL SCALE TYPE // End if VERTICAL SCALE TYPE
else { // Horizontal scale by default
} else { // Horizontal scale by default
drawOneLine( scrn_rect.left, // left tick bar drawOneLine( scrn_rect.left, // left tick bar
scrn_rect.top, scrn_rect.top,
scrn_rect.left, scrn_rect.left,
@ -255,15 +257,15 @@ void gauge_instr :: draw (void)
marker_ys = scrn_rect.top; // Starting point for marker_ys = scrn_rect.top; // Starting point for
marker_ye = height; // tick y location calcs marker_ye = height; // tick y location calcs
marker_xs = scrn_rect.left + FloatToInt((cur_value - vmin) * factor() /*+ .5f*/); marker_xs = scrn_rect.left + (cur_value - vmin) * factor() /*+ .5f*/;
if( huds_top(options) ) { if ( huds_top(options) ) {
drawOneLine( scrn_rect.left, drawOneLine( scrn_rect.left,
scrn_rect.top, scrn_rect.top,
width, width,
scrn_rect.top); // Bottom box line scrn_rect.top); // Bottom box line
marker_ye = scrn_rect.top + scrn_rect.bottom / 2; // Tick point adjust marker_ye = scrn_rect.top + scrn_rect.bottom / 2.0; // Tick point adjust
// Bottom arrow // Bottom arrow
glBegin(GL_LINE_STRIP); glBegin(GL_LINE_STRIP);
glVertex2f( marker_xs - bottom_4, scrn_rect.top); glVertex2f( marker_xs - bottom_4, scrn_rect.top);
@ -271,11 +273,11 @@ void gauge_instr :: draw (void)
glVertex2f( marker_xs + bottom_4, scrn_rect.top); glVertex2f( marker_xs + bottom_4, scrn_rect.top);
glEnd(); glEnd();
} }
if( huds_bottom(options) ) { if ( huds_bottom(options) ) {
// Top box line // Top box line
drawOneLine( scrn_rect.left, height, width, height); drawOneLine( scrn_rect.left, height, width, height);
// Tick point adjust // Tick point adjust
marker_ys = height - scrn_rect.bottom / 2; marker_ys = height - scrn_rect.bottom / 2.0;
// Top arrow // Top arrow
glBegin(GL_LINE_STRIP); glBegin(GL_LINE_STRIP);
@ -288,30 +290,30 @@ void gauge_instr :: draw (void)
int last = (int)vmax + 1; //FloatToInt(vmax)+1; int last = (int)vmax + 1; //FloatToInt(vmax)+1;
i = (int)vmin; //FloatToInt(vmin); i = (int)vmin; //FloatToInt(vmin);
for( ; i <last ; i++ ) { for ( ; i <last ; i++ ) {
condition = true; condition = true;
if( !modulo()) { if ( !modulo()) {
if( i < min_val()) { if ( i < min_val()) {
condition = false; condition = false;
} }
} }
if( condition ) { if ( condition ) {
marker_xs = scrn_rect.left + FloatToInt((i - vmin) * factor()/* +.5f*/); marker_xs = scrn_rect.left + (i - vmin) * factor()/* +.5f*/;
// marker_xs = scrn_rect.left + (int)((i - vmin) * factor() + .5f); // marker_xs = scrn_rect.left + (int)((i - vmin) * factor() + .5f);
if( div_min()){ if ( div_min()){
if( !(i%(int)div_min()) ) { if ( !(i%(int)div_min()) ) {
// draw in ticks only if they aren't too close to the edge. // draw in ticks only if they aren't too close to the edge.
if((( marker_xs + 5) > scrn_rect.left ) || if ((( marker_xs + 5) > scrn_rect.left ) ||
(( marker_xs - 5 )< (width))){ (( marker_xs - 5 )< (width))){
if( huds_both(options) ) { if ( huds_both(options) ) {
drawOneLine( marker_xs, scrn_rect.top, drawOneLine( marker_xs, scrn_rect.top,
marker_xs, marker_ys - 4); marker_xs, marker_ys - 4);
drawOneLine( marker_xs, marker_ye + 4, drawOneLine( marker_xs, marker_ye + 4,
marker_xs, height); marker_xs, height);
} }
else { else {
if( huds_top(options) ) { if ( huds_top(options) ) {
drawOneLine( marker_xs, marker_ys, drawOneLine( marker_xs, marker_ys,
marker_xs, marker_ye - 4); marker_xs, marker_ye - 4);
} }
@ -323,10 +325,10 @@ void gauge_instr :: draw (void)
} }
} }
} }
if( div_max()) { if ( div_max()) {
if( !(i%(int)div_max()) ) { if ( !(i%(int)div_max()) ) {
if(modulo()) { if (modulo()) {
if( disp_val < 0) { if ( disp_val < 0) {
while( disp_val < 0 ) { while( disp_val < 0 ) {
disp_val += modulo(); disp_val += modulo();
} }
@ -340,32 +342,32 @@ void gauge_instr :: draw (void)
lenstr = getStringWidth( TextScale); lenstr = getStringWidth( TextScale);
// Draw major ticks and text only if far enough from the edge. // Draw major ticks and text only if far enough from the edge.
if(( (marker_xs - 10)> scrn_rect.left ) && if (( (marker_xs - 10)> scrn_rect.left ) &&
( (marker_xs + 10) < width )){ ( (marker_xs + 10) < width )){
if( huds_both(options) ) { if ( huds_both(options) ) {
drawOneLine( marker_xs, scrn_rect.top, drawOneLine( marker_xs, scrn_rect.top,
marker_xs, marker_ys); marker_xs, marker_ys);
drawOneLine( marker_xs, marker_ye, drawOneLine( marker_xs, marker_ye,
marker_xs, height); marker_xs, height);
if( !huds_notext(options) ) { if ( !huds_notext(options) ) {
textString ( marker_xs - lenstr, marker_ys + 4, textString ( marker_xs - lenstr, marker_ys + 4,
TextScale ,0); //suma TextScale ,0);
} }
} }
else { else {
drawOneLine( marker_xs, marker_ys, drawOneLine( marker_xs, marker_ys,
marker_xs, marker_ye ); marker_xs, marker_ye );
if( !huds_notext(options) ) { if ( !huds_notext(options) ) {
if( huds_top(options) ) { if ( huds_top(options) ) {
textString ( marker_xs - lenstr, textString ( marker_xs - lenstr,
height - 10, height - 10,
TextScale, 0 ); //suma TextScale, 0 );
} }
else { else {
textString( marker_xs - lenstr, scrn_rect.top, textString( marker_xs - lenstr, scrn_rect.top,
TextScale, 0 ); //suma TextScale, 0 );
} }
} }
} }