Mouse click add cursor
This commit is contained in:
@@ -59,6 +59,12 @@ Int GetBack(Caret caret) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Caret MakeCaret(Int pos) {
|
||||||
|
Caret result = {};
|
||||||
|
result.range.min = result.range.max = pos;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
Caret MakeCaret(Int front, Int back) {
|
Caret MakeCaret(Int front, Int back) {
|
||||||
Caret result = {};
|
Caret result = {};
|
||||||
if (front >= back) {
|
if (front >= back) {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ struct View {
|
|||||||
float line_spacing;
|
float line_spacing;
|
||||||
float char_spacing;
|
float char_spacing;
|
||||||
|
|
||||||
|
bool mouse_selecting;
|
||||||
|
|
||||||
Vec2 scroll;
|
Vec2 scroll;
|
||||||
Buffer *buffer;
|
Buffer *buffer;
|
||||||
Array<Caret> carets;
|
Array<Caret> carets;
|
||||||
@@ -235,4 +237,33 @@ void HandleKeybindings(View *_view) {
|
|||||||
Int line_chars = GetCharCountOfLongestLine(view.buffer[0]);
|
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));
|
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