diff options
Diffstat (limited to 'src/nvim/decoration.h')
-rw-r--r-- | src/nvim/decoration.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/nvim/decoration.h b/src/nvim/decoration.h new file mode 100644 index 0000000000..90fdc3dc43 --- /dev/null +++ b/src/nvim/decoration.h @@ -0,0 +1,71 @@ +#ifndef NVIM_DECORATION_H +#define NVIM_DECORATION_H + +#include "nvim/pos.h" +#include "nvim/buffer_defs.h" +#include "nvim/extmark_defs.h" + +// actual Decoration data is in extmark_defs.h + +typedef struct { + char *text; + int hl_id; +} VirtTextChunk; + +typedef kvec_t(VirtTextChunk) VirtText; +#define VIRTTEXT_EMPTY ((VirtText)KV_INITIAL_VALUE) + +struct Decoration +{ + int hl_id; // highlight group + VirtText virt_text; + // TODO(bfredl): style, signs, etc + bool shared; // shared decoration, don't free +}; + +typedef struct { + int start_row; + int start_col; + int end_row; + int end_col; + int attr_id; + VirtText *virt_text; + bool virt_text_owned; +} HlRange; + +typedef struct { + MarkTreeIter itr[1]; + kvec_t(HlRange) active; + buf_T *buf; + int top_row; + int row; + int col_until; + int current; + VirtText *virt_text; +} DecorState; + +typedef struct { + NS ns_id; + bool active; + LuaRef redraw_start; + LuaRef redraw_buf; + LuaRef redraw_win; + LuaRef redraw_line; + LuaRef redraw_end; + LuaRef hl_def; + int hl_valid; +} DecorProvider; + +EXTERN kvec_t(DecorProvider) decor_providers INIT(= KV_INITIAL_VALUE); +EXTERN DecorState decor_state INIT(= { 0 }); + +#define DECORATION_PROVIDER_INIT(ns_id) (DecorProvider) \ + { ns_id, false, LUA_NOREF, LUA_NOREF, \ + LUA_NOREF, LUA_NOREF, LUA_NOREF, \ + LUA_NOREF, -1 } + +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "decoration.h.generated.h" +#endif + +#endif // NVIM_DECORATION_H |