From 7fec622e51753198ed8970d63053a2551ae2399d Mon Sep 17 00:00:00 2001 From: elasota Date: Fri, 3 Jul 2020 03:02:43 -0400 Subject: [PATCH] Add forward delete to editbox --- PortabilityLayer/PLEditboxWidget.cpp | 37 ++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/PortabilityLayer/PLEditboxWidget.cpp b/PortabilityLayer/PLEditboxWidget.cpp index 490c343..d304878 100644 --- a/PortabilityLayer/PLEditboxWidget.cpp +++ b/PortabilityLayer/PLEditboxWidget.cpp @@ -240,12 +240,11 @@ namespace PortabilityLayer HandleDownArrow(keyEvent.m_repeatCount, isShiftHeld); return WidgetHandleStates::kDigested; } -#if 0 else if (keyEvent.m_key.m_specialKey == GpKeySpecials::kDelete) { + HandleForwardDelete(keyEvent.m_repeatCount); return WidgetHandleStates::kDigested; } -#endif } } } @@ -396,6 +395,40 @@ namespace PortabilityLayer 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) { if (!m_isMultiLine)