mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Replace country server filter fullscreen popup with smaller popup
Replace the large hard-coded popup to select the country for the server filter with a small overlay popup for better usability.
This commit is contained in:
parent
83c19a1e96
commit
23d8acd96c
|
@ -1801,71 +1801,6 @@ int CMenus::Render()
|
||||||
if(DoButton_Menu(&s_Button, Localize("Ok"), 0, &Button) || UI()->ConsumeHotkey(CUI::HOTKEY_ESCAPE) || UI()->ConsumeHotkey(CUI::HOTKEY_ENTER) || Activated)
|
if(DoButton_Menu(&s_Button, Localize("Ok"), 0, &Button) || UI()->ConsumeHotkey(CUI::HOTKEY_ESCAPE) || UI()->ConsumeHotkey(CUI::HOTKEY_ENTER) || Activated)
|
||||||
m_Popup = POPUP_FIRST_LAUNCH;
|
m_Popup = POPUP_FIRST_LAUNCH;
|
||||||
}
|
}
|
||||||
else if(m_Popup == POPUP_COUNTRY)
|
|
||||||
{
|
|
||||||
CUIRect ButtonBar;
|
|
||||||
Screen.Margin(150.0f, &Box);
|
|
||||||
Box.HSplitTop(20.0f, nullptr, &Box);
|
|
||||||
Box.HSplitBottom(20.0f, &Box, nullptr);
|
|
||||||
Box.HSplitBottom(24.0f, &Box, &ButtonBar);
|
|
||||||
Box.HSplitBottom(20.0f, &Box, nullptr);
|
|
||||||
Box.VMargin(20.0f, &Box);
|
|
||||||
ButtonBar.VMargin(100.0f, &ButtonBar);
|
|
||||||
|
|
||||||
static int s_CurSelection = -2;
|
|
||||||
if(s_CurSelection == -2)
|
|
||||||
s_CurSelection = g_Config.m_BrFilterCountryIndex;
|
|
||||||
|
|
||||||
static CListBox s_ListBox;
|
|
||||||
int OldSelected = -1;
|
|
||||||
s_ListBox.DoStart(50.0f, m_pClient->m_CountryFlags.Num(), 10, 1, OldSelected, &Box);
|
|
||||||
|
|
||||||
for(size_t i = 0; i < m_pClient->m_CountryFlags.Num(); ++i)
|
|
||||||
{
|
|
||||||
const CCountryFlags::CCountryFlag *pEntry = m_pClient->m_CountryFlags.GetByIndex(i);
|
|
||||||
if(pEntry->m_CountryCode == s_CurSelection)
|
|
||||||
OldSelected = i;
|
|
||||||
|
|
||||||
const CListboxItem Item = s_ListBox.DoNextItem(pEntry, OldSelected >= 0 && (size_t)OldSelected == i);
|
|
||||||
if(!Item.m_Visible)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
CUIRect FlagRect, Label;
|
|
||||||
Item.m_Rect.Margin(5.0f, &FlagRect);
|
|
||||||
FlagRect.HSplitBottom(12.0f, &FlagRect, &Label);
|
|
||||||
Label.HSplitTop(2.0f, nullptr, &Label);
|
|
||||||
const float OldWidth = FlagRect.w;
|
|
||||||
FlagRect.w = FlagRect.h * 2.0f;
|
|
||||||
FlagRect.x += (OldWidth - FlagRect.w) / 2.0f;
|
|
||||||
ColorRGBA Color(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
m_pClient->m_CountryFlags.Render(pEntry->m_CountryCode, &Color, FlagRect.x, FlagRect.y, FlagRect.w, FlagRect.h);
|
|
||||||
|
|
||||||
UI()->DoLabel(&Label, pEntry->m_aCountryCodeString, 10.0f, TEXTALIGN_ML);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int NewSelected = s_ListBox.DoEnd();
|
|
||||||
if(OldSelected != NewSelected)
|
|
||||||
s_CurSelection = m_pClient->m_CountryFlags.GetByIndex(NewSelected)->m_CountryCode;
|
|
||||||
|
|
||||||
CUIRect CancelButton, OkButton;
|
|
||||||
ButtonBar.VSplitMid(&CancelButton, &OkButton, 40.0f);
|
|
||||||
|
|
||||||
static CButtonContainer s_CancelButton;
|
|
||||||
if(DoButton_Menu(&s_CancelButton, Localize("Cancel"), 0, &CancelButton) || UI()->ConsumeHotkey(CUI::HOTKEY_ESCAPE))
|
|
||||||
{
|
|
||||||
s_CurSelection = g_Config.m_BrFilterCountryIndex;
|
|
||||||
m_Popup = POPUP_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static CButtonContainer s_OkButton;
|
|
||||||
if(DoButton_Menu(&s_OkButton, Localize("Ok"), 0, &OkButton) || UI()->ConsumeHotkey(CUI::HOTKEY_ENTER) || s_ListBox.WasItemActivated())
|
|
||||||
{
|
|
||||||
g_Config.m_BrFilterCountry = 1;
|
|
||||||
g_Config.m_BrFilterCountryIndex = s_CurSelection;
|
|
||||||
Client()->ServerBrowserUpdate();
|
|
||||||
m_Popup = POPUP_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(m_Popup == POPUP_RENAME_DEMO)
|
else if(m_Popup == POPUP_RENAME_DEMO)
|
||||||
{
|
{
|
||||||
CUIRect Label, TextBox, Ok, Abort;
|
CUIRect Label, TextBox, Ok, Abort;
|
||||||
|
|
|
@ -557,6 +557,13 @@ protected:
|
||||||
void PopupConfirmSwitchServer();
|
void PopupConfirmSwitchServer();
|
||||||
void RenderServerbrowserServerDetail(CUIRect View);
|
void RenderServerbrowserServerDetail(CUIRect View);
|
||||||
void RenderServerbrowserFilters(CUIRect View);
|
void RenderServerbrowserFilters(CUIRect View);
|
||||||
|
struct SPopupCountrySelectionContext
|
||||||
|
{
|
||||||
|
CMenus *m_pMenus;
|
||||||
|
int m_Selection;
|
||||||
|
bool m_New;
|
||||||
|
};
|
||||||
|
static CUI::EPopupMenuFunctionResult PopupCountrySelection(void *pContext, CUIRect View, bool Active);
|
||||||
void RenderServerbrowserFriends(CUIRect View);
|
void RenderServerbrowserFriends(CUIRect View);
|
||||||
void PopupConfirmRemoveFriend();
|
void PopupConfirmRemoveFriend();
|
||||||
void RenderServerbrowser(CUIRect MainView);
|
void RenderServerbrowser(CUIRect MainView);
|
||||||
|
@ -739,7 +746,6 @@ public:
|
||||||
POPUP_CONNECTING,
|
POPUP_CONNECTING,
|
||||||
POPUP_DISCONNECTED,
|
POPUP_DISCONNECTED,
|
||||||
POPUP_LANGUAGE,
|
POPUP_LANGUAGE,
|
||||||
POPUP_COUNTRY,
|
|
||||||
POPUP_RENAME_DEMO,
|
POPUP_RENAME_DEMO,
|
||||||
POPUP_RENDER_DEMO,
|
POPUP_RENDER_DEMO,
|
||||||
POPUP_PASSWORD,
|
POPUP_PASSWORD,
|
||||||
|
|
|
@ -679,7 +679,14 @@ void CMenus::RenderServerbrowserFilters(CUIRect View)
|
||||||
m_pClient->m_CountryFlags.Render(g_Config.m_BrFilterCountryIndex, &Color, Rect.x, Rect.y, Rect.w, Rect.h);
|
m_pClient->m_CountryFlags.Render(g_Config.m_BrFilterCountryIndex, &Color, Rect.x, Rect.y, Rect.w, Rect.h);
|
||||||
|
|
||||||
if(UI()->DoButtonLogic(&g_Config.m_BrFilterCountryIndex, 0, &Rect))
|
if(UI()->DoButtonLogic(&g_Config.m_BrFilterCountryIndex, 0, &Rect))
|
||||||
m_Popup = POPUP_COUNTRY;
|
{
|
||||||
|
static SPopupMenuId s_PopupCountryId;
|
||||||
|
static SPopupCountrySelectionContext s_PopupCountryContext;
|
||||||
|
s_PopupCountryContext.m_pMenus = this;
|
||||||
|
s_PopupCountryContext.m_Selection = g_Config.m_BrFilterCountryIndex;
|
||||||
|
s_PopupCountryContext.m_New = true;
|
||||||
|
UI()->DoPopupMenu(&s_PopupCountryId, Rect.x, Rect.y + Rect.h, 490, 210, &s_PopupCountryContext, PopupCountrySelection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerFilter.HSplitTop(20.0f, &Button, &ServerFilter);
|
ServerFilter.HSplitTop(20.0f, &Button, &ServerFilter);
|
||||||
|
@ -960,6 +967,59 @@ void CMenus::RenderServerbrowserFilters(CUIRect View)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CUI::EPopupMenuFunctionResult CMenus::PopupCountrySelection(void *pContext, CUIRect View, bool Active)
|
||||||
|
{
|
||||||
|
SPopupCountrySelectionContext *pPopupContext = static_cast<SPopupCountrySelectionContext *>(pContext);
|
||||||
|
CMenus *pMenus = pPopupContext->m_pMenus;
|
||||||
|
|
||||||
|
bool ListBoxUsed = Active;
|
||||||
|
|
||||||
|
static CListBox s_ListBox;
|
||||||
|
int OldSelected = -1;
|
||||||
|
s_ListBox.DoStart(50.0f, pMenus->m_pClient->m_CountryFlags.Num(), 8, 1, OldSelected, &View, false, &ListBoxUsed);
|
||||||
|
|
||||||
|
if(pPopupContext->m_New)
|
||||||
|
{
|
||||||
|
pPopupContext->m_New = false;
|
||||||
|
s_ListBox.ScrollToSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(size_t i = 0; i < pMenus->m_pClient->m_CountryFlags.Num(); ++i)
|
||||||
|
{
|
||||||
|
const CCountryFlags::CCountryFlag *pEntry = pMenus->m_pClient->m_CountryFlags.GetByIndex(i);
|
||||||
|
if(pEntry->m_CountryCode == pPopupContext->m_Selection)
|
||||||
|
OldSelected = i;
|
||||||
|
|
||||||
|
const CListboxItem Item = s_ListBox.DoNextItem(pEntry, OldSelected >= 0 && (size_t)OldSelected == i, &ListBoxUsed);
|
||||||
|
if(!Item.m_Visible)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
CUIRect FlagRect, Label;
|
||||||
|
Item.m_Rect.Margin(5.0f, &FlagRect);
|
||||||
|
FlagRect.HSplitBottom(12.0f, &FlagRect, &Label);
|
||||||
|
Label.HSplitTop(2.0f, nullptr, &Label);
|
||||||
|
const float OldWidth = FlagRect.w;
|
||||||
|
FlagRect.w = FlagRect.h * 2.0f;
|
||||||
|
FlagRect.x += (OldWidth - FlagRect.w) / 2.0f;
|
||||||
|
ColorRGBA Color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
pMenus->m_pClient->m_CountryFlags.Render(pEntry->m_CountryCode, &Color, FlagRect.x, FlagRect.y, FlagRect.w, FlagRect.h);
|
||||||
|
|
||||||
|
pMenus->UI()->DoLabel(&Label, pEntry->m_aCountryCodeString, 10.0f, TEXTALIGN_MC);
|
||||||
|
}
|
||||||
|
|
||||||
|
const int NewSelected = s_ListBox.DoEnd();
|
||||||
|
pPopupContext->m_Selection = pMenus->m_pClient->m_CountryFlags.GetByIndex(NewSelected)->m_CountryCode;
|
||||||
|
if(s_ListBox.WasItemSelected() || s_ListBox.WasItemActivated())
|
||||||
|
{
|
||||||
|
g_Config.m_BrFilterCountry = 1;
|
||||||
|
g_Config.m_BrFilterCountryIndex = pPopupContext->m_Selection;
|
||||||
|
pMenus->Client()->ServerBrowserUpdate();
|
||||||
|
return CUI::POPUP_CLOSE_CURRENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CUI::POPUP_KEEP_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
void CMenus::RenderServerbrowserServerDetail(CUIRect View)
|
void CMenus::RenderServerbrowserServerDetail(CUIRect View)
|
||||||
{
|
{
|
||||||
CUIRect ServerDetails = View;
|
CUIRect ServerDetails = View;
|
||||||
|
|
Loading…
Reference in a new issue