mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
[color] Restore painting of trailing spaces
This commit is contained in:
parent
2129eadcbd
commit
c2bdd5a723
@ -141,6 +141,17 @@ draw_char_data(struct terminal *term, int x, int y, unsigned char data)
|
|||||||
set_screen_dirty(term->screen, y, y);
|
set_screen_dirty(term->screen, y, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
draw_space(struct terminal *term, int x, int y, struct screen_char *color)
|
||||||
|
{
|
||||||
|
struct screen_char *screen_char = get_char(term, x, y);
|
||||||
|
|
||||||
|
if (!screen_char) return;
|
||||||
|
|
||||||
|
screen_char->data = ' ';
|
||||||
|
if (color) screen_char->c = color->c;
|
||||||
|
}
|
||||||
|
|
||||||
/*! Used by viewer to copy over a document.
|
/*! Used by viewer to copy over a document.
|
||||||
* When doing frame drawing @a x can be different than 0. */
|
* When doing frame drawing @a x can be different than 0. */
|
||||||
void
|
void
|
||||||
|
@ -269,6 +269,9 @@ void draw_char(struct terminal *term, int x, int y,
|
|||||||
struct color_pair *color);
|
struct color_pair *color);
|
||||||
#endif /* CONFIG_UTF8 */
|
#endif /* CONFIG_UTF8 */
|
||||||
|
|
||||||
|
void draw_space(struct terminal *term, int x, int y,
|
||||||
|
struct screen_char *color);
|
||||||
|
|
||||||
/** Draws area defined by @a box using the same colors and attributes. */
|
/** Draws area defined by @a box using the same colors and attributes. */
|
||||||
#ifdef CONFIG_UTF8
|
#ifdef CONFIG_UTF8
|
||||||
void draw_box(struct terminal *term, struct el_box *box,
|
void draw_box(struct terminal *term, struct el_box *box,
|
||||||
|
@ -293,6 +293,8 @@ draw_doc(struct session *ses, struct document_view *doc_view, int active)
|
|||||||
struct view_state *vs;
|
struct view_state *vs;
|
||||||
struct terminal *term;
|
struct terminal *term;
|
||||||
struct el_box *box;
|
struct el_box *box;
|
||||||
|
struct screen_char *last = NULL;
|
||||||
|
|
||||||
int vx, vy;
|
int vx, vy;
|
||||||
int y;
|
int y;
|
||||||
|
|
||||||
@ -409,13 +411,43 @@ draw_doc(struct session *ses, struct document_view *doc_view, int active)
|
|||||||
for (y = int_max(vy, 0);
|
for (y = int_max(vy, 0);
|
||||||
y < int_min(doc_view->document->height, box->height + vy);
|
y < int_min(doc_view->document->height, box->height + vy);
|
||||||
y++) {
|
y++) {
|
||||||
|
struct screen_char *first = NULL;
|
||||||
|
int i, j;
|
||||||
|
int last_index = 0;
|
||||||
int st = int_max(vx, 0);
|
int st = int_max(vx, 0);
|
||||||
int en = int_min(doc_view->document->data[y].length,
|
int en = int_min(doc_view->document->data[y].length,
|
||||||
box->width + vx);
|
box->width + vx);
|
||||||
|
int max = int_min(en, st + 200);
|
||||||
|
|
||||||
if (en - st <= 0) continue;
|
if (en - st > 0) {
|
||||||
draw_line(term, box->x + st - vx, box->y + y - vy, en - st,
|
draw_line(term, box->x + st - vx, box->y + y - vy,
|
||||||
|
en - st,
|
||||||
&doc_view->document->data[y].chars[st]);
|
&doc_view->document->data[y].chars[st]);
|
||||||
|
|
||||||
|
for (i = en - 1; i >= 0; --i) {
|
||||||
|
if (doc_view->document->data[y].chars[i].data != ' ') {
|
||||||
|
last = &doc_view->document->data[y].chars[i];
|
||||||
|
last_index = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = st; i < max; i++) {
|
||||||
|
if (doc_view->document->data[y].chars[i].data != ' ') {
|
||||||
|
first = &doc_view->document->data[y].chars[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = st; j < i; j++) {
|
||||||
|
draw_space(term, box->x + j - vx, box->y + y - vy,
|
||||||
|
first);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = last_index; i < box->width + vx; i++) {
|
||||||
|
draw_space(term, box->x + i - vx, box->y + y - vy,
|
||||||
|
last);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
draw_view_status(ses, doc_view, active);
|
draw_view_status(ses, doc_view, active);
|
||||||
if (has_search_word(doc_view))
|
if (has_search_word(doc_view))
|
||||||
|
Loading…
Reference in New Issue
Block a user