From cb9ae4f6a13f9e4001539dfed359f55a200c758c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 3 Jan 2020 23:34:58 +0100 Subject: [PATCH] render: coord_is_selected: handle block selections --- render.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/render.c b/render.c index ba70aee0..755304ea 100644 --- a/render.c +++ b/render.c @@ -350,16 +350,30 @@ coord_is_selected(const struct terminal *term, int col, int row) row += term->grid->view; - if (start->row == end->row) { - return row == start->row && col >= start->col && col <= end->col; - } else { - if (row == start->row) - return col >= start->col; - else if (row == end->row) - return col <= end->col; + switch (term->selection.kind) { + case SELECTION_NORMAL: + if (start->row == end->row) { + return row == start->row && col >= start->col && col <= end->col; + } else { + if (row == start->row) + return col >= start->col; + else if (row == end->row) + return col <= end->col; + else + return row >= start->row && row <= end->row; + } + + case SELECTION_BLOCK: + if (start->col <= end->col) + return row >= start->row && row <= end->row && + col >= start->col && col <= end->col; else - return row >= start->row && row <= end->row; + return row >= start->row && row <= end->row && + col <= start->col && col >= end->col; } + + assert(false); + return false; } static int