Browse Source

Change DiabloUI list callbacks indexes from int to size_t

pull/6836/head
obligaron 2 years ago committed by Anders Jenbo
parent
commit
d3bdd4b8cc
  1. 6
      Source/DiabloUI/diabloui.cpp
  2. 2
      Source/DiabloUI/diabloui.h
  3. 33
      Source/DiabloUI/hero/selhero.cpp
  4. 2
      Source/DiabloUI/mainmenu.cpp
  5. 8
      Source/DiabloUI/multi/selconn.cpp
  6. 29
      Source/DiabloUI/multi/selgame.cpp
  7. 16
      Source/DiabloUI/multi/selgame.h
  8. 2
      Source/DiabloUI/selok.cpp
  9. 2
      Source/DiabloUI/selstart.cpp
  10. 2
      Source/DiabloUI/selyesno.cpp
  11. 11
      Source/DiabloUI/settingsmenu.cpp

6
Source/DiabloUI/diabloui.cpp

@ -72,8 +72,8 @@ std::size_t SelectedItemMax;
std::size_t ListViewportSize = 1;
std::size_t listOffset = 0;
void (*gfnListFocus)(int value);
void (*gfnListSelect)(int value);
void (*gfnListFocus)(size_t value);
void (*gfnListSelect)(size_t value);
void (*gfnListEsc)();
void (*gfnFullscreen)();
bool (*gfnListYesNo)();
@ -113,7 +113,7 @@ bool IsTextInputActive()
return UiTextInputState.has_value();
}
void UiInitList(void (*fnFocus)(int value), void (*fnSelect)(int value), void (*fnEsc)(), const std::vector<std::unique_ptr<UiItemBase>> &items, bool itemsWraps, void (*fnFullscreen)(), bool (*fnYesNo)(), size_t selectedItem /*= 0*/)
void UiInitList(void (*fnFocus)(size_t value), void (*fnSelect)(size_t value), void (*fnEsc)(), const std::vector<std::unique_ptr<UiItemBase>> &items, bool itemsWraps, void (*fnFullscreen)(), bool (*fnYesNo)(), size_t selectedItem /*= 0*/)
{
SelectedItem = selectedItem;
SelectedItemMax = 0;

2
Source/DiabloUI/diabloui.h

@ -108,7 +108,7 @@ void UiFocusNavigationSelect();
void UiFocusNavigationEsc();
void UiFocusNavigationYesNo();
void UiInitList(void (*fnFocus)(int value), void (*fnSelect)(int value), void (*fnEsc)(), const std::vector<std::unique_ptr<UiItemBase>> &items, bool wraps = false, void (*fnFullscreen)() = nullptr, bool (*fnYesNo)() = nullptr, size_t selectedItem = 0);
void UiInitList(void (*fnFocus)(size_t value), void (*fnSelect)(size_t value), void (*fnEsc)(), const std::vector<std::unique_ptr<UiItemBase>> &items, bool wraps = false, void (*fnFullscreen)() = nullptr, bool (*fnYesNo)() = nullptr, size_t selectedItem = 0);
void UiRenderListItems();
void UiInitList_clear();

33
Source/DiabloUI/hero/selhero.cpp

@ -48,15 +48,15 @@ std::vector<std::unique_ptr<UiItemBase>> vecSelDlgItems;
UiImageClx *SELHERO_DIALOG_HERO_IMG;
void SelheroListFocus(int value);
void SelheroListSelect(int value);
void SelheroListFocus(size_t value);
void SelheroListSelect(size_t value);
void SelheroListEsc();
void SelheroLoadFocus(int value);
void SelheroLoadSelect(int value);
void SelheroNameSelect(int value);
void SelheroLoadFocus(size_t value);
void SelheroLoadSelect(size_t value);
void SelheroNameSelect(size_t value);
void SelheroNameEsc();
void SelheroClassSelectorFocus(int value);
void SelheroClassSelectorSelect(int value);
void SelheroClassSelectorFocus(size_t value);
void SelheroClassSelectorSelect(size_t value);
void SelheroClassSelectorEsc();
const char *SelheroGenerateName(HeroClass heroClass);
@ -118,12 +118,11 @@ bool SelHeroGetHeroInfo(_uiheroinfo *pInfo)
return true;
}
void SelheroListFocus(int value)
void SelheroListFocus(size_t value)
{
const auto index = static_cast<std::size_t>(value);
UiFlags baseFlags = UiFlags::AlignCenter | UiFlags::FontSize30;
if (selhero_SaveCount != 0 && index < selhero_SaveCount) {
memcpy(&selhero_heroInfo, &selhero_heros[index], sizeof(selhero_heroInfo));
if (selhero_SaveCount != 0 && value < selhero_SaveCount) {
memcpy(&selhero_heroInfo, &selhero_heros[value], sizeof(selhero_heroInfo));
SelheroSetStats();
SELLIST_DIALOG_DELETE_BUTTON->SetFlags(baseFlags | UiFlags::ColorUiGold);
selhero_isSavegame = true;
@ -144,7 +143,7 @@ bool SelheroListDeleteYesNo()
return selhero_navigateYesNo;
}
void SelheroListSelect(int value)
void SelheroListSelect(size_t value)
{
const Point uiPosition = GetUIRectangle().position;
@ -221,7 +220,7 @@ void SelheroListEsc()
selhero_result = SELHERO_PREVIOUS;
}
void SelheroClassSelectorFocus(int value)
void SelheroClassSelectorFocus(size_t value)
{
const auto heroClass = static_cast<HeroClass>(vecSelHeroDlgItems[value]->m_value);
@ -260,7 +259,7 @@ void AddSelHeroBackground()
std::make_unique<UiImageClx>((*ArtBackground)[0], MakeSdlRect(0, GetUIRectangle().position.y, 0, 0), UiFlags::AlignCenter));
}
void SelheroClassSelectorSelect(int value)
void SelheroClassSelectorSelect(size_t value)
{
auto hClass = static_cast<HeroClass>(vecSelHeroDlgItems[value]->m_value);
if (gbIsSpawn && (hClass == HeroClass::Rogue || hClass == HeroClass::Sorcerer || (hClass == HeroClass::Bard && !gbBard))) {
@ -306,7 +305,7 @@ void SelheroClassSelectorEsc()
SelheroListEsc();
}
void SelheroNameSelect(int /*value*/)
void SelheroNameSelect(size_t /*value*/)
{
// only check names in multiplayer, we don't care about them in single
if (selhero_isMultiPlayer && !UiValidPlayerName(selhero_heroInfo.name)) {
@ -330,11 +329,11 @@ void SelheroNameEsc()
SelheroListSelect(selhero_SaveCount);
}
void SelheroLoadFocus(int value)
void SelheroLoadFocus(size_t value)
{
}
void SelheroLoadSelect(int value)
void SelheroLoadSelect(size_t value)
{
UiInitList_clear();
selhero_endMenu = true;

2
Source/DiabloUI/mainmenu.cpp

@ -16,7 +16,7 @@ std::vector<std::unique_ptr<UiListItem>> vecMenuItems;
_mainmenu_selections MainMenuResult;
void UiMainMenuSelect(int value)
void UiMainMenuSelect(size_t value)
{
MainMenuResult = (_mainmenu_selections)vecMenuItems[value]->m_value;
}

8
Source/DiabloUI/multi/selconn.cpp

@ -30,8 +30,8 @@ std::vector<std::unique_ptr<UiItemBase>> vecSelConnDlg;
#define DESCRIPTION_WIDTH 205
void SelconnEsc();
void SelconnFocus(int value);
void SelconnSelect(int value);
void SelconnFocus(size_t value);
void SelconnSelect(size_t value);
void SelconnLoad()
{
@ -102,7 +102,7 @@ void SelconnEsc()
selconn_EndMenu = true;
}
void SelconnFocus(int value)
void SelconnFocus(size_t value)
{
int players = MAX_PLRS;
switch (vecConnItems[value]->m_value) {
@ -124,7 +124,7 @@ void SelconnFocus(int value)
CopyUtf8(selconn_Description, WordWrapString(selconn_Description, DESCRIPTION_WIDTH), sizeof(selconn_Description));
}
void SelconnSelect(int value)
void SelconnSelect(size_t value)
{
provider = vecConnItems[value]->m_value;

29
Source/DiabloUI/multi/selgame.cpp

@ -26,7 +26,7 @@ char selgame_Password[16] = "";
char selgame_Description[512];
std::string selgame_Title;
bool selgame_enteringGame;
int selgame_selectedGame;
size_t selgame_selectedGame;
bool selgame_endMenu;
int *gdwPlayerId;
_difficulty nDifficulty;
@ -46,7 +46,7 @@ std::vector<std::unique_ptr<UiListItem>> vecSelGameDlgItems;
std::vector<std::unique_ptr<UiItemBase>> vecSelGameDialog;
std::vector<GameInfo> Gamelist;
uint32_t firstPublicGameInfoRequestSend = 0;
unsigned HighlightedItem;
size_t HighlightedItem;
void selgame_FreeVectors()
{
@ -175,7 +175,7 @@ void UiInitGameSelectionList(std::string_view search)
SDL_Rect rect6 = { (Sint16)(uiPosition.x + 449), (Sint16)(uiPosition.y + 427), 140, 35 };
vecSelGameDialog.push_back(std::make_unique<UiArtTextButton>(_("CANCEL"), &UiFocusNavigationEsc, rect6, UiFlags::AlignCenter | UiFlags::VerticalCenter | UiFlags::FontSize30 | UiFlags::ColorUiGold));
auto selectFn = [](int index) {
auto selectFn = [](size_t index) {
// UiListItem::m_value could be different from
// the index if packet encryption is disabled
int itemValue = vecSelGameDlgItems[index]->m_value;
@ -183,7 +183,7 @@ void UiInitGameSelectionList(std::string_view search)
};
if (!search.empty()) {
for (unsigned i = 0; i < vecSelGameDlgItems.size(); i++) {
for (size_t i = 0; i < vecSelGameDlgItems.size(); i++) {
int gameIndex = vecSelGameDlgItems[i]->m_value - 3;
if (gameIndex < 0)
continue;
@ -206,11 +206,10 @@ void selgame_GameSelection_Init()
UiInitGameSelectionList("");
}
void selgame_GameSelection_Focus(int value)
void selgame_GameSelection_Focus(size_t value)
{
const auto index = static_cast<unsigned>(value);
HighlightedItem = index;
const UiListItem &item = *vecSelGameDlgItems[index];
HighlightedItem = value;
const UiListItem &item = *vecSelGameDlgItems[value];
switch (item.m_value) {
case 0:
CopyUtf8(selgame_Description, _("Create a new game with a difficulty setting of your choice."), sizeof(selgame_Description));
@ -290,7 +289,7 @@ bool UpdateHeroLevel(_uiheroinfo *pInfo)
return true;
}
void selgame_GameSelection_Select(int value)
void selgame_GameSelection_Select(size_t value)
{
selgame_enteringGame = true;
selgame_selectedGame = value;
@ -384,7 +383,7 @@ void selgame_GameSelection_Esc()
selgame_endMenu = true;
}
void selgame_Diff_Focus(int value)
void selgame_Diff_Focus(size_t value)
{
switch (vecSelGameDlgItems[value]->m_value) {
case DIFF_NORMAL:
@ -421,7 +420,7 @@ bool IsDifficultyAllowed(int value)
return false;
}
void selgame_Diff_Select(int value)
void selgame_Diff_Select(size_t value)
{
if (selhero_isMultiPlayer && !IsDifficultyAllowed(vecSelGameDlgItems[value]->m_value)) {
selgame_GameSelection_Select(selgame_selectedGame);
@ -510,7 +509,7 @@ void selgame_GameSpeedSelection()
UiInitList(selgame_Speed_Focus, selgame_Speed_Select, selgame_Speed_Esc, vecSelGameDialog, true);
}
void selgame_Speed_Focus(int value)
void selgame_Speed_Focus(size_t value)
{
switch (vecSelGameDlgItems[value]->m_value) {
case 20:
@ -538,7 +537,7 @@ void selgame_Speed_Esc()
selgame_GameSelection_Select(selgame_selectedGame);
}
void selgame_Speed_Select(int value)
void selgame_Speed_Select(size_t value)
{
nTickRate = vecSelGameDlgItems[value]->m_value;
@ -550,7 +549,7 @@ void selgame_Speed_Select(int value)
selgame_Password_Init(0);
}
void selgame_Password_Init(int /*value*/)
void selgame_Password_Init(size_t /*value*/)
{
memset(&selgame_Password, 0, sizeof(selgame_Password));
@ -602,7 +601,7 @@ static bool IsGameCompatibleWithErrorMessage(const GameData &data)
return false;
}
void selgame_Password_Select(int /*value*/)
void selgame_Password_Select(size_t /*value*/)
{
char *gamePassword = nullptr;
if (selgame_selectedGame == 0)

16
Source/DiabloUI/multi/selgame.h

@ -7,18 +7,18 @@ namespace devilution {
extern _difficulty nDifficulty;
void selgame_GameSelection_Init();
void selgame_GameSelection_Focus(int value);
void selgame_GameSelection_Select(int value);
void selgame_GameSelection_Focus(size_t value);
void selgame_GameSelection_Select(size_t value);
void selgame_GameSelection_Esc();
void selgame_Diff_Focus(int value);
void selgame_Diff_Select(int value);
void selgame_Diff_Focus(size_t value);
void selgame_Diff_Select(size_t value);
void selgame_Diff_Esc();
void selgame_GameSpeedSelection();
void selgame_Speed_Focus(int value);
void selgame_Speed_Select(int value);
void selgame_Speed_Focus(size_t value);
void selgame_Speed_Select(size_t value);
void selgame_Speed_Esc();
void selgame_Password_Init(int value);
void selgame_Password_Select(int value);
void selgame_Password_Init(size_t value);
void selgame_Password_Select(size_t value);
void selgame_Password_Esc();
} // namespace devilution

2
Source/DiabloUI/selok.cpp

@ -30,7 +30,7 @@ void selok_Free()
vecSelOkDialog.clear();
}
void selok_Select(int /*value*/)
void selok_Select(size_t /*value*/)
{
selok_endMenu = true;
}

2
Source/DiabloUI/selstart.cpp

@ -15,7 +15,7 @@ bool endMenu;
std::vector<std::unique_ptr<UiListItem>> vecDialogItems;
std::vector<std::unique_ptr<UiItemBase>> vecDialog;
void ItemSelected(int value)
void ItemSelected(size_t value)
{
auto option = static_cast<StartUpGameMode>(vecDialogItems[value]->m_value);
sgOptions.StartUp.gameMode.SetValue(option);

2
Source/DiabloUI/selyesno.cpp

@ -26,7 +26,7 @@ void SelyesnoFree()
vecSelYesNoDialog.clear();
}
void SelyesnoSelect(int value)
void SelyesnoSelect(size_t value)
{
selyesno_value = vecSelYesNoDialogItems[value]->m_value == 0;
selyesno_endMenu = true;

11
Source/DiabloUI/settingsmenu.cpp

@ -159,7 +159,7 @@ void UpdateDescription(const OptionCategoryBase &category)
CopyUtf8(optionDescription, paragraphs, sizeof(optionDescription));
}
void ItemFocused(int value)
void ItemFocused(size_t value)
{
switch (shownMenu) {
case ShownMenuType::Categories: {
@ -219,10 +219,9 @@ bool ChangeOptionValue(OptionEntryBase *pOption, size_t listIndex)
return true;
}
void ItemSelected(int value)
void ItemSelected(size_t value)
{
const auto index = static_cast<size_t>(value);
auto &vecItem = vecDialogItems[index];
auto &vecItem = vecDialogItems[value];
int vecItemValue = vecItem->m_value;
if (vecItemValue < 0) {
auto specialMenuEntry = static_cast<SpecialMenuEntry>(vecItemValue);
@ -285,7 +284,7 @@ void ItemSelected(int value)
}
if (updateValueDescription) {
auto args = CreateDrawStringFormatArgForEntry(pOption);
bool optionUsesTwoLines = ((index + 1) < vecDialogItems.size() && vecDialogItems[index]->m_value == vecDialogItems[index + 1]->m_value);
bool optionUsesTwoLines = ((value + 1) < vecDialogItems.size() && vecDialogItems[value]->m_value == vecDialogItems[value + 1]->m_value);
if (NeedsTwoLinesToDisplayOption(args) != optionUsesTwoLines) {
selectedOption = pOption;
endMenu = true;
@ -294,7 +293,7 @@ void ItemSelected(int value)
for (auto &arg : args)
vecItem->args.push_back(arg);
if (optionUsesTwoLines) {
vecDialogItems[index + 1]->m_text = pOption->GetValueDescription().data();
vecDialogItems[value + 1]->m_text = pOption->GetValueDescription().data();
}
}
}

Loading…
Cancel
Save