diff --git a/Source/DiabloUI/settingsmenu.cpp b/Source/DiabloUI/settingsmenu.cpp index ee8622317..2c033e0a4 100644 --- a/Source/DiabloUI/settingsmenu.cpp +++ b/Source/DiabloUI/settingsmenu.cpp @@ -7,6 +7,7 @@ #include "hwcursor.hpp" #include "options.h" #include "utils/language.h" +#include "utils/utf8.hpp" namespace devilution { namespace { @@ -73,16 +74,24 @@ void GoBackOneMenuLevel() shownMenu = ShownMenuType::Settings; } +void UpdateDescription(const OptionEntryBase &option) +{ + auto paragraphs = WordWrapString(option.GetDescription(), rectDescription.size.width, GameFont12, 1); + CopyUtf8(optionDescription, paragraphs, sizeof(optionDescription)); +} + void ItemFocused(int value) { + if (shownMenu != ShownMenuType::Settings) + return; + auto &vecItem = vecDialogItems[value]; optionDescription[0] = '\0'; if (vecItem->m_value < 0 || shownMenu != ShownMenuType::Settings) { return; } auto *pOption = vecOptions[vecItem->m_value]; - auto paragraphs = WordWrapString(pOption->GetDescription(), rectDescription.size.width, GameFont12, 1); - strncpy(optionDescription, paragraphs.c_str(), sizeof(optionDescription)); + UpdateDescription(*pOption); } bool ChangeOptionValue(OptionEntryBase *pOption, size_t listIndex) @@ -229,6 +238,7 @@ void UiSettingsMenu() vecDialogItems.push_back(std::make_unique(pOptionList->GetListDescription(i).data(), i, UiFlags::ColorUiGold)); } itemToSelect = pOptionList->GetActiveListIndex(); + UpdateDescription(*pOptionList); } break; }