Add forward delete to editbox

This commit is contained in:
elasota
2020-07-03 03:02:43 -04:00
parent 05604e5604
commit 7fec622e51

View File

@@ -240,12 +240,11 @@ namespace PortabilityLayer
HandleDownArrow(keyEvent.m_repeatCount, isShiftHeld); HandleDownArrow(keyEvent.m_repeatCount, isShiftHeld);
return WidgetHandleStates::kDigested; return WidgetHandleStates::kDigested;
} }
#if 0
else if (keyEvent.m_key.m_specialKey == GpKeySpecials::kDelete) else if (keyEvent.m_key.m_specialKey == GpKeySpecials::kDelete)
{ {
HandleForwardDelete(keyEvent.m_repeatCount);
return WidgetHandleStates::kDigested; return WidgetHandleStates::kDigested;
} }
#endif
} }
} }
} }
@@ -396,6 +395,40 @@ namespace PortabilityLayer
m_caratScrollLocked = false; m_caratScrollLocked = false;
} }
void EditboxWidget::HandleForwardDelete(const uint32_t numRepeatsRequested)
{
const size_t numPostSelChars = m_length - m_selEndChar;
const size_t numSelChars = m_selEndChar - m_selStartChar;
const size_t numPreSelChars = m_selStartChar;
size_t suffixTrim = numRepeatsRequested;
if (numSelChars != 0)
suffixTrim--;
if (suffixTrim > numPostSelChars)
suffixTrim = numPostSelChars;
const size_t prefixKeep = numPreSelChars;
const size_t suffixKeep = numPostSelChars - suffixTrim;
if (suffixKeep > 0)
{
uint8_t *moveSrc = m_chars + m_length - suffixKeep;
uint8_t *moveDest = m_chars + m_selStartChar;
if (moveSrc != moveDest)
memmove(moveDest, moveSrc, suffixKeep);
}
m_length = prefixKeep + suffixKeep;
m_selStartChar = m_selEndChar = prefixKeep;
m_caratTimer = 0;
Redraw();
m_caratScrollLocked = false;
}
void EditboxWidget::HandleUpArrow(const uint32_t numRepeatsRequested, bool shiftHeld) void EditboxWidget::HandleUpArrow(const uint32_t numRepeatsRequested, bool shiftHeld)
{ {
if (!m_isMultiLine) if (!m_isMultiLine)