mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-23 06:53:43 +00:00
Add home/end key support to edit box
This commit is contained in:
@@ -248,6 +248,16 @@ namespace PortabilityLayer
|
||||
HandleForwardDelete(keyEvent.m_repeatCount);
|
||||
return WidgetHandleStates::kDigested;
|
||||
}
|
||||
else if (keyEvent.m_key.m_specialKey == GpKeySpecials::kHome)
|
||||
{
|
||||
HandleHome(isShiftHeld);
|
||||
return WidgetHandleStates::kDigested;
|
||||
}
|
||||
else if (keyEvent.m_key.m_specialKey == GpKeySpecials::kEnd)
|
||||
{
|
||||
HandleEnd(isShiftHeld);
|
||||
return WidgetHandleStates::kDigested;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -546,6 +556,61 @@ namespace PortabilityLayer
|
||||
Redraw();
|
||||
}
|
||||
|
||||
void EditboxWidget::HandleHome(bool shiftHeld)
|
||||
{
|
||||
const size_t originalCaratChar = ResolveCaratChar();
|
||||
size_t caratChar = originalCaratChar;
|
||||
|
||||
while (caratChar > 0)
|
||||
{
|
||||
uint8_t prevChar = m_chars[caratChar - 1];
|
||||
if (prevChar == '\r')
|
||||
break;
|
||||
else
|
||||
caratChar--;
|
||||
}
|
||||
|
||||
if (originalCaratChar != caratChar)
|
||||
{
|
||||
HandleKeyMoveCarat(caratChar, shiftHeld);
|
||||
|
||||
m_caratScrollLocked = false;
|
||||
|
||||
AdjustScrollToCarat();
|
||||
|
||||
m_caratTimer = 0;
|
||||
Redraw();
|
||||
}
|
||||
}
|
||||
|
||||
void EditboxWidget::HandleEnd(bool shiftHeld)
|
||||
{
|
||||
const size_t originalCaratChar = ResolveCaratChar();
|
||||
size_t caratChar = originalCaratChar;
|
||||
|
||||
while (caratChar < m_length)
|
||||
{
|
||||
uint8_t nextChar = m_chars[caratChar];
|
||||
if (nextChar == '\r')
|
||||
break;
|
||||
else
|
||||
caratChar++;
|
||||
}
|
||||
|
||||
if (originalCaratChar != caratChar)
|
||||
{
|
||||
HandleKeyMoveCarat(caratChar, shiftHeld);
|
||||
|
||||
m_caratScrollLocked = false;
|
||||
|
||||
AdjustScrollToCarat();
|
||||
|
||||
m_caratTimer = 0;
|
||||
Redraw();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EditboxWidget::HandleRightArrow(const uint32_t numRepeatsRequested, bool shiftHeld)
|
||||
{
|
||||
size_t caratChar = ResolveCaratChar();
|
||||
|
@@ -55,6 +55,9 @@ namespace PortabilityLayer
|
||||
void HandleLeftArrow(const uint32_t numRepeatsRequested, bool shiftHeld);
|
||||
void HandleRightArrow(const uint32_t numRepeatsRequested, bool shiftHeld);
|
||||
|
||||
void HandleHome(bool shiftHeld);
|
||||
void HandleEnd(bool shiftHeld);
|
||||
|
||||
size_t FindVerticalMovementCaratPos(const Vec2i &desiredPos, bool &isOutOfRange) const;
|
||||
void HandleKeyMoveCarat(size_t newPos, bool shiftHeld);
|
||||
|
||||
|
Reference in New Issue
Block a user