summaryrefslogtreecommitdiff
path: root/view.h
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-03-14 16:53:53 +0100
committerMarc André Tanner <mat@brain-dump.org>2017-03-14 19:04:21 +0100
commit9bcf2667e7e239873597b7ec2172206a9af18071 (patch)
tree7e9ccb42fa665ba01be65b93fc995fa76719aaf7 /view.h
parentbed289a96e1ed17e4b9fa4f9e22227fcf13cc818 (diff)
Restructure display code
Use pull instead of push based model for display code. Previously view.c was calling into the ui frontend code, with the new scheme this switches around: the necessary data is fetched by the ui as necessary. The UI independent display code is moved out of view.c/ui-curses.c into vis.c. The cell styles are now directly embedded into the Cell struct. New UI styles are introduced for: - status bar (focused / non-focused) - info message - window separator - EOF symbol You will have to update your color themes. The terminal output code is further abstracted into a generic ui-terminal.c part which keeps track of the whole in-memory cell matrix and #includes ui-terminal-curses.c for the actual terminal output. This architecture currently assumes that there are no overlapping windows. It will also allow non-curses based terminal user interfaces.
Diffstat (limited to 'view.h')
-rw-r--r--view.h29
1 files changed, 12 insertions, 17 deletions
diff --git a/view.h b/view.h
index 4f25588..6c30b51 100644
--- a/view.h
+++ b/view.h
@@ -13,23 +13,15 @@ typedef struct Selection Selection;
#include "register.h"
typedef struct {
- void *data;
- void (*draw)(void *data);
-} ViewEvent;
-
-typedef struct {
- int width; /* display width i.e. number of columns occupied by this character */
+ char data[16]; /* utf8 encoded character displayed in this cell (might be more than
+ one Unicode codepoint. might also not be the same as in the
+ underlying text, for example tabs get expanded */
size_t len; /* number of bytes the character displayed in this cell uses, for
characters which use more than 1 column to display, their length
is stored in the leftmost cell whereas all following cells
occupied by the same character have a length of 0. */
- char data[16]; /* utf8 encoded character displayed in this cell (might be more than
- one Unicode codepoint. might also not be the same as in the
- underlying text, for example tabs get expanded */
- enum UiStyle style; /* style id used to display this cell */
- bool selected; /* whether this cell is part of a selected region */
- bool cursor; /* whether a cursor is currently located on the cell */
- bool cursor_primary;/* whether it is the primary cursor located on the cell */
+ int width; /* display width i.e. number of columns occupied by this character */
+ CellStyle style; /* colors and attributes used to display this cell */
} Cell;
typedef struct Line Line;
@@ -41,7 +33,7 @@ struct Line { /* a line on the screen, *not* in the file */
Cell cells[]; /* win->width cells storing information about the displayed characters */
};
-View *view_new(Text*, ViewEvent*);
+View *view_new(Text*);
void view_ui(View*, UiWin*);
/* change associated text displayed in this window */
void view_reload(View*, Text*);
@@ -50,8 +42,9 @@ void view_free(View*);
bool view_resize(View*, int width, int height);
int view_height_get(View*);
int view_width_get(View*);
+void view_dirty(View*);
void view_draw(View*);
-void view_update(View*);
+bool view_update(View*);
/* changes how many spaces are used for one tab (must be >0), redraws the window */
void view_tabwidth_set(View*, int tabwidth);
@@ -80,8 +73,9 @@ size_t view_scroll_halfpage_down(View*);
/* place the cursor at the start ot the n-th window line, counting from 1 */
size_t view_screenline_goto(View*, int n);
-const Line *view_lines_get(View*);
-const Line *view_line_get(View*);
+Line *view_lines_first(View*);
+Line *view_lines_last(View*);
+Line *view_cursors_line_get(Cursor*);
/* redraw current cursor line at top/center/bottom of window */
void view_redraw_top(View*);
void view_redraw_center(View*);
@@ -100,6 +94,7 @@ enum UiOption view_options_get(View*);
void view_colorcolumn_set(View*, int col);
int view_colorcolumn_get(View*);
+bool view_coord_get(View*, size_t pos, Line **retline, int *retrow, int *retcol);
/* A view can manage multiple cursors, one of which (the main cursor) is always
* placed within the visible viewport. All functions named view_cursor_* operate
* on this cursor. Additional cursor can be created and manipulated using the