Widgets/TextAreaWidget: Add support for double/triple click selection

This commit is contained in:
Jérôme Leclercq
2021-11-30 12:39:53 +01:00
parent e73489e958
commit 86071eae88
6 changed files with 95 additions and 4 deletions

View File

@@ -397,6 +397,23 @@ namespace Nz
{
}
void AbstractTextAreaWidget::OnMouseButtonDoublePress(int x, int y, Mouse::Button button)
{
if (button == Mouse::Left)
{
// Shift double click is handled as single click
if (Keyboard::IsKeyPressed(Keyboard::VKey::LShift) || Keyboard::IsKeyPressed(Keyboard::VKey::RShift))
return OnMouseButtonPress(x, y, button);
SetFocus();
Vector2ui hoveredGlyph = GetHoveredGlyph(float(x), float(y));
HandleWordSelection(hoveredGlyph);
m_isMouseButtonDown = true;
}
}
void AbstractTextAreaWidget::OnMouseButtonPress(int x, int y, Mouse::Button button)
{
if (button == Mouse::Left)
@@ -424,6 +441,23 @@ namespace Nz
m_isMouseButtonDown = false;
}
void AbstractTextAreaWidget::OnMouseButtonTriplePress(int x, int y, Mouse::Button button)
{
if (button == Mouse::Left)
{
// Shift triple click is handled as single click
if (Keyboard::IsKeyPressed(Keyboard::VKey::LShift) || Keyboard::IsKeyPressed(Keyboard::VKey::RShift))
return OnMouseButtonPress(x, y, button);
SetFocus();
Vector2ui hoveredGlyph = GetHoveredGlyph(float(x), float(y));
SetSelection(Vector2ui(0, hoveredGlyph.y), Vector2ui(std::numeric_limits<unsigned int>::max(), hoveredGlyph.y));
m_isMouseButtonDown = true;
}
}
void AbstractTextAreaWidget::OnMouseEnter()
{
if (!Mouse::IsButtonPressed(Mouse::Left))