Merge pull request #7658 from Robyt3/UI-Lineinput-Fixes

Fix various lineinput issues/regressions
This commit is contained in:
Dennis Felsing 2023-12-15 18:31:04 +00:00 committed by GitHub
commit 61c4ffcf69
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 5 deletions

View file

@ -1217,7 +1217,9 @@ void CChat::OnRender()
m_Input.Activate(EInputPriority::CHAT); // Ensure that the input is active
const CUIRect InputCursorRect = {Cursor.m_X, Cursor.m_Y - ScrollOffset, 0.0f, 0.0f};
const STextBoundingBox BoundingBox = m_Input.Render(&InputCursorRect, Cursor.m_FontSize, TEXTALIGN_TL, m_Input.WasCursorChanged(), MessageMaxWidth, 0.0f);
// Arithmetic or to ensure that both functions are called so both flags are purged
const bool Changed = m_Input.WasChanged() | m_Input.WasCursorChanged();
const STextBoundingBox BoundingBox = m_Input.Render(&InputCursorRect, Cursor.m_FontSize, TEXTALIGN_TL, Changed, MessageMaxWidth, 0.0f);
Graphics()->ClipDisable();

View file

@ -970,7 +970,9 @@ void CGameConsole::OnRender()
pConsole->m_Input.SetHidden(m_ConsoleType == CONSOLETYPE_REMOTE && Client()->State() == IClient::STATE_ONLINE && !Client()->RconAuthed() && (pConsole->m_UserGot || !pConsole->m_UsernameReq));
pConsole->m_Input.Activate(EInputPriority::CONSOLE); // Ensure that the input is active
const CUIRect InputCursorRect = {x, y + FONT_SIZE, 0.0f, 0.0f};
pConsole->m_BoundingBox = pConsole->m_Input.Render(&InputCursorRect, FONT_SIZE, TEXTALIGN_BL, pConsole->m_Input.WasCursorChanged(), Screen.w - 10.0f - x, LINE_SPACING);
// Arithmetic or to ensure that both functions are called so both flags are purged
const bool Changed = pConsole->m_Input.WasChanged() | pConsole->m_Input.WasCursorChanged();
pConsole->m_BoundingBox = pConsole->m_Input.Render(&InputCursorRect, FONT_SIZE, TEXTALIGN_BL, Changed, Screen.w - 10.0f - x, LINE_SPACING);
if(pConsole->m_LastInputHeight == 0.0f && pConsole->m_BoundingBox.m_H != 0.0f)
pConsole->m_LastInputHeight = pConsole->m_BoundingBox.m_H;
if(pConsole->m_Input.HasSelection())

View file

@ -385,7 +385,7 @@ bool CLineInput::ProcessInput(const IInput::CEvent &Event)
}
m_WasCursorChanged |= OldCursorPos != m_CursorPos;
m_WasChanged |= SelectionLength != GetSelectionLength();
m_WasCursorChanged |= SelectionLength != GetSelectionLength();
return m_WasChanged || m_WasCursorChanged || KeyHandled;
}

View file

@ -766,6 +766,7 @@ bool CUI::DoEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize
const bool Inside = MouseHovered(pRect);
const bool Active = m_pLastActiveItem == pLineInput;
const bool Changed = pLineInput->WasChanged();
const bool CursorChanged = pLineInput->WasCursorChanged();
const float VSpacing = 2.0f;
CUIRect Textbox;
@ -842,11 +843,11 @@ bool CUI::DoEditBox(CLineInput *pLineInput, const CUIRect *pRect, float FontSize
pRect->Draw(ms_LightButtonColorFunction.GetColor(Active, HotItem() == pLineInput), Corners, 3.0f);
ClipEnable(pRect);
Textbox.x -= ScrollOffset;
const STextBoundingBox BoundingBox = pLineInput->Render(&Textbox, FontSize, TEXTALIGN_ML, pLineInput->WasCursorChanged(), -1.0f, 0.0f);
const STextBoundingBox BoundingBox = pLineInput->Render(&Textbox, FontSize, TEXTALIGN_ML, Changed || CursorChanged, -1.0f, 0.0f);
ClipDisable();
// Scroll left or right if necessary
if(Active && !JustGotActive && (Changed || Input()->HasComposition()))
if(Active && !JustGotActive && (Changed || CursorChanged || Input()->HasComposition()))
{
const float CaretPositionX = pLineInput->GetCaretPosition().x - Textbox.x - ScrollOffset - ScrollOffsetChange;
if(CaretPositionX > Textbox.w)