use mlua::UserData; use crate::config::DUMMY_CONFIG; use crate::lua::evalsto::EvalTo; use crate::widgets::luaeditor::theme::HighlightTheme; use self::bar::EditorBarTheme; use super::super::GlobalConfig; use super::style::Style; pub mod bar; #[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, pub bar: EditorBarTheme, } 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()), bar: EditorBarTheme::new(), } } } macro_rules! cfg { () => { GlobalConfig::get().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!().background = background; Ok(()) }); fields.add_field_function_get("highlight", |_, _| Ok(cfg!().highlight.clone())); fields.add_field_function_set("highlight", |_, _, highlight: HighlightTheme| { cfg!().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!().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!().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!().active_line_number = active_line_number; Ok(()) }, ); fields.add_field_method_get("bar", |_, _| Ok(DUMMY_CONFIG.theme.editor.bar)) } }