Prechádzať zdrojové kódy

GTextEditor: Double-clicking on a word should select that word.

Andreas Kling 6 rokov pred
rodič
commit
e2e2c78332
2 zmenil súbory, kde vykonal 30 pridanie a 0 odobranie
  1. 29 0
      LibGUI/GTextEditor.cpp
  2. 1 0
      LibGUI/GTextEditor.h

+ 29 - 0
LibGUI/GTextEditor.cpp

@@ -11,6 +11,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <stdio.h>
+#include <ctype.h>
 
 GTextEditor::GTextEditor(Type type, GWidget* parent)
     : GScrollableWidget(parent)
@@ -129,6 +130,34 @@ GTextPosition GTextEditor::text_position_at(const Point& a_position) const
     return { line_index, column_index };
 }
 
+void GTextEditor::doubleclick_event(GMouseEvent& event)
+{
+    if (event.button() != GMouseButton::Left)
+        return;
+
+    m_in_drag_select = false;
+
+    auto start = text_position_at(event.position());
+    auto end = start;
+    auto& line = *m_lines[start.line()];
+    while (start.column() > 0) {
+        if (isspace(line.characters()[start.column() - 1]))
+            break;
+        start.set_column(start.column() - 1);
+    }
+
+    while (end.column() < line.length()) {
+        if (isspace(line.characters()[end.column()]))
+            break;
+        end.set_column(end.column() + 1);
+    }
+
+    m_selection.set(start, end);
+    set_cursor(end);
+    update();
+    did_update_selection();
+}
+
 void GTextEditor::mousedown_event(GMouseEvent& event)
 {
     if (event.button() == GMouseButton::Left) {

+ 1 - 0
LibGUI/GTextEditor.h

@@ -125,6 +125,7 @@ private:
     virtual void mousedown_event(GMouseEvent&) override;
     virtual void mouseup_event(GMouseEvent&) override;
     virtual void mousemove_event(GMouseEvent&) override;
+    virtual void doubleclick_event(GMouseEvent&) override;
     virtual void keydown_event(GKeyEvent&) override;
     virtual void focusin_event(CEvent&) override;
     virtual void focusout_event(CEvent&) override;