mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-12-14 12:09:36 +00:00
Add forward delete to editbox
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user