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, pub highlight: HighlightTheme, pub cursor_line: EvalTo, pub line_number: EvalTo, pub active_line_number: EvalTo, } 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| { 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| { 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| { 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| { cfg_mut!().active_line_number = active_line_number; Ok(()) }); } }