static bool draw_commit_title(struct view *view, struct view_column *column, const struct graph *graph, const struct graph_canvas *graph_canvas, const struct ref *refs, const char *commit_title) { if (graph && graph_canvas && column->opt.commit_title.graph && draw_graph(view, graph, graph_canvas)) return true; if (draw_refs(view, column, refs)) return true; return draw_text_overflow(view, commit_title, LINE_DEFAULT, column->opt.commit_title.overflow, 0); }
bool view_column_draw(struct view *view, struct line *line, unsigned int lineno) { struct view_column *column; struct view_column_data column_data = {}; if (!view->ops->get_column_data(view, line, &column_data)) return TRUE; for (column = view->columns; column; column = column->next) { mode_t mode = column_data.mode ? *column_data.mode : 0; int width = column->width; if (column->hidden) continue; switch (column->type) { case VIEW_COLUMN_DATE: if (draw_date(view, column, column_data.date)) return TRUE; continue; case VIEW_COLUMN_AUTHOR: if (draw_author(view, column, column_data.author)) return TRUE; continue; case VIEW_COLUMN_REF: { const struct ref *ref = column_data.ref; enum line_type type = !ref || !ref->valid ? LINE_DEFAULT : get_line_type_from_ref(ref); const char *name = ref ? ref->name : NULL; if (draw_field(view, type, name, width, ALIGN_LEFT, FALSE)) return TRUE; continue; } case VIEW_COLUMN_ID: if (draw_id(view, column, column_data.id)) return TRUE; continue; case VIEW_COLUMN_LINE_NUMBER: if (draw_lineno(view, column, column_data.line_number ? *column_data.line_number : lineno)) return TRUE; continue; case VIEW_COLUMN_MODE: if (draw_mode(view, mode)) return TRUE; continue; case VIEW_COLUMN_FILE_SIZE: if (draw_file_size(view, column, column_data.file_size ? *column_data.file_size : 0, mode)) return TRUE; continue; case VIEW_COLUMN_COMMIT_TITLE: if (column_data.graph && draw_graph(view, column_data.graph)) return TRUE; if (column_data.refs && draw_refs(view, column, column_data.refs)) return TRUE; if (draw_commit_title(view, column_data.commit_title, 0)) return TRUE; continue; case VIEW_COLUMN_FILE_NAME: if (draw_filename(view, column, column_data.file_name, TRUE, mode)) return TRUE; continue; case VIEW_COLUMN_TEXT: if (line->wrapped && draw_text(view, LINE_DELIMITER, "+")) return TRUE; if (draw_text(view, line->type, column_data.text)) return TRUE; continue; } } return TRUE; }