From d3bdd4b8ccc9acde24d50caa44397acc1615a349 Mon Sep 17 00:00:00 2001 From: obligaron Date: Sat, 25 Nov 2023 09:23:55 +0100 Subject: [PATCH] Change DiabloUI list callbacks indexes from int to size_t --- Source/DiabloUI/diabloui.cpp | 6 +++--- Source/DiabloUI/diabloui.h | 2 +- Source/DiabloUI/hero/selhero.cpp | 33 +++++++++++++++---------------- Source/DiabloUI/mainmenu.cpp | 2 +- Source/DiabloUI/multi/selconn.cpp | 8 ++++---- Source/DiabloUI/multi/selgame.cpp | 29 +++++++++++++-------------- Source/DiabloUI/multi/selgame.h | 16 +++++++-------- Source/DiabloUI/selok.cpp | 2 +- Source/DiabloUI/selstart.cpp | 2 +- Source/DiabloUI/selyesno.cpp | 2 +- Source/DiabloUI/settingsmenu.cpp | 11 +++++------ 11 files changed, 55 insertions(+), 58 deletions(-) diff --git a/Source/DiabloUI/diabloui.cpp b/Source/DiabloUI/diabloui.cpp index 60537d32e..e44459969 100644 --- a/Source/DiabloUI/diabloui.cpp +++ b/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> &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> &items, bool itemsWraps, void (*fnFullscreen)(), bool (*fnYesNo)(), size_t selectedItem /*= 0*/) { SelectedItem = selectedItem; SelectedItemMax = 0; diff --git a/Source/DiabloUI/diabloui.h b/Source/DiabloUI/diabloui.h index 5d597fc1b..a14ef3a74 100644 --- a/Source/DiabloUI/diabloui.h +++ b/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> &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> &items, bool wraps = false, void (*fnFullscreen)() = nullptr, bool (*fnYesNo)() = nullptr, size_t selectedItem = 0); void UiRenderListItems(); void UiInitList_clear(); diff --git a/Source/DiabloUI/hero/selhero.cpp b/Source/DiabloUI/hero/selhero.cpp index 3e667b5fe..e64e56924 100644 --- a/Source/DiabloUI/hero/selhero.cpp +++ b/Source/DiabloUI/hero/selhero.cpp @@ -48,15 +48,15 @@ std::vector> 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(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(vecSelHeroDlgItems[value]->m_value); @@ -260,7 +259,7 @@ void AddSelHeroBackground() std::make_unique((*ArtBackground)[0], MakeSdlRect(0, GetUIRectangle().position.y, 0, 0), UiFlags::AlignCenter)); } -void SelheroClassSelectorSelect(int value) +void SelheroClassSelectorSelect(size_t value) { auto hClass = static_cast(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; diff --git a/Source/DiabloUI/mainmenu.cpp b/Source/DiabloUI/mainmenu.cpp index 2bcdf0f2c..f25920386 100644 --- a/Source/DiabloUI/mainmenu.cpp +++ b/Source/DiabloUI/mainmenu.cpp @@ -16,7 +16,7 @@ std::vector> vecMenuItems; _mainmenu_selections MainMenuResult; -void UiMainMenuSelect(int value) +void UiMainMenuSelect(size_t value) { MainMenuResult = (_mainmenu_selections)vecMenuItems[value]->m_value; } diff --git a/Source/DiabloUI/multi/selconn.cpp b/Source/DiabloUI/multi/selconn.cpp index 9c4a6253c..460f7fc3a 100644 --- a/Source/DiabloUI/multi/selconn.cpp +++ b/Source/DiabloUI/multi/selconn.cpp @@ -30,8 +30,8 @@ std::vector> 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; diff --git a/Source/DiabloUI/multi/selgame.cpp b/Source/DiabloUI/multi/selgame.cpp index 747301a7f..eff484ae6 100644 --- a/Source/DiabloUI/multi/selgame.cpp +++ b/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> vecSelGameDlgItems; std::vector> vecSelGameDialog; std::vector 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(_("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(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) diff --git a/Source/DiabloUI/multi/selgame.h b/Source/DiabloUI/multi/selgame.h index 17d2ecff0..3dece8661 100644 --- a/Source/DiabloUI/multi/selgame.h +++ b/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 diff --git a/Source/DiabloUI/selok.cpp b/Source/DiabloUI/selok.cpp index 131722b8d..81f63989a 100644 --- a/Source/DiabloUI/selok.cpp +++ b/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; } diff --git a/Source/DiabloUI/selstart.cpp b/Source/DiabloUI/selstart.cpp index 950097e13..89e5e2220 100644 --- a/Source/DiabloUI/selstart.cpp +++ b/Source/DiabloUI/selstart.cpp @@ -15,7 +15,7 @@ bool endMenu; std::vector> vecDialogItems; std::vector> vecDialog; -void ItemSelected(int value) +void ItemSelected(size_t value) { auto option = static_cast(vecDialogItems[value]->m_value); sgOptions.StartUp.gameMode.SetValue(option); diff --git a/Source/DiabloUI/selyesno.cpp b/Source/DiabloUI/selyesno.cpp index 7ff62982b..53fc9ebb8 100644 --- a/Source/DiabloUI/selyesno.cpp +++ b/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; diff --git a/Source/DiabloUI/settingsmenu.cpp b/Source/DiabloUI/settingsmenu.cpp index 14cfb3c8c..cedf19e74 100644 --- a/Source/DiabloUI/settingsmenu.cpp +++ b/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(value); - auto &vecItem = vecDialogItems[index]; + auto &vecItem = vecDialogItems[value]; int vecItemValue = vecItem->m_value; if (vecItemValue < 0) { auto specialMenuEntry = static_cast(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(); } } }