Update of /cvsroot/netrek/client/netrekxp/src In directory sc8-pr-cvs16:/tmp/cvs-serv3629/src Modified Files: dashboard.c Log Message: Fix COW and KRP dashboards to work with different size fonts. Index: dashboard.c =================================================================== RCS file: /cvsroot/netrek/client/netrekxp/src/dashboard.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- dashboard.c 13 Apr 2007 09:10:16 -0000 1.21 +++ dashboard.c 13 Apr 2007 11:07:29 -0000 1.22 @@ -36,10 +36,34 @@ #define DB_3DIGITS 0 #define DB_5DIGITS 1 -#define BAR_LENGTH 56 - #define SPACING 4 +/* COW/KRP dashboard width spacing is as follows: + +1/3 blank char, 14 text chars for flags/dash message/clock, 2/3 blank char, +11 text chars for shield/speed/hull labels, BAR_LENGTH for shield/speed/hull bars, +1 blank char, 11 text chars for army/wtemp/etemp labels, BAR_LENGTH for army/ +wtemp/etemp bars, 1 blank char, 15 text chars for fuel label, BAR_LENGTH for fuel +bar. For the normal text width (6 pixels) this works out to a dashboard width of: + +(1/3)*6 + 14*6 + (2/3)*6 + 11*6 + (9 1/3)*6 + 1*6 + 11*6 + (9 1/3)*6 + + 1*6 + 15*6 + (9 1/3)*6 = 482 pixels + +To be safe, dash width should be defined as at least 82 chars wide, which it is +in DashMaxWidth(). + +Height spacing is as follows: +3 blank pixels, first line of text, 4 blank pixels (SPACING), second line of text, 4 +blank pixels (SPACING), 3rd line of text. For the normal text height (10 pixels) +this works out to a dashboard height of: + +3 + 1*10 + 4 + 1*10 + 4 + 1*10 = 41 pixels + +To be safe, dash height should be defined as 4 times text height, which it is +in newwin(). + +*/ + /* code to draw and erase packet lights 2/5/94 [BDyess] */ #define SENDX 7 @@ -103,7 +127,10 @@ int DashMaxWidth(void) { - return MAX(TWINSIDE + (2 * THICKBORDER - 2 * BORDER), 50 + 75 * W_Textwidth); + /* Text dashboard uses slightly less space due to having a larger fixed + entry spacing of 50 pixels, but we handle the largest case here, which + is the COW/KRP dashboards */ + return MAX(TWINSIDE + (2 * THICKBORDER - 2 * BORDER), 83 * W_Textwidth); } /******************************************************************************/ @@ -246,6 +273,8 @@ int f, int color) { + /* Was 56, too bad it wasn't defined as an even multiple of text width. */ + register int BAR_LENGTH = W_Textwidth/3 + 9 * W_Textwidth; int border = W_White; if (color == W_Red) @@ -261,7 +290,8 @@ break; case DB_LINE: W_MakeLine (tstatw, x + w, y, x + w, y + h, border); - W_MakeLine (tstatw, x + w, y + 4, x + BAR_LENGTH, y + 4, border); + W_MakeLine (tstatw, x + w, y + 2 * W_Textheight / 3, + x + BAR_LENGTH, y + 2 * W_Textheight / 3, border); break; case DB_NOFILL: W_MakeLine (tstatw, x, y, x + w, y, border); @@ -288,6 +318,8 @@ register int wt, wv; register int tc = 11; register int tw = W_Textwidth * tc; + /* Was 56, too bad it wasn't defined as an even multiple of text width. */ + register int BAR_LENGTH = W_Textwidth/3 + 9 * W_Textwidth; int sign_change = 0; char valstr[32]; @@ -310,7 +342,7 @@ valstr[6] = '/'; itoapad (tmpmax, &(valstr[7]), 0, 3); valstr[10] = ']'; - W_ClearArea (tstatw, x, y, tw + BAR_LENGTH, 10); + W_ClearArea (tstatw, x, y, tw + BAR_LENGTH, W_Textheight); break; case DB_5DIGITS: tc = 15; @@ -322,7 +354,7 @@ valstr[8] = '/'; itoapad (tmpmax, &(valstr[9]), 0, 5); valstr[14] = ']'; - W_ClearArea (tstatw, x, y, tw + BAR_LENGTH, 10); + W_ClearArea (tstatw, x, y, tw + BAR_LENGTH, W_Textheight); break; } @@ -339,12 +371,12 @@ W_WriteText (tstatw, x + (tc / 2 + 1) * W_Textwidth, y, textColor, (&valstr[tc / 2 + 1]), tc / 2, W_RegularFont); - db_box (x + tw, y, BAR_LENGTH, 9, DB_NOFILL, color); + db_box (x + tw, y, BAR_LENGTH, W_Textheight - 1, DB_NOFILL, color); if (wt >= wv && wt > 0) - db_box (x + tw, y, wt, 9, DB_LINE, color); + db_box (x + tw, y, wt, W_Textheight - 1, DB_LINE, color); if (wv > 0) - db_box (x + tw, y, wv, 9, DB_FILL, color); + db_box (x + tw, y, wv, W_Textheight - 1, DB_FILL, color); } /******************************************************************************/ @@ -494,6 +526,7 @@ static int old_torp = -1; static unsigned int old_flags = (unsigned int) -1; static int old_tourn = 0; + register int BAR_LENGTH = W_Textwidth/3 + 9 * W_Textwidth; char buf[16]; struct player *plr; @@ -534,12 +567,12 @@ buf[11] = 'd'; else buf[11] = ' '; - + if (me->p_flags & (PFWEP | PFENG)) - W_WriteText (tstatw, 2, 3, W_Red, "Flags", 5, W_RegularFont); + W_WriteText (tstatw, W_Textwidth/3, 3, W_Red, "Flags", 5, W_RegularFont); else - W_WriteText (tstatw, 2, 3, textColor, "Flags", 5, W_RegularFont); - W_WriteText (tstatw, 2, 17, textColor, buf, 12, W_RegularFont); + W_WriteText (tstatw, W_Textwidth/3, 3, textColor, "Flags", 5, W_RegularFont); + W_WriteText (tstatw, W_Textwidth/3, 3 + W_Textheight + SPACING, textColor, buf, 12, W_RegularFont); old_flags = me->p_flags; #ifdef SOUND if (ingame && oldengflag != (me->p_flags & PFENG)) @@ -552,19 +585,19 @@ oldengflag = (me->p_flags & PFENG); #endif } - + if (fr || status->tourn != old_tourn) { if (status->tourn) { - W_WriteText (tstatw, 74, 17, textColor, "T", 1, W_BoldFont); + W_WriteText (tstatw, W_Textwidth/3 + 12 * W_Textwidth, 3 + W_Textheight + SPACING, textColor, "T", 1, W_BoldFont); tdelay = 0; } else { if (status->tourn != old_tourn && !tdelay) tdelay = time (0) + TOURNEXTENDTIME; - W_WriteText (tstatw, 74, 17, textColor, " ", 1, W_BoldFont); + W_WriteText (tstatw, W_Textwidth/3 + 12 * W_Textwidth, 3 + W_Textheight + SPACING, textColor, " ", 1, W_BoldFont); } old_tourn = status->tourn; } @@ -573,15 +606,16 @@ { if (plr->p_kills > 0.0) { - W_WriteText (tstatw, 346, 17, textColor, "Kills:", 6, + W_WriteText (tstatw, 173 * W_Textwidth / 3, 3 + W_Textheight + SPACING, textColor, "Kills:", 6, W_RegularFont); ftoa (plr->p_kills, buf, 0, 3, 2); - W_WriteText (tstatw, 386, 17, textColor, buf, strlen (buf), - W_RegularFont); + W_WriteText (tstatw, 173 * W_Textwidth / 3 + 6 * W_Textwidth + 2 * W_Textwidth / 3, + 3 + W_Textheight + SPACING, textColor, buf, strlen (buf), W_RegularFont); } else { - W_ClearArea (tstatw, 346, 17, 96, 10); + W_ClearArea (tstatw, 173 * W_Textwidth / 3, 3 + W_Textheight + SPACING, + 12 * W_Textwidth + 2 * W_Textwidth / 3, W_Textheight); } old_kills = plr->p_kills; } @@ -590,14 +624,16 @@ { if (plr->p_ntorp > 0) { - W_WriteText (tstatw, 346, 30, textColor, "Torps:", 6, + W_WriteText (tstatw, 173 * W_Textwidth / 3, 3 + 2 * (W_Textheight + SPACING), textColor, "Torps:", 6, W_RegularFont); buf[0] = (char) (plr->p_ntorp % 10 + '0'); - W_WriteText (tstatw, 386, 30, textColor, buf, 1, W_RegularFont); + W_WriteText (tstatw, 173 * W_Textwidth / 3 + 6 * W_Textwidth + 2 * W_Textwidth / 3, + 3 + 2 * (W_Textheight + SPACING), textColor, buf, 1, W_RegularFont); } else { - W_ClearArea (tstatw, 346, 30, 96, 10); + W_ClearArea (tstatw, 173 * W_Textwidth / 3, 3 + 2 * (W_Textheight + SPACING), + 8 * W_Textwidth + 2 * W_Textwidth / 3, W_Textheight); } old_torp = plr->p_ntorp; } @@ -629,10 +665,10 @@ W_ClearWindow (tstatw); db_flags (fr); - db_special (fr, 38, 3); + db_special (fr, W_Textwidth/3 + 6 * W_Textwidth, 3); /* TIMER */ - db_timer (fr, 2, 3 + 2 * (W_Textheight + SPACING)); + db_timer (fr, W_Textwidth/3, 3 + 2 * (W_Textheight + SPACING)); light_erase(); @@ -653,7 +689,7 @@ color = W_Red; else color = W_Green; - db_bar ("Sp", 90, 3, + db_bar ("Sp", 15 * W_Textwidth, 3, me->p_speed, cur_max, me->p_ship.s_maxspeed, DB_3DIGITS, color); old_spd = me->p_speed; @@ -670,11 +706,11 @@ else color = W_Green; if (me->p_ship.s_type == ATT) - db_bar ("Sh", 90, 17, + db_bar ("Sh", 15 * W_Textwidth, 3 + W_Textheight + SPACING, me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_5DIGITS, color); else - db_bar ("Sh", 90, 17, + db_bar ("Sh", 15 * W_Textwidth, 3 + W_Textheight + SPACING, me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_3DIGITS, color); old_shl = me->p_shield; @@ -692,12 +728,12 @@ else color = W_Green; if (me->p_ship.s_type == ATT) - db_bar ("Hu", 90, 31, + db_bar ("Hu", 15 * W_Textwidth, 3 + 2 * (W_Textheight + SPACING), (me->p_ship.s_maxdamage - me->p_damage), me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_5DIGITS, color); else - db_bar ("Hu", 90, 31, + db_bar ("Hu", 15 * W_Textwidth, 3 + 2 * (W_Textheight + SPACING), (me->p_ship.s_maxdamage - me->p_damage), me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_3DIGITS, color); @@ -722,7 +758,7 @@ else color = W_Red; - db_bar ("Ar", 218, 3, + db_bar ("Ar", 109 * W_Textwidth / 3, 3, me->p_armies, cur_max, me->p_ship.s_maxarmies, DB_3DIGITS, color); old_arm = me->p_armies; @@ -740,7 +776,7 @@ else color = W_Red; if (me->p_ship.s_type != ATT) - db_bar ("Wt", 218, 17, + db_bar ("Wt", 109 * W_Textwidth / 3, 3 + W_Textheight + SPACING, me->p_wtemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, DB_3DIGITS, color); old_wpn = me->p_wtemp; @@ -756,7 +792,7 @@ else color = W_Red; if (me->p_ship.s_type != ATT) - db_bar ("Et", 218, 31, + db_bar ("Et", 109 * W_Textwidth / 3, 3 + 2 * (W_Textheight + SPACING), me->p_etemp / 10, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, DB_3DIGITS, color); old_egn = me->p_etemp; @@ -771,7 +807,7 @@ color = W_Yellow; else color = W_Green; - db_bar ("Fu", 346, 3, + db_bar ("Fu", 173 * W_Textwidth / 3, 3, me->p_fuel, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, DB_5DIGITS, color); old_ful = me->p_fuel; @@ -804,9 +840,10 @@ W_ClearWindow (tstatw); db_flags (fr); - db_special (fr, 38, 3); + db_special (fr, W_Textwidth/3 + 6 * W_Textwidth, 3); - db_timer (fr, 2, 3 + 2 * (W_Textheight + SPACING)); + /* TIMER */ + db_timer (fr, W_Textwidth/3, 3 + 2 * (W_Textheight + SPACING)); light_erase(); @@ -827,7 +864,7 @@ color = W_Yellow; else color = W_White; - db_bar ("Sp", 90, 3, + db_bar ("Sp", 15 * W_Textwidth, 3, me->p_speed, cur_max, me->p_ship.s_maxspeed, DB_3DIGITS, color); old_spd = me->p_speed; @@ -844,11 +881,11 @@ else color = W_White; if (me->p_ship.s_type == ATT) - db_bar ("Sh", 90, 17, + db_bar ("Sh", 15 * W_Textwidth, 3 + W_Textheight + SPACING, me->p_ship.s_maxshield - me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_5DIGITS, color); else - db_bar ("Sh", 90, 17, + db_bar ("Sh", 15 * W_Textwidth, 3 + W_Textheight + SPACING, me->p_ship.s_maxshield - me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_3DIGITS, color); old_shl = me->p_shield; @@ -864,11 +901,11 @@ else color = W_Yellow; if (me->p_ship.s_type == ATT) - db_bar ("Da", 90, 31, + db_bar ("Da", 15 * W_Textwidth, 3 + 2 * (W_Textheight + SPACING), me->p_damage, me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_5DIGITS, color); else - db_bar ("Da", 90, 31, + db_bar ("Da", 15 * W_Textwidth, 3 + 2 * (W_Textheight + SPACING), me->p_damage, me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_3DIGITS, color); old_dam = me->p_damage; @@ -893,7 +930,7 @@ color = W_Red; else color = W_Yellow; - db_bar ("Ar", 218, 3, + db_bar ("Ar", 109 * W_Textwidth / 3, 3, me->p_armies, cur_max, me->p_ship.s_maxarmies, DB_3DIGITS, color); old_arm = me->p_armies; @@ -911,7 +948,7 @@ else color = W_Yellow; if (me->p_ship.s_type != ATT) - db_bar ("Wt", 218, 17, + db_bar ("Wt", 109 * W_Textwidth / 3, 3 + W_Textheight + SPACING, me->p_wtemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, DB_3DIGITS, color); old_wpn = me->p_wtemp; @@ -928,7 +965,7 @@ else color = W_Red; if (me->p_ship.s_type != ATT) - db_bar ("Et", 218, 31, + db_bar ("Et", 109 * W_Textwidth / 3, 3 + 2 * (W_Textheight + SPACING), me->p_etemp / 10, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, DB_3DIGITS, color); old_egn = me->p_etemp; @@ -944,7 +981,7 @@ color = W_White; else color = W_Yellow; - db_bar ("Fu", 346, 3, + db_bar ("Fu", 173 * W_Textwidth / 3, 3, me->p_fuel, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, DB_5DIGITS, color); old_ful = me->p_fuel;