static size_t getoffset(View* view, size_t row, size_t col) {
Row* scrrow = view_getrow(view, row);
- assert(scrrow);
+ if (!scrrow) return SIZE_MAX;
size_t pos = scrrow->off;
if (col > scrrow->len) {
pos = (scrrow->off + scrrow->rlen - 1);
void view_setcursor(View* view, size_t row, size_t col) {
size_t off = getoffset(view, row, col);
- if (!in_selection(view->selection, off)) {
- view->selection.beg = view->selection.end = off;
- view->selection.col = buf_getcol(&(view->buffer), view->selection.end);
- sync_view(view, view->selection.end);
- }
+ view->selection.beg = view->selection.end = off;
+ view->selection.col = buf_getcol(&(view->buffer), view->selection.end);
+ sync_view(view, view->selection.end);
}
void view_selext(View* view, size_t row, size_t col) {
- view->selection.end = getoffset(view, row, col);
- sync_view(view, view->selection.end);
+ size_t off = getoffset(view, row, col);
+ if (off != SIZE_MAX) {
+ view->selection.end = off;
+ sync_view(view, view->selection.end);
+ }
}
void view_insert(View* view, Rune rune) {
view_setcursor(getview(id), row, col);
MouseBtns[MOUSE_BTN_LEFT].pressed = false;
MouseBtns[MOUSE_BTN_LEFT].count = 0;
+ } else if (MouseBtns[MOUSE_BTN_LEFT].region < id) {
+ } else if (MouseBtns[MOUSE_BTN_LEFT].region > id) {
} else {
view_selext(getview(id), row, col);
}
uint32_t now = getmillis();
uint32_t elapsed = now - MouseBtns[btn].time;
MouseBtns[btn].time = now;
+ MouseBtns[btn].region = id;
if (elapsed <= 250)
MouseBtns[btn].count++;
else