Code

Add draw_lineno() and use when drawing the blame and pager view
authorJonas Fonseca <fonseca@diku.dk>
Wed, 2 Apr 2008 21:14:40 +0000 (23:14 +0200)
committerJonas Fonseca <fonseca@diku.dk>
Wed, 2 Apr 2008 21:38:04 +0000 (23:38 +0200)
tig.c

diff --git a/tig.c b/tig.c
index 413bd04b61a2766f7c1c6decde15fdfb578220fd..ee9d70639b05225c69974229b33274dc123d0184 100644 (file)
--- 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;