summaryrefslogtreecommitdiff
path: root/src/config/theme/editor/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/theme/editor/mod.rs')
-rw-r--r--src/config/theme/editor/mod.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/config/theme/editor/mod.rs b/src/config/theme/editor/mod.rs
new file mode 100644
index 0000000..d9e2b16
--- /dev/null
+++ b/src/config/theme/editor/mod.rs
@@ -0,0 +1,74 @@
+use mlua::UserData;
+
+use crate::lua::evalsto::EvalTo;
+use crate::widgets::luaeditor::theme::HighlightTheme;
+
+use super::super::GlobalConfig;
+use super::style::Style;
+
+#[derive(Clone, Debug, Default)]
+pub struct EditorTheme {
+ pub background: EvalTo<Style, ()>,
+ pub highlight: HighlightTheme,
+ pub cursor_line: EvalTo<Style, ()>,
+ pub line_number: EvalTo<Style, ()>,
+ pub active_line_number: EvalTo<Style, ()>,
+}
+
+impl EditorTheme {
+ pub const fn new() -> Self {
+ Self {
+ background: EvalTo::Value(Style::new()),
+ highlight: HighlightTheme::new(),
+ cursor_line: EvalTo::Value(Style::new()),
+ line_number: EvalTo::Value(Style::new()),
+ active_line_number: EvalTo::Value(Style::new()),
+ }
+ }
+}
+
+macro_rules! cfg {
+ () => {
+ GlobalConfig::instance().theme.editor
+ };
+}
+
+macro_rules! cfg_mut {
+ () => {
+ GlobalConfig::instance_mut().theme.editor
+ };
+}
+
+impl UserData for EditorTheme {
+ fn add_fields<'lua, F: mlua::prelude::LuaUserDataFields<'lua, Self>>(fields: &mut F) {
+ fields.add_field_function_get("background", |_, _| Ok(cfg!().background.clone()));
+ fields.add_field_function_set("background", |_, _, background: EvalTo<Style, ()>| {
+ cfg_mut!().background = background;
+ Ok(())
+ });
+
+ fields.add_field_function_get("highlight", |_, _| Ok(cfg!().highlight.clone()));
+ fields.add_field_function_set("highlight", |_, _, highlight: HighlightTheme| {
+ cfg_mut!().highlight = highlight;
+ Ok(())
+ });
+
+ fields.add_field_function_get("cursor_line", |_, _| Ok(cfg!().cursor_line.clone()));
+ fields.add_field_function_set("cursor_line", |_, _, cursor_line: EvalTo<Style, ()>| {
+ cfg_mut!().cursor_line = cursor_line;
+ Ok(())
+ });
+
+ fields.add_field_function_get("line_number", |_, _| Ok(cfg!().line_number.clone()));
+ fields.add_field_function_set("line_number", |_, _, line_number: EvalTo<Style, ()>| {
+ cfg_mut!().line_number = line_number;
+ Ok(())
+ });
+
+ fields.add_field_function_get("active_line_number", |_, _| Ok(cfg!().active_line_number.clone()));
+ fields.add_field_function_set("active_line_number", |_, _, active_line_number: EvalTo<Style, ()>| {
+ cfg_mut!().active_line_number = active_line_number;
+ Ok(())
+ });
+ }
+}