mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-12-14 03:59:36 +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);
|
HandleForwardDelete(keyEvent.m_repeatCount);
|
||||||
return WidgetHandleStates::kDigested;
|
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();
|
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)
|
void EditboxWidget::HandleRightArrow(const uint32_t numRepeatsRequested, bool shiftHeld)
|
||||||
{
|
{
|
||||||
size_t caratChar = ResolveCaratChar();
|
size_t caratChar = ResolveCaratChar();
|
||||||
|
|||||||
@@ -55,6 +55,9 @@ namespace PortabilityLayer
|
|||||||
void HandleLeftArrow(const uint32_t numRepeatsRequested, bool shiftHeld);
|
void HandleLeftArrow(const uint32_t numRepeatsRequested, bool shiftHeld);
|
||||||
void HandleRightArrow(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;
|
size_t FindVerticalMovementCaratPos(const Vec2i &desiredPos, bool &isOutOfRange) const;
|
||||||
void HandleKeyMoveCarat(size_t newPos, bool shiftHeld);
|
void HandleKeyMoveCarat(size_t newPos, bool shiftHeld);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user