From 53e153a696f4d51e8589bdf21f9a9bbc40558d83 Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Mon, 22 Jul 2024 16:26:50 +0200 Subject: [PATCH] Improve double click --- src/text_editor/buffer_helpers.cpp | 5 +++++ src/text_editor/commands.cpp | 2 +- src/text_editor/text_editor.cpp | 3 ++- src/text_editor/view_commands.cpp | 19 +++++++++++-------- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/text_editor/buffer_helpers.cpp b/src/text_editor/buffer_helpers.cpp index 7e2b836..95e3e5a 100644 --- a/src/text_editor/buffer_helpers.cpp +++ b/src/text_editor/buffer_helpers.cpp @@ -102,6 +102,11 @@ bool InBounds(const Buffer &buffer, Int pos) { return result; } +bool InBounds(Range range, Int pos) { + bool result = pos >= range.min && pos < range.max; + return result; +} + bool AreEqual(Range a, Range b) { bool result = a.min == b.min && a.max == b.max; return result; diff --git a/src/text_editor/commands.cpp b/src/text_editor/commands.cpp index f9293d8..fefa062 100644 --- a/src/text_editor/commands.cpp +++ b/src/text_editor/commands.cpp @@ -50,7 +50,7 @@ bool IsDoubleClick() { double diff = time - last_click_time; last_click_time = time; // @todo: don't do this manually, use windows - if (diff >= 0.05 && diff <= 0.25) { + if (diff >= 0.05 && diff <= 0.3) { last_click_time = 0; return true; } diff --git a/src/text_editor/text_editor.cpp b/src/text_editor/text_editor.cpp index b81b146..805f476 100644 --- a/src/text_editor/text_editor.cpp +++ b/src/text_editor/text_editor.cpp @@ -30,9 +30,10 @@ Font MenuFont; #include "view_draw.cpp" /* -- Ctrl + D - create new cursor at next occurence of word - Colored strings +- move off raylib +- line endings - file dock on left side - multiple windows - multiple views per window diff --git a/src/text_editor/view_commands.cpp b/src/text_editor/view_commands.cpp index cd5e853..0369390 100644 --- a/src/text_editor/view_commands.cpp +++ b/src/text_editor/view_commands.cpp @@ -332,15 +332,18 @@ void HandleKeybindings(View *_view) { if (mouse_in_view && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) { if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) { - if (!IsKeyDown(KEY_LEFT_CONTROL)) { - view.carets.len = 0; - } - Add(&view.carets, MakeCaret(p, p)); - view.selection_anchor = GetLast(view.carets)->range; if (IsDoubleClick()) { - Caret *c = GetLast(view.carets); - c->range = EncloseWord(buf, p); - view.selection_anchor = c->range; + Caret *c = GetLast(view.carets); + if (InBounds({c->range.min - 1, c->range.max + 1}, p)) { + c->range = EncloseWord(buf, p); + view.selection_anchor = c->range; + } + } else { + if (!IsKeyDown(KEY_LEFT_CONTROL)) { + view.carets.len = 0; + } + Add(&view.carets, MakeCaret(p, p)); + view.selection_anchor = GetLast(view.carets)->range; } MergeCarets(&view.carets);