Fix for scrolling units at higher resolutions

This commit is contained in:
jsalmon3 2003-01-23 05:37:19 +00:00
parent 9cfde21f3e
commit 04db3652c2

View file

@ -319,6 +319,33 @@ local void EditUnit(int x, int y, UnitType* type, Player* player)
EditUnitInternal( mx - x - 1, my - y - 1, type, player );
}
/**
** Calculate the number of unit icons that can be displayed
**
** @return Number of unit icons that can be displayed.
*/
local int CalculateUnitIcons(void)
{
int i;
int x;
int count;
i = 0;
count = 0;
x = TheUI.ButtonPanelY + 24;
while (x < TheUI.ButtonPanelY + TheUI.ButtonPanel.Graphic->Height
- IconHeight) {
++i;
x += IconHeight + 2;
}
x = TheUI.ButtonPanelX + 10;
while( x < TheUI.ButtonPanelX + 146 ) {
count += i;
x += IconWidth + 8;
}
return count;
}
/**
** Recalculate the shown units.
*/
@ -359,7 +386,9 @@ local void RecalculateShownUnits(void)
MaxShownUnits = n;
if( UnitIndex >= MaxShownUnits ) {
UnitIndex = MaxShownUnits / 9 * 9;
int count;
count = CalculateUnitIcons();
UnitIndex = MaxShownUnits / count * count;
}
// Quick & dirty make them invalid
CursorUnitIndex = -1;
@ -1047,9 +1076,11 @@ local void EditorCallbackButtonDown(unsigned button __attribute__ ((unused)))
if (EditorState == EditorEditUnit) {
int percent;
int j;
int count;
percent = UnitIndex * 100 / (MaxShownUnits ? MaxShownUnits : 1);
j = (percent * (176 - 8 - 54)) / 100;
count = CalculateUnitIcons();
// Unit icons scroll left area
if (TheUI.ButtonPanelX + 4 < CursorX
@ -1057,8 +1088,10 @@ local void EditorCallbackButtonDown(unsigned button __attribute__ ((unused)))
&& TheUI.ButtonPanelY + 4 < CursorY
&& CursorY < TheUI.ButtonPanelY + 24) {
if (UnitIndex - 9 >= 0) {
UnitIndex -= 9;
if (UnitIndex - count >= 0) {
UnitIndex -= count;
} else {
UnitIndex = 0;
}
return;
}
@ -1068,8 +1101,8 @@ local void EditorCallbackButtonDown(unsigned button __attribute__ ((unused)))
&& TheUI.ButtonPanelY + 4 < CursorY
&& CursorY < TheUI.ButtonPanelY + 24) {
if (UnitIndex + 9 <= MaxShownUnits) {
UnitIndex += 9;
if (UnitIndex + count <= MaxShownUnits) {
UnitIndex += count;
}
return;
}