@@ -68,6 +68,21 @@ pub struct ViewConfig {
6868 pub code_font : FontId ,
6969 pub diff_colors : Vec < Color32 > ,
7070 pub reverse_fn_order : bool ,
71+ pub theme : eframe:: Theme ,
72+ #[ serde( skip) ]
73+ pub text_color : Color32 , // GRAY
74+ #[ serde( skip) ]
75+ pub emphasized_text_color : Color32 , // LIGHT_GRAY
76+ #[ serde( skip) ]
77+ pub deemphasized_text_color : Color32 , // DARK_GRAY
78+ #[ serde( skip) ]
79+ pub highlight_color : Color32 , // WHITE
80+ #[ serde( skip) ]
81+ pub replace_color : Color32 , // LIGHT_BLUE
82+ #[ serde( skip) ]
83+ pub insert_color : Color32 , // GREEN
84+ #[ serde( skip) ]
85+ pub delete_color : Color32 , // RED
7186}
7287
7388impl Default for ViewConfig {
@@ -77,6 +92,14 @@ impl Default for ViewConfig {
7792 code_font : FontId { size : 14.0 , family : FontFamily :: Monospace } ,
7893 diff_colors : DEFAULT_COLOR_ROTATION . to_vec ( ) ,
7994 reverse_fn_order : false ,
95+ theme : eframe:: Theme :: Dark ,
96+ text_color : Color32 :: GRAY ,
97+ emphasized_text_color : Color32 :: LIGHT_GRAY ,
98+ deemphasized_text_color : Color32 :: DARK_GRAY ,
99+ highlight_color : Color32 :: WHITE ,
100+ replace_color : Color32 :: LIGHT_BLUE ,
101+ insert_color : Color32 :: GREEN ,
102+ delete_color : Color32 :: from_rgb ( 200 , 40 , 41 ) ,
80103 }
81104 }
82105}
@@ -249,7 +272,7 @@ impl eframe::App for App {
249272 let Self { config, view_state, .. } = self ;
250273
251274 {
252- let config = & view_state. view_config ;
275+ let config = & mut view_state. view_config ;
253276 let mut style = ( * ctx. style ( ) ) . clone ( ) ;
254277 style. text_styles . insert ( TextStyle :: Body , FontId {
255278 size : ( config. ui_font . size * 0.75 ) . floor ( ) ,
@@ -262,6 +285,28 @@ impl eframe::App for App {
262285 family : config. ui_font . family . clone ( ) ,
263286 } ) ;
264287 style. text_styles . insert ( TextStyle :: Monospace , config. code_font . clone ( ) ) ;
288+ match config. theme {
289+ eframe:: Theme :: Dark => {
290+ style. visuals = egui:: Visuals :: dark ( ) ;
291+ config. text_color = Color32 :: GRAY ;
292+ config. emphasized_text_color = Color32 :: LIGHT_GRAY ;
293+ config. deemphasized_text_color = Color32 :: DARK_GRAY ;
294+ config. highlight_color = Color32 :: WHITE ;
295+ config. replace_color = Color32 :: LIGHT_BLUE ;
296+ config. insert_color = Color32 :: GREEN ;
297+ config. delete_color = Color32 :: from_rgb ( 200 , 40 , 41 ) ;
298+ }
299+ eframe:: Theme :: Light => {
300+ style. visuals = egui:: Visuals :: light ( ) ;
301+ config. text_color = Color32 :: GRAY ;
302+ config. emphasized_text_color = Color32 :: DARK_GRAY ;
303+ config. deemphasized_text_color = Color32 :: LIGHT_GRAY ;
304+ config. highlight_color = Color32 :: BLACK ;
305+ config. replace_color = Color32 :: DARK_BLUE ;
306+ config. insert_color = Color32 :: DARK_GREEN ;
307+ config. delete_color = Color32 :: from_rgb ( 200 , 40 , 41 ) ;
308+ }
309+ }
265310 ctx. set_style ( style) ;
266311 }
267312
@@ -323,6 +368,20 @@ impl eframe::App for App {
323368 }
324369
325370 egui:: Window :: new ( "Config" ) . open ( & mut view_state. show_config ) . show ( ctx, |ui| {
371+ egui:: ComboBox :: from_label ( "Theme" )
372+ . selected_text ( format ! ( "{:?}" , view_state. view_config. theme) )
373+ . show_ui ( ui, |ui| {
374+ ui. selectable_value (
375+ & mut view_state. view_config . theme ,
376+ eframe:: Theme :: Dark ,
377+ "Dark" ,
378+ ) ;
379+ ui. selectable_value (
380+ & mut view_state. view_config . theme ,
381+ eframe:: Theme :: Light ,
382+ "Light" ,
383+ ) ;
384+ } ) ;
326385 ui. label ( "UI font:" ) ;
327386 egui:: introspection:: font_id_ui ( ui, & mut view_state. view_config . ui_font ) ;
328387 ui. separator ( ) ;
@@ -359,15 +418,15 @@ impl eframe::App for App {
359418 {
360419 ui. scope ( |ui| {
361420 ui. style_mut ( ) . override_text_style = Some ( TextStyle :: Monospace ) ;
362- ui. colored_label ( Color32 :: LIGHT_BLUE , & demangled) ;
421+ ui. colored_label ( view_state . view_config . replace_color , & demangled) ;
363422 } ) ;
364423 if ui. button ( "Copy" ) . clicked ( ) {
365424 ui. output_mut ( |output| output. copied_text = demangled) ;
366425 }
367426 } else {
368427 ui. scope ( |ui| {
369428 ui. style_mut ( ) . override_text_style = Some ( TextStyle :: Monospace ) ;
370- ui. colored_label ( Color32 :: LIGHT_RED , "[invalid]" ) ;
429+ ui. colored_label ( view_state . view_config . replace_color , "[invalid]" ) ;
371430 } ) ;
372431 }
373432 } ) ;
0 commit comments