Mouse click add cursor

This commit is contained in:
Krzosa Karol
2024-07-21 06:40:44 +02:00
parent 0b74fd81e3
commit 2b2cc9cf6c
2 changed files with 37 additions and 0 deletions

View File

@@ -59,6 +59,12 @@ Int GetBack(Caret caret) {
return result;
}
Caret MakeCaret(Int pos) {
Caret result = {};
result.range.min = result.range.max = pos;
return result;
}
Caret MakeCaret(Int front, Int back) {
Caret result = {};
if (front >= back) {

View File

@@ -5,6 +5,8 @@ struct View {
float line_spacing;
float char_spacing;
bool mouse_selecting;
Vec2 scroll;
Buffer *buffer;
Array<Caret> carets;
@@ -235,4 +237,33 @@ void HandleKeybindings(View *_view) {
Int line_chars = GetCharCountOfLongestLine(view.buffer[0]);
view.scroll.x = Clamp(view.scroll.x, 0.f, Max(0.f, (line_chars - 2) * view.char_spacing));
}
{
Vec2 mouse = GetMousePosition();
bool mouse_in_view = CheckCollisionPointRec(mouse, ToRectangle(view.rect));
if (mouse_in_view && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
Vec2 mworld = mouse - view.rect.min + view.scroll;
Vec2 pos = mworld / Vec2{view.char_spacing, view.line_spacing};
XY xy = {(Int)(pos.x), (Int)(pos.y)};
Int p = XYToPos(buf, xy);
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
if (!IsKeyDown(KEY_LEFT_CONTROL)) {
view.carets.len = 0;
}
Add(&view.carets, MakeCaret(p, p));
} else if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
view.mouse_selecting = true;
}
if (view.mouse_selecting) {
if (!IsMouseButtonDown(MOUSE_BUTTON_LEFT)) view.mouse_selecting = false;
Caret &caret = *GetLast(view.carets);
caret = ChangeFront(caret, p);
}
MergeCarets(&view.carets);
}
// Rect2 rect = view.rect + view;
}
}