From: Jonas Fonseca Date: Wed, 2 Apr 2008 21:14:40 +0000 (+0200) Subject: Add draw_lineno() and use when drawing the blame and pager view X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=f4de14c5762fe2beef8633a254c470a37376b4c2;p=tig.git Add draw_lineno() and use when drawing the blame and pager view --- diff --git a/tig.c b/tig.c index 413bd04..ee9d706 100644 --- a/tig.c +++ b/tig.c @@ -1482,6 +1482,43 @@ draw_text(struct view *view, const char *string, int max_len, return len; } +static int +draw_lineno(struct view *view, unsigned int lineno, int max, bool selected) +{ + static char fmt[] = "%1ld"; + char number[10] = " "; + int max_number = MIN(view->digits, STRING_SIZE(number)); + bool showtrimmed = FALSE; + int col; + + lineno += view->offset + 1; + if (lineno == 1 || (lineno % opt_num_interval) == 0) { + if (view->digits <= 9) + fmt[1] = '0' + view->digits; + + if (!string_format(number, fmt, lineno)) + number[0] = 0; + showtrimmed = TRUE; + } + + if (max < max_number) + max_number = max; + + col = draw_text(view, number, max_number, showtrimmed, selected); + if (col < max) { + if (!selected) + wattrset(view->win, A_NORMAL); + waddch(view->win, ACS_VLINE); + col++; + } + if (col < max) { + waddch(view->win, ' '); + col++; + } + + return col; +} + static bool draw_view_line(struct view *view, unsigned int lineno) { @@ -2700,39 +2737,35 @@ view_driver(struct view *view, enum request request) static bool pager_draw(struct view *view, struct line *line, unsigned int lineno, bool selected) { + static char spaces[] = " "; char *text = line->data; enum line_type type = line->type; - int attr; + int attr = A_NORMAL; + int col = 0; wmove(view->win, lineno, 0); if (selected) { type = LINE_CURSOR; wchgat(view->win, -1, 0, type, NULL); + attr = get_line_attr(type); } - - attr = get_line_attr(type); wattrset(view->win, attr); - if (opt_line_number || opt_tab_size < TABSIZE) { - static char spaces[] = " "; - int col_offset = 0, col = 0; - - if (opt_line_number) { - unsigned long real_lineno = view->offset + lineno + 1; - - if (real_lineno == 1 || - (real_lineno % opt_num_interval) == 0) { - wprintw(view->win, "%.*d", view->digits, real_lineno); + if (opt_line_number) { + col += draw_lineno(view, lineno, view->width, selected); + if (col >= view->width) + return TRUE; + } - } else { - waddnstr(view->win, spaces, - MIN(view->digits, STRING_SIZE(spaces))); - } - waddstr(view->win, ": "); - col_offset = view->digits + 2; - } + if (!selected) { + attr = get_line_attr(type); + wattrset(view->win, attr); + } + if (opt_tab_size < TABSIZE) { + int col_offset = col; + col = 0; while (text && col_offset + col < view->width) { int cols_max = view->width - col_offset - col; char *pos = text; @@ -2754,7 +2787,7 @@ pager_draw(struct view *view, struct line *line, unsigned int lineno, bool selec } } else { - draw_text(view, text, view->width, TRUE, selected); + draw_text(view, text, view->width - col, TRUE, selected); } return TRUE; @@ -3599,43 +3632,13 @@ blame_draw(struct view *view, struct line *line, unsigned int lineno, bool selec } { - unsigned long real_lineno = view->offset + lineno + 1; - char number[10] = " "; - int max = MIN(view->digits, STRING_SIZE(number)); - bool showtrimmed = FALSE; - - if (real_lineno == 1 || - (real_lineno % opt_num_interval) == 0) { - char fmt[] = "%1ld"; - - if (view->digits <= 9) - fmt[1] = '0' + view->digits; - - if (!string_format(number, fmt, real_lineno)) - number[0] = 0; - showtrimmed = TRUE; - } - - if (max > view->width - col) - max = view->width - col; if (!selected) wattrset(view->win, get_line_attr(LINE_BLAME_LINENO)); - col += draw_text(view, number, max, showtrimmed, selected); + col += draw_lineno(view, lineno, view->width - col, selected); if (col >= view->width) return TRUE; } - if (!selected) - wattrset(view->win, A_NORMAL); - - if (col >= view->width) - return TRUE; - waddch(view->win, ACS_VLINE); - col++; - if (col >= view->width) - return TRUE; - waddch(view->win, ' '); - col++; col += draw_text(view, blame->text, view->width - col, TRUE, selected); return TRUE;