diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-03-14 16:53:53 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-03-14 19:04:21 +0100 |
| commit | 9bcf2667e7e239873597b7ec2172206a9af18071 (patch) | |
| tree | 7e9ccb42fa665ba01be65b93fc995fa76719aaf7 /ui.h | |
| parent | bed289a96e1ed17e4b9fa4f9e22227fcf13cc818 (diff) | |
| download | vis-9bcf2667e7e239873597b7ec2172206a9af18071.tar.gz vis-9bcf2667e7e239873597b7ec2172206a9af18071.tar.xz | |
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 'ui.h')
| -rw-r--r-- | ui.h | 25 |
1 files changed, 21 insertions, 4 deletions
@@ -42,9 +42,26 @@ enum UiStyle { UI_STYLE_SELECTION, UI_STYLE_LINENUMBER, UI_STYLE_COLOR_COLUMN, + UI_STYLE_STATUS, + UI_STYLE_STATUS_FOCUSED, + UI_STYLE_SEPARATOR, + UI_STYLE_INFO, + UI_STYLE_EOF, UI_STYLE_MAX, }; +typedef uint64_t CellAttr; +typedef short CellColor; + +static inline bool cell_color_equal(CellColor c1, CellColor c2) { + return c1 == c2; +} + +typedef struct { + CellAttr attr; + CellColor fg, bg; +} CellStyle; + #include "vis.h" #include "text.h" #include "view.h" @@ -53,7 +70,7 @@ struct Ui { bool (*init)(Ui*, Vis*); void (*free)(Ui*); void (*resize)(Ui*); - UiWin* (*window_new)(Ui*, View*, File*, enum UiOption); + UiWin* (*window_new)(Ui*, Win*, enum UiOption); void (*window_free)(UiWin*); void (*window_focus)(UiWin*); void (*window_swap)(UiWin*, UiWin*); @@ -65,6 +82,7 @@ struct Ui { void (*redraw)(Ui*); void (*update)(Ui*); void (*suspend)(Ui*); + void (*resume)(Ui*); bool (*getkey)(Ui*, TermKeyKey*); void (*terminal_save)(Ui*); void (*terminal_restore)(Ui*); @@ -73,12 +91,11 @@ struct Ui { }; struct UiWin { - void (*draw)(UiWin*); + CellStyle (*style_get)(UiWin*, enum UiStyle); void (*status)(UiWin*, const char *txt); - void (*reload)(UiWin*, File*); void (*options_set)(UiWin*, enum UiOption); enum UiOption (*options_get)(UiWin*); - bool (*syntax_style)(UiWin*, int id, const char *style); + bool (*style_define)(UiWin*, int id, const char *style); int (*window_width)(UiWin*); int (*window_height)(UiWin*); }; |
