mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-19 14:38:18 +00:00
Merge pull request #1837 from Dune-jr/fix-activelistbox
Language/Theme listboxes now always render selection, despite not always accepting inputs
This commit is contained in:
commit
41846559bf
|
@ -80,7 +80,7 @@ CMenus::CMenus()
|
||||||
|
|
||||||
m_SelectedServer.m_Filter = -1;
|
m_SelectedServer.m_Filter = -1;
|
||||||
m_SelectedServer.m_Index = -1;
|
m_SelectedServer.m_Index = -1;
|
||||||
m_ActiveListBox = ACTLB_THEME;
|
m_ActiveListBox = ACTLB_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
float CMenus::ButtonFade(CButtonContainer *pBC, float Seconds, int Checked)
|
float CMenus::ButtonFade(CButtonContainer *pBC, float Seconds, int Checked)
|
||||||
|
@ -944,7 +944,7 @@ CMenus::CListboxItem CMenus::UiDoListboxNextRow(CListBoxState* pState)
|
||||||
return Item;
|
return Item;
|
||||||
}
|
}
|
||||||
|
|
||||||
CMenus::CListboxItem CMenus::UiDoListboxNextItem(CListBoxState* pState, const void *pId, bool Selected)
|
CMenus::CListboxItem CMenus::UiDoListboxNextItem(CListBoxState* pState, const void *pId, bool Selected, bool* pActive)
|
||||||
{
|
{
|
||||||
int ThisItemIndex = pState->m_ListBoxItemIndex;
|
int ThisItemIndex = pState->m_ListBoxItemIndex;
|
||||||
if(Selected)
|
if(Selected)
|
||||||
|
@ -957,12 +957,17 @@ CMenus::CListboxItem CMenus::UiDoListboxNextItem(CListBoxState* pState, const vo
|
||||||
CListboxItem Item = UiDoListboxNextRow(pState);
|
CListboxItem Item = UiDoListboxNextRow(pState);
|
||||||
|
|
||||||
if(Item.m_Visible && UI()->DoButtonLogic(pId, "", pState->m_ListBoxSelectedIndex == pState->m_ListBoxItemIndex, &Item.m_HitRect))
|
if(Item.m_Visible && UI()->DoButtonLogic(pId, "", pState->m_ListBoxSelectedIndex == pState->m_ListBoxItemIndex, &Item.m_HitRect))
|
||||||
|
{
|
||||||
pState->m_ListBoxNewSelected = ThisItemIndex;
|
pState->m_ListBoxNewSelected = ThisItemIndex;
|
||||||
|
if(pActive)
|
||||||
|
*pActive = true;
|
||||||
|
}
|
||||||
|
const bool ProcessInput = !pActive || *pActive;
|
||||||
|
|
||||||
// process input, regard selected index
|
// process input, regard selected index
|
||||||
if(pState->m_ListBoxSelectedIndex == ThisItemIndex)
|
if(pState->m_ListBoxSelectedIndex == ThisItemIndex)
|
||||||
{
|
{
|
||||||
if(!pState->m_ListBoxDoneEvents)
|
if(ProcessInput && !pState->m_ListBoxDoneEvents)
|
||||||
{
|
{
|
||||||
pState->m_ListBoxDoneEvents = 1;
|
pState->m_ListBoxDoneEvents = 1;
|
||||||
|
|
||||||
|
@ -1008,7 +1013,7 @@ CMenus::CListboxItem CMenus::UiDoListboxNextItem(CListBoxState* pState, const vo
|
||||||
|
|
||||||
//selected_index = i;
|
//selected_index = i;
|
||||||
CUIRect r = Item.m_Rect;
|
CUIRect r = Item.m_Rect;
|
||||||
RenderTools()->DrawUIRect(&r, vec4(1,1,1,0.5f), CUI::CORNER_ALL, 5.0f);
|
RenderTools()->DrawUIRect(&r, vec4(1,1,1,ProcessInput?0.5f:0.33f), CUI::CORNER_ALL, 5.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Item;
|
return Item;
|
||||||
|
|
|
@ -128,7 +128,7 @@ private:
|
||||||
void UiDoListboxHeader(CListBoxState* pState, const CUIRect *pRect, const char *pTitle, float HeaderHeight, float Spacing);
|
void UiDoListboxHeader(CListBoxState* pState, const CUIRect *pRect, const char *pTitle, float HeaderHeight, float Spacing);
|
||||||
void UiDoListboxStart(CListBoxState* pState, const void *pID, float RowHeight, const char *pBottomText, int NumItems,
|
void UiDoListboxStart(CListBoxState* pState, const void *pID, float RowHeight, const char *pBottomText, int NumItems,
|
||||||
int ItemsPerRow, int SelectedIndex, const CUIRect *pRect=0, bool Background=true);
|
int ItemsPerRow, int SelectedIndex, const CUIRect *pRect=0, bool Background=true);
|
||||||
CListboxItem UiDoListboxNextItem(CListBoxState* pState, const void *pID, bool Selected = false);
|
CListboxItem UiDoListboxNextItem(CListBoxState* pState, const void *pID, bool Selected = false, bool* pActive = NULL);
|
||||||
CListboxItem UiDoListboxNextRow(CListBoxState* pState);
|
CListboxItem UiDoListboxNextRow(CListBoxState* pState);
|
||||||
int UiDoListboxEnd(CListBoxState* pState, bool *pItemActivated);
|
int UiDoListboxEnd(CListBoxState* pState, bool *pItemActivated);
|
||||||
|
|
||||||
|
@ -176,7 +176,8 @@ private:
|
||||||
SETTINGS_GRAPHICS,
|
SETTINGS_GRAPHICS,
|
||||||
SETTINGS_SOUND,
|
SETTINGS_SOUND,
|
||||||
|
|
||||||
ACTLB_LANG=0,
|
ACTLB_NONE=0,
|
||||||
|
ACTLB_LANG,
|
||||||
ACTLB_THEME,
|
ACTLB_THEME,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -713,7 +713,6 @@ void CMenus::RenderLanguageSelection(CUIRect MainView, bool Header)
|
||||||
{
|
{
|
||||||
static int s_LanguageList = 0;
|
static int s_LanguageList = 0;
|
||||||
static int s_SelectedLanguage = -1;
|
static int s_SelectedLanguage = -1;
|
||||||
static int s_OldSelected = -1;
|
|
||||||
static sorted_array<CLanguage> s_Languages;
|
static sorted_array<CLanguage> s_Languages;
|
||||||
static CListBoxState s_ListBoxState;
|
static CListBoxState s_ListBoxState;
|
||||||
|
|
||||||
|
@ -729,16 +728,6 @@ void CMenus::RenderLanguageSelection(CUIRect MainView, bool Header)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(s_SelectedLanguage != -1 && m_ActiveListBox != ACTLB_LANG)
|
|
||||||
{
|
|
||||||
s_OldSelected = s_SelectedLanguage;
|
|
||||||
s_SelectedLanguage = -1;
|
|
||||||
}
|
|
||||||
if(s_SelectedLanguage == -1 && UI()->MouseInside(&MainView))
|
|
||||||
{
|
|
||||||
s_SelectedLanguage = s_OldSelected;
|
|
||||||
m_ActiveListBox = ACTLB_LANG;
|
|
||||||
}
|
|
||||||
int OldSelected = s_SelectedLanguage;
|
int OldSelected = s_SelectedLanguage;
|
||||||
|
|
||||||
if(Header)
|
if(Header)
|
||||||
|
@ -747,7 +736,10 @@ void CMenus::RenderLanguageSelection(CUIRect MainView, bool Header)
|
||||||
|
|
||||||
for(sorted_array<CLanguage>::range r = s_Languages.all(); !r.empty(); r.pop_front())
|
for(sorted_array<CLanguage>::range r = s_Languages.all(); !r.empty(); r.pop_front())
|
||||||
{
|
{
|
||||||
CListboxItem Item = UiDoListboxNextItem(&s_ListBoxState, &r.front());
|
bool IsActive = m_ActiveListBox == ACTLB_LANG;
|
||||||
|
CListboxItem Item = UiDoListboxNextItem(&s_ListBoxState, &r.front(), false, &IsActive);
|
||||||
|
if(IsActive)
|
||||||
|
m_ActiveListBox = ACTLB_LANG;
|
||||||
|
|
||||||
if(Item.m_Visible)
|
if(Item.m_Visible)
|
||||||
{
|
{
|
||||||
|
@ -785,7 +777,6 @@ void CMenus::RenderThemeSelection(CUIRect MainView, bool Header)
|
||||||
{
|
{
|
||||||
static int s_ThemeList = 0;
|
static int s_ThemeList = 0;
|
||||||
static int s_SelectedTheme = -1;
|
static int s_SelectedTheme = -1;
|
||||||
static int s_OldSelected = -1;
|
|
||||||
static CListBoxState s_ListBoxState_Theme;
|
static CListBoxState s_ListBoxState_Theme;
|
||||||
|
|
||||||
if(m_lThemes.size() == 0) // not loaded yet
|
if(m_lThemes.size() == 0) // not loaded yet
|
||||||
|
@ -803,16 +794,6 @@ void CMenus::RenderThemeSelection(CUIRect MainView, bool Header)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(s_SelectedTheme != -1 && m_ActiveListBox != ACTLB_THEME)
|
|
||||||
{
|
|
||||||
s_OldSelected = s_SelectedTheme;
|
|
||||||
s_SelectedTheme = -1;
|
|
||||||
}
|
|
||||||
if(s_SelectedTheme == -1 && UI()->MouseInside(&MainView))
|
|
||||||
{
|
|
||||||
s_SelectedTheme = s_OldSelected;
|
|
||||||
m_ActiveListBox = ACTLB_THEME;
|
|
||||||
}
|
|
||||||
int OldSelected = s_SelectedTheme;
|
int OldSelected = s_SelectedTheme;
|
||||||
|
|
||||||
if(Header)
|
if(Header)
|
||||||
|
@ -821,7 +802,10 @@ void CMenus::RenderThemeSelection(CUIRect MainView, bool Header)
|
||||||
|
|
||||||
for(sorted_array<CTheme>::range r = m_lThemes.all(); !r.empty(); r.pop_front())
|
for(sorted_array<CTheme>::range r = m_lThemes.all(); !r.empty(); r.pop_front())
|
||||||
{
|
{
|
||||||
CListboxItem Item = UiDoListboxNextItem(&s_ListBoxState_Theme, &r.front());
|
bool IsActive = m_ActiveListBox == ACTLB_THEME;
|
||||||
|
CListboxItem Item = UiDoListboxNextItem(&s_ListBoxState_Theme, &r.front(), false, &IsActive);
|
||||||
|
if(IsActive)
|
||||||
|
m_ActiveListBox = ACTLB_THEME;
|
||||||
|
|
||||||
if(Item.m_Visible)
|
if(Item.m_Visible)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue