mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 01:24:18 +00:00
made edit boxes scrollable. Closes #96
This commit is contained in:
parent
b65a26fe93
commit
de7504282c
|
@ -220,7 +220,10 @@ int CMenus::DoEditBox(void *pID, const CUIRect *pRect, char *pStr, unsigned StrS
|
|||
{
|
||||
int Inside = UI()->MouseInside(pRect);
|
||||
bool ReturnValue = false;
|
||||
bool UpdateOffset = false;
|
||||
static int s_AtIndex = 0;
|
||||
static bool s_DoScroll = false;
|
||||
static float s_ScrollStart = 0.0f;
|
||||
|
||||
if(UI()->LastActiveItem() == pID)
|
||||
{
|
||||
|
@ -230,6 +233,8 @@ int CMenus::DoEditBox(void *pID, const CUIRect *pRect, char *pStr, unsigned StrS
|
|||
|
||||
if(Inside && UI()->MouseButton(0))
|
||||
{
|
||||
s_DoScroll = true;
|
||||
s_ScrollStart = UI()->MouseX();
|
||||
int MxRel = (int)(UI()->MouseX() - pRect->x);
|
||||
|
||||
for(int i = 1; i <= Len; i++)
|
||||
|
@ -244,6 +249,24 @@ int CMenus::DoEditBox(void *pID, const CUIRect *pRect, char *pStr, unsigned StrS
|
|||
s_AtIndex = Len;
|
||||
}
|
||||
}
|
||||
else if(!UI()->MouseButton(0))
|
||||
s_DoScroll = false;
|
||||
else if(s_DoScroll)
|
||||
{
|
||||
// do scrolling
|
||||
if(UI()->MouseX() < pRect->x && s_ScrollStart-UI()->MouseX() > 10.0f)
|
||||
{
|
||||
s_AtIndex = max(0, s_AtIndex-1);
|
||||
s_ScrollStart = UI()->MouseX();
|
||||
UpdateOffset = true;
|
||||
}
|
||||
else if(UI()->MouseX() > pRect->x+pRect->w && UI()->MouseX()-s_ScrollStart > 10.0f)
|
||||
{
|
||||
s_AtIndex = min(Len, s_AtIndex+1);
|
||||
s_ScrollStart = UI()->MouseX();
|
||||
UpdateOffset = true;
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < m_NumInputEvents; i++)
|
||||
{
|
||||
|
@ -257,7 +280,10 @@ int CMenus::DoEditBox(void *pID, const CUIRect *pRect, char *pStr, unsigned StrS
|
|||
if(UI()->ActiveItem() == pID)
|
||||
{
|
||||
if(!UI()->MouseButton(0))
|
||||
{
|
||||
s_DoScroll = false;
|
||||
UI()->SetActiveItem(0);
|
||||
}
|
||||
}
|
||||
else if(UI()->HotItem() == pID)
|
||||
{
|
||||
|
@ -292,7 +318,7 @@ int CMenus::DoEditBox(void *pID, const CUIRect *pRect, char *pStr, unsigned StrS
|
|||
}
|
||||
|
||||
// check if the text has to be moved
|
||||
if(UI()->LastActiveItem() == pID && !JustGotActive && m_NumInputEvents)
|
||||
if(UI()->LastActiveItem() == pID && !JustGotActive && (UpdateOffset || m_NumInputEvents))
|
||||
{
|
||||
float w = TextRender()->TextWidth(0, FontSize, pDisplayStr, s_AtIndex)*UI()->Scale();
|
||||
if(w-*Offset > Textbox.w)
|
||||
|
|
Loading…
Reference in a new issue