aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/decoration.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/decoration.h')
-rw-r--r--src/nvim/decoration.h71
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