Mouse click add cursor
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user