Add home/end key support to edit box

This commit is contained in:
elasota
2020-07-03 04:08:09 -04:00
parent 3dbb231c5a
commit 87bab26d47
2 changed files with 68 additions and 0 deletions

View File

@@ -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();

View File

@@ -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);