aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-05-10 14:26:25 -0400
committerJesse Luehrs <doy@tozt.net>2016-05-10 14:26:25 -0400
commit9a30261d2f828479458fa6d7684285307b05db17 (patch)
treeb09db7459ddbfc02e0a4c59dfbe26b5a9c004a3d
parent60b5d0e7b18bf3adbfa7124664a13da2780fe683 (diff)
downloadrunes-9a30261d2f828479458fa6d7684285307b05db17.tar.gz
runes-9a30261d2f828479458fa6d7684285307b05db17.zip
fix selection rendering
-rw-r--r--src/display.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/display.c b/src/display.c
index e2ae94c..09073c9 100644
--- a/src/display.c
+++ b/src/display.c
@@ -234,7 +234,11 @@ static void runes_display_draw_string(
{
RunesDisplay *display = t->display;
struct vt100_loc loc = {
- row + t->scr->grid->row_top - display->row_visible_offset, col };
+ row + t->scr->grid->row_top - display->row_visible_offset,
+ col };
+ struct vt100_loc eloc = {
+ row + t->scr->grid->row_top - display->row_visible_offset,
+ col + width };
struct vt100_cell_attrs *attrs;
cairo_pattern_t *bg = NULL, *fg = NULL;
int bg_is_custom = 0, fg_is_custom = 0;
@@ -246,7 +250,26 @@ static void runes_display_draw_string(
attrs = &cells[0]->attrs;
- /* XXX */
+ if (len > 1
+ && display->has_selection
+ && (display->selection_start.row != display->selection_end.row
+ || display->selection_start.col != display->selection_end.col)
+ && (runes_display_loc_is_between(
+ display->selection_start, loc, eloc)
+ || runes_display_loc_is_between(
+ display->selection_end, loc, eloc))) {
+ size_t i;
+ int c = col;
+
+ for (i = 0; i < len; ++i) {
+ int width = cells[i]->is_wide ? 2 : 1;
+
+ runes_display_draw_string(t, row, c, width, &cells[i], 1);
+ c += width;
+ }
+ return;
+ }
+
selected = runes_display_loc_is_selected(t, loc);
switch (attrs->bgcolor.type) {