|
|
@@ -267,6 +267,9 @@ void ThemeManager::create_default_themes() {
|
|
|
register_theme(create_default_theme());
|
|
|
register_theme(create_everforest_theme());
|
|
|
register_theme(create_dracula_theme());
|
|
|
+ register_theme(create_solarized_dark_theme());
|
|
|
+ register_theme(create_nord_theme());
|
|
|
+ register_theme(create_gruvbox_light_theme());
|
|
|
}
|
|
|
|
|
|
std::shared_ptr<Theme> ThemeManager::create_everforest_theme() {
|
|
|
@@ -400,4 +403,318 @@ std::shared_ptr<Theme> ThemeManager::create_dracula_theme() {
|
|
|
return theme;
|
|
|
}
|
|
|
|
|
|
+std::shared_ptr<Theme> ThemeManager::create_solarized_dark_theme() {
|
|
|
+ auto theme = std::make_shared<Theme>("solarized-dark");
|
|
|
+
|
|
|
+ // Solarized Dark color palette
|
|
|
+ Color base03(0, 43, 54); // background
|
|
|
+ Color base02(7, 54, 66); // background highlights
|
|
|
+ Color base01(88, 110, 117); // comments / secondary content
|
|
|
+ Color base00(101, 123, 131); // body text / default code / primary content
|
|
|
+ Color base0(131, 148, 150); // primary content / body text
|
|
|
+ Color base1(147, 161, 161); // optional emphasized content
|
|
|
+ Color base2(238, 232, 213); // background highlights
|
|
|
+ Color base3(253, 246, 227); // background
|
|
|
+
|
|
|
+ Color yellow(181, 137, 0); // constants
|
|
|
+ Color orange(203, 75, 22); // regex, numbers
|
|
|
+ Color red(220, 50, 47); // keywords
|
|
|
+ Color magenta(211, 54, 130); // strings
|
|
|
+ Color violet(108, 113, 196); // functions
|
|
|
+ Color blue(38, 139, 210); // variables
|
|
|
+ Color cyan(42, 161, 152); // special
|
|
|
+ Color green(133, 153, 0); // types
|
|
|
+
|
|
|
+ // Set face attributes using the modern face system
|
|
|
+ FaceAttributes normal_attrs;
|
|
|
+ normal_attrs.foreground = base0;
|
|
|
+ normal_attrs.background = base03;
|
|
|
+ theme->set_face("normal", normal_attrs);
|
|
|
+
|
|
|
+ FaceAttributes keyword_attrs;
|
|
|
+ keyword_attrs.foreground = red;
|
|
|
+ keyword_attrs.background = base03;
|
|
|
+ keyword_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("keyword", keyword_attrs);
|
|
|
+
|
|
|
+ FaceAttributes string_attrs;
|
|
|
+ string_attrs.foreground = magenta;
|
|
|
+ string_attrs.background = base03;
|
|
|
+ theme->set_face("string", string_attrs);
|
|
|
+
|
|
|
+ FaceAttributes comment_attrs;
|
|
|
+ comment_attrs.foreground = base01;
|
|
|
+ comment_attrs.background = base03;
|
|
|
+ comment_attrs.slant = FontSlant::Italic;
|
|
|
+ theme->set_face("comment", comment_attrs);
|
|
|
+
|
|
|
+ FaceAttributes function_attrs;
|
|
|
+ function_attrs.foreground = violet;
|
|
|
+ function_attrs.background = base03;
|
|
|
+ theme->set_face("function", function_attrs);
|
|
|
+
|
|
|
+ FaceAttributes type_attrs;
|
|
|
+ type_attrs.foreground = green;
|
|
|
+ type_attrs.background = base03;
|
|
|
+ theme->set_face("type", type_attrs);
|
|
|
+
|
|
|
+ FaceAttributes number_attrs;
|
|
|
+ number_attrs.foreground = orange;
|
|
|
+ number_attrs.background = base03;
|
|
|
+ theme->set_face("number", number_attrs);
|
|
|
+
|
|
|
+ FaceAttributes constant_attrs;
|
|
|
+ constant_attrs.foreground = yellow;
|
|
|
+ constant_attrs.background = base03;
|
|
|
+ theme->set_face("constant", constant_attrs);
|
|
|
+
|
|
|
+ FaceAttributes error_attrs;
|
|
|
+ error_attrs.foreground = red;
|
|
|
+ error_attrs.background = base02;
|
|
|
+ error_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("error", error_attrs);
|
|
|
+
|
|
|
+ FaceAttributes selection_attrs;
|
|
|
+ selection_attrs.foreground = base0;
|
|
|
+ selection_attrs.background = base02;
|
|
|
+ theme->set_face("selection", selection_attrs);
|
|
|
+
|
|
|
+ FaceAttributes cursor_attrs;
|
|
|
+ cursor_attrs.foreground = base03;
|
|
|
+ cursor_attrs.background = base0;
|
|
|
+ theme->set_face("cursor", cursor_attrs);
|
|
|
+
|
|
|
+ FaceAttributes statusline_attrs;
|
|
|
+ statusline_attrs.foreground = base1;
|
|
|
+ statusline_attrs.background = base02;
|
|
|
+ theme->set_face("statusline", statusline_attrs);
|
|
|
+
|
|
|
+ FaceAttributes statusline_inactive_attrs;
|
|
|
+ statusline_inactive_attrs.foreground = base01;
|
|
|
+ statusline_inactive_attrs.background = base02;
|
|
|
+ theme->set_face("statusline-inactive", statusline_inactive_attrs);
|
|
|
+
|
|
|
+ FaceAttributes line_number_attrs;
|
|
|
+ line_number_attrs.foreground = base01;
|
|
|
+ line_number_attrs.background = base03;
|
|
|
+ theme->set_face("line-number", line_number_attrs);
|
|
|
+
|
|
|
+ FaceAttributes minibuffer_prompt_attrs;
|
|
|
+ minibuffer_prompt_attrs.foreground = cyan;
|
|
|
+ minibuffer_prompt_attrs.background = base03;
|
|
|
+ minibuffer_prompt_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("minibuffer-prompt", minibuffer_prompt_attrs);
|
|
|
+
|
|
|
+ return theme;
|
|
|
+}
|
|
|
+
|
|
|
+std::shared_ptr<Theme> ThemeManager::create_nord_theme() {
|
|
|
+ auto theme = std::make_shared<Theme>("nord");
|
|
|
+
|
|
|
+ // Nord color palette
|
|
|
+ Color nord0(46, 52, 64); // Polar Night - darkest
|
|
|
+ Color nord1(59, 66, 82); // Polar Night
|
|
|
+ Color nord2(67, 76, 94); // Polar Night
|
|
|
+ Color nord3(76, 86, 106); // Polar Night - lightest
|
|
|
+ Color nord4(216, 222, 233); // Snow Storm - dark
|
|
|
+ Color nord5(229, 233, 240); // Snow Storm
|
|
|
+ Color nord6(236, 239, 244); // Snow Storm - lightest
|
|
|
+ Color nord7(143, 188, 187); // Frost - cyan
|
|
|
+ Color nord8(136, 192, 208); // Frost - light blue
|
|
|
+ Color nord9(129, 161, 193); // Frost - blue
|
|
|
+ Color nord10(94, 129, 172); // Frost - dark blue
|
|
|
+ Color nord11(191, 97, 106); // Aurora - red
|
|
|
+ Color nord12(208, 135, 112); // Aurora - orange
|
|
|
+ Color nord13(235, 203, 139); // Aurora - yellow
|
|
|
+ Color nord14(163, 190, 140); // Aurora - green
|
|
|
+ Color nord15(180, 142, 173); // Aurora - purple
|
|
|
+
|
|
|
+ // Set face attributes
|
|
|
+ FaceAttributes normal_attrs;
|
|
|
+ normal_attrs.foreground = nord4;
|
|
|
+ normal_attrs.background = nord0;
|
|
|
+ theme->set_face("normal", normal_attrs);
|
|
|
+
|
|
|
+ FaceAttributes keyword_attrs;
|
|
|
+ keyword_attrs.foreground = nord9;
|
|
|
+ keyword_attrs.background = nord0;
|
|
|
+ keyword_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("keyword", keyword_attrs);
|
|
|
+
|
|
|
+ FaceAttributes string_attrs;
|
|
|
+ string_attrs.foreground = nord14;
|
|
|
+ string_attrs.background = nord0;
|
|
|
+ theme->set_face("string", string_attrs);
|
|
|
+
|
|
|
+ FaceAttributes comment_attrs;
|
|
|
+ comment_attrs.foreground = nord3;
|
|
|
+ comment_attrs.background = nord0;
|
|
|
+ comment_attrs.slant = FontSlant::Italic;
|
|
|
+ theme->set_face("comment", comment_attrs);
|
|
|
+
|
|
|
+ FaceAttributes function_attrs;
|
|
|
+ function_attrs.foreground = nord8;
|
|
|
+ function_attrs.background = nord0;
|
|
|
+ theme->set_face("function", function_attrs);
|
|
|
+
|
|
|
+ FaceAttributes type_attrs;
|
|
|
+ type_attrs.foreground = nord7;
|
|
|
+ type_attrs.background = nord0;
|
|
|
+ theme->set_face("type", type_attrs);
|
|
|
+
|
|
|
+ FaceAttributes number_attrs;
|
|
|
+ number_attrs.foreground = nord15;
|
|
|
+ number_attrs.background = nord0;
|
|
|
+ theme->set_face("number", number_attrs);
|
|
|
+
|
|
|
+ FaceAttributes constant_attrs;
|
|
|
+ constant_attrs.foreground = nord13;
|
|
|
+ constant_attrs.background = nord0;
|
|
|
+ theme->set_face("constant", constant_attrs);
|
|
|
+
|
|
|
+ FaceAttributes error_attrs;
|
|
|
+ error_attrs.foreground = nord11;
|
|
|
+ error_attrs.background = nord1;
|
|
|
+ error_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("error", error_attrs);
|
|
|
+
|
|
|
+ FaceAttributes selection_attrs;
|
|
|
+ selection_attrs.foreground = nord4;
|
|
|
+ selection_attrs.background = nord2;
|
|
|
+ theme->set_face("selection", selection_attrs);
|
|
|
+
|
|
|
+ FaceAttributes cursor_attrs;
|
|
|
+ cursor_attrs.foreground = nord0;
|
|
|
+ cursor_attrs.background = nord4;
|
|
|
+ theme->set_face("cursor", cursor_attrs);
|
|
|
+
|
|
|
+ FaceAttributes statusline_attrs;
|
|
|
+ statusline_attrs.foreground = nord6;
|
|
|
+ statusline_attrs.background = nord1;
|
|
|
+ theme->set_face("statusline", statusline_attrs);
|
|
|
+
|
|
|
+ FaceAttributes statusline_inactive_attrs;
|
|
|
+ statusline_inactive_attrs.foreground = nord3;
|
|
|
+ statusline_inactive_attrs.background = nord1;
|
|
|
+ theme->set_face("statusline-inactive", statusline_inactive_attrs);
|
|
|
+
|
|
|
+ FaceAttributes line_number_attrs;
|
|
|
+ line_number_attrs.foreground = nord3;
|
|
|
+ line_number_attrs.background = nord0;
|
|
|
+ theme->set_face("line-number", line_number_attrs);
|
|
|
+
|
|
|
+ FaceAttributes minibuffer_prompt_attrs;
|
|
|
+ minibuffer_prompt_attrs.foreground = nord8;
|
|
|
+ minibuffer_prompt_attrs.background = nord0;
|
|
|
+ minibuffer_prompt_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("minibuffer-prompt", minibuffer_prompt_attrs);
|
|
|
+
|
|
|
+ return theme;
|
|
|
+}
|
|
|
+
|
|
|
+std::shared_ptr<Theme> ThemeManager::create_gruvbox_light_theme() {
|
|
|
+ auto theme = std::make_shared<Theme>("gruvbox-light");
|
|
|
+
|
|
|
+ // Gruvbox Light color palette
|
|
|
+ Color bg0(251, 241, 199); // background
|
|
|
+ Color bg1(235, 219, 178); // background soft
|
|
|
+ Color bg2(213, 196, 161); // background hard
|
|
|
+ Color bg3(189, 174, 147); // background harder
|
|
|
+ Color fg0(40, 40, 40); // foreground
|
|
|
+ Color fg1(60, 56, 54); // foreground
|
|
|
+ Color fg2(80, 73, 69); // foreground
|
|
|
+ Color fg3(102, 92, 84); // foreground
|
|
|
+ Color fg4(124, 111, 100); // gray
|
|
|
+
|
|
|
+ Color red(157, 0, 6); // red
|
|
|
+ Color green(121, 116, 14); // green
|
|
|
+ Color yellow(181, 118, 20); // yellow
|
|
|
+ Color blue(7, 102, 120); // blue
|
|
|
+ Color purple(143, 63, 113); // purple
|
|
|
+ Color aqua(66, 123, 88); // aqua
|
|
|
+ Color orange(175, 58, 3); // orange
|
|
|
+
|
|
|
+ // Set face attributes
|
|
|
+ FaceAttributes normal_attrs;
|
|
|
+ normal_attrs.foreground = fg0;
|
|
|
+ normal_attrs.background = bg0;
|
|
|
+ theme->set_face("normal", normal_attrs);
|
|
|
+
|
|
|
+ FaceAttributes keyword_attrs;
|
|
|
+ keyword_attrs.foreground = red;
|
|
|
+ keyword_attrs.background = bg0;
|
|
|
+ keyword_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("keyword", keyword_attrs);
|
|
|
+
|
|
|
+ FaceAttributes string_attrs;
|
|
|
+ string_attrs.foreground = green;
|
|
|
+ string_attrs.background = bg0;
|
|
|
+ theme->set_face("string", string_attrs);
|
|
|
+
|
|
|
+ FaceAttributes comment_attrs;
|
|
|
+ comment_attrs.foreground = fg4;
|
|
|
+ comment_attrs.background = bg0;
|
|
|
+ comment_attrs.slant = FontSlant::Italic;
|
|
|
+ theme->set_face("comment", comment_attrs);
|
|
|
+
|
|
|
+ FaceAttributes function_attrs;
|
|
|
+ function_attrs.foreground = yellow;
|
|
|
+ function_attrs.background = bg0;
|
|
|
+ theme->set_face("function", function_attrs);
|
|
|
+
|
|
|
+ FaceAttributes type_attrs;
|
|
|
+ type_attrs.foreground = purple;
|
|
|
+ type_attrs.background = bg0;
|
|
|
+ theme->set_face("type", type_attrs);
|
|
|
+
|
|
|
+ FaceAttributes number_attrs;
|
|
|
+ number_attrs.foreground = orange;
|
|
|
+ number_attrs.background = bg0;
|
|
|
+ theme->set_face("number", number_attrs);
|
|
|
+
|
|
|
+ FaceAttributes constant_attrs;
|
|
|
+ constant_attrs.foreground = aqua;
|
|
|
+ constant_attrs.background = bg0;
|
|
|
+ theme->set_face("constant", constant_attrs);
|
|
|
+
|
|
|
+ FaceAttributes error_attrs;
|
|
|
+ error_attrs.foreground = red;
|
|
|
+ error_attrs.background = bg1;
|
|
|
+ error_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("error", error_attrs);
|
|
|
+
|
|
|
+ FaceAttributes selection_attrs;
|
|
|
+ selection_attrs.foreground = fg0;
|
|
|
+ selection_attrs.background = bg2;
|
|
|
+ theme->set_face("selection", selection_attrs);
|
|
|
+
|
|
|
+ FaceAttributes cursor_attrs;
|
|
|
+ cursor_attrs.foreground = bg0;
|
|
|
+ cursor_attrs.background = fg0;
|
|
|
+ theme->set_face("cursor", cursor_attrs);
|
|
|
+
|
|
|
+ FaceAttributes statusline_attrs;
|
|
|
+ statusline_attrs.foreground = fg1;
|
|
|
+ statusline_attrs.background = bg1;
|
|
|
+ theme->set_face("statusline", statusline_attrs);
|
|
|
+
|
|
|
+ FaceAttributes statusline_inactive_attrs;
|
|
|
+ statusline_inactive_attrs.foreground = fg3;
|
|
|
+ statusline_inactive_attrs.background = bg1;
|
|
|
+ theme->set_face("statusline-inactive", statusline_inactive_attrs);
|
|
|
+
|
|
|
+ FaceAttributes line_number_attrs;
|
|
|
+ line_number_attrs.foreground = fg4;
|
|
|
+ line_number_attrs.background = bg0;
|
|
|
+ theme->set_face("line-number", line_number_attrs);
|
|
|
+
|
|
|
+ FaceAttributes minibuffer_prompt_attrs;
|
|
|
+ minibuffer_prompt_attrs.foreground = blue;
|
|
|
+ minibuffer_prompt_attrs.background = bg0;
|
|
|
+ minibuffer_prompt_attrs.weight = FontWeight::Bold;
|
|
|
+ theme->set_face("minibuffer-prompt", minibuffer_prompt_attrs);
|
|
|
+
|
|
|
+ return theme;
|
|
|
+}
|
|
|
+
|
|
|
} // namespace lumacs
|