Fix multiple cursors crashes by sorting cursors by min range

This commit is contained in:
Krzosa Karol
2024-06-24 07:27:38 +02:00
parent 66b9a5d15f
commit 84f0b65fa9
3 changed files with 94 additions and 8 deletions

View File

@@ -231,12 +231,24 @@ int main() {
}
if (IsKeyPressed(KEY_DOWN) || IsKeyPressedRepeat(KEY_DOWN)) {
For(focused_window->cursors) {
it.range.max = it.range.min = MoveDown(focused_window->buffer, it.range.min);
if (IsKeyDown(KEY_LEFT_SHIFT)) {
int64_t front = GetFront(it);
front = MoveDown(focused_window->buffer, front);
it = ChangeFront(it, front);
} else {
it.range.max = it.range.min = MoveDown(focused_window->buffer, it.range.min);
}
}
}
if (IsKeyPressed(KEY_UP) || IsKeyPressedRepeat(KEY_UP)) {
For(focused_window->cursors) {
it.range.max = it.range.min = MoveUp(focused_window->buffer, it.range.min);
if (IsKeyDown(KEY_LEFT_SHIFT)) {
int64_t front = GetFront(it);
front = MoveUp(focused_window->buffer, front);
it = ChangeFront(it, front);
} else {
it.range.max = it.range.min = MoveUp(focused_window->buffer, it.range.min);
}
}
}
@@ -426,10 +438,15 @@ int main() {
if (CheckCollisionPointRec(mouse_in_render_units, ToRectangle(cell.rect))) {
DrawRectangleRec(ToRectangle(cell.rect), {0, 0, 255, 40});
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
window.cursors.clear();
window.cursors.add({cell.pos, cell.pos});
if (IsKeyDown(KEY_LEFT_CONTROL)) {
window.cursors.add({cell.pos, cell.pos});
} else {
window.cursors.clear();
window.cursors.add({cell.pos, cell.pos});
}
} else if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
window.cursors[0] = ChangeBack(window.cursors[0], cell.pos);
Cursor *c = window.cursors.last();
*c = ChangeBack(*c, cell.pos);
}
}
}