Browse Source

Fix page down/up don't wrap in settingsmenu

pull/3742/head
obligaron 4 years ago committed by Anders Jenbo
parent
commit
467ed9dd9d
  1. 41
      Source/DiabloUI/diabloui.cpp

41
Source/DiabloUI/diabloui.cpp

@ -181,34 +181,37 @@ void UiPlaySelectSound()
namespace { namespace {
void UiFocus(std::size_t itemIndex, bool checkUp) void UiFocus(std::size_t itemIndex, bool checkUp, bool ignoreItemsWraps = false)
{ {
if (SelectedItem == itemIndex) if (SelectedItem == itemIndex)
return; return;
AdjustListOffset(itemIndex); AdjustListOffset(itemIndex);
auto pItem = gUiList->GetItem(itemIndex); const auto *pItem = gUiList->GetItem(itemIndex);
if (HasAnyOf(pItem->uiFlags, UiFlags::ElementHidden | UiFlags::ElementDisabled)) { while (HasAnyOf(pItem->uiFlags, UiFlags::ElementHidden | UiFlags::ElementDisabled)) {
if (checkUp) { if (checkUp) {
if (itemIndex > 0) if (itemIndex > 0)
UiFocus(itemIndex - 1, checkUp); itemIndex -= 1;
else if (UiItemsWraps) else if (UiItemsWraps && !ignoreItemsWraps)
UiFocus(SelectedItemMax, checkUp); itemIndex = SelectedItemMax;
else else
UiFocus(itemIndex, false); checkUp = false;
} else { } else {
if (itemIndex < SelectedItemMax) if (itemIndex < SelectedItemMax)
UiFocus(itemIndex + 1, checkUp); itemIndex += 1;
else if (UiItemsWraps) else if (UiItemsWraps && !ignoreItemsWraps)
UiFocus(0, checkUp); itemIndex = 0;
else else
UiFocus(itemIndex, true); checkUp = true;
} }
return; pItem = gUiList->GetItem(itemIndex);
} }
if (HasAnyOf(pItem->uiFlags, UiFlags::NeedsNextElement)) { if (HasAnyOf(pItem->uiFlags, UiFlags::NeedsNextElement)) {
AdjustListOffset(itemIndex + 1); AdjustListOffset(itemIndex + 1);
} else {
AdjustListOffset(itemIndex);
} }
SelectedItem = itemIndex; SelectedItem = itemIndex;
@ -240,7 +243,7 @@ void UiFocusDown()
void UiFocusPageUp() void UiFocusPageUp()
{ {
if (listOffset == 0) { if (listOffset == 0) {
UiFocus(0, true); UiFocus(0, true, true);
} else { } else {
const std::size_t relpos = SelectedItem - listOffset; const std::size_t relpos = SelectedItem - listOffset;
std::size_t prevPageStart = SelectedItem - relpos; std::size_t prevPageStart = SelectedItem - relpos;
@ -248,15 +251,15 @@ void UiFocusPageUp()
prevPageStart -= ListViewportSize; prevPageStart -= ListViewportSize;
else else
prevPageStart = 0; prevPageStart = 0;
UiFocus(prevPageStart, true); AdjustListOffset(prevPageStart);
UiFocus(listOffset + relpos, true); UiFocus(listOffset + relpos, true, true);
} }
} }
void UiFocusPageDown() void UiFocusPageDown()
{ {
if (listOffset + ListViewportSize > static_cast<std::size_t>(SelectedItemMax)) { if (listOffset + ListViewportSize > static_cast<std::size_t>(SelectedItemMax)) {
UiFocus(SelectedItemMax, false); UiFocus(SelectedItemMax, false, true);
} else { } else {
const std::size_t relpos = SelectedItem - listOffset; const std::size_t relpos = SelectedItem - listOffset;
std::size_t nextPageEnd = SelectedItem + (ListViewportSize - relpos - 1); std::size_t nextPageEnd = SelectedItem + (ListViewportSize - relpos - 1);
@ -264,8 +267,8 @@ void UiFocusPageDown()
nextPageEnd += ListViewportSize; nextPageEnd += ListViewportSize;
else else
nextPageEnd = SelectedItemMax; nextPageEnd = SelectedItemMax;
UiFocus(nextPageEnd, false); AdjustListOffset(nextPageEnd);
UiFocus(listOffset + relpos, false); UiFocus(listOffset + relpos, false, true);
} }
} }
@ -903,7 +906,7 @@ bool HandleMouseEventList(const SDL_Event &event, UiList *uiList)
index += listOffset; index += listOffset;
if (gfnListFocus != nullptr && SelectedItem != index) { if (gfnListFocus != nullptr && SelectedItem != index) {
UiFocus(index, true); UiFocus(index, true, false);
#ifdef USE_SDL1 #ifdef USE_SDL1
dbClickTimer = SDL_GetTicks(); dbClickTimer = SDL_GetTicks();
} else if (gfnListFocus == NULL || dbClickTimer + 500 >= SDL_GetTicks()) { } else if (gfnListFocus == NULL || dbClickTimer + 500 >= SDL_GetTicks()) {

Loading…
Cancel
Save