diff options
Diffstat (limited to 'src/config/theme/editor/mod.rs')
| -rw-r--r-- | src/config/theme/editor/mod.rs | 74 |
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(()) + }); + } +} |