@@ -68,6 +68,21 @@ pub struct ViewConfig {
68
68
pub code_font : FontId ,
69
69
pub diff_colors : Vec < Color32 > ,
70
70
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
71
86
}
72
87
73
88
impl Default for ViewConfig {
@@ -77,6 +92,14 @@ impl Default for ViewConfig {
77
92
code_font : FontId { size : 14.0 , family : FontFamily :: Monospace } ,
78
93
diff_colors : DEFAULT_COLOR_ROTATION . to_vec ( ) ,
79
94
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 ) ,
80
103
}
81
104
}
82
105
}
@@ -249,7 +272,7 @@ impl eframe::App for App {
249
272
let Self { config, view_state, .. } = self ;
250
273
251
274
{
252
- let config = & view_state. view_config ;
275
+ let config = & mut view_state. view_config ;
253
276
let mut style = ( * ctx. style ( ) ) . clone ( ) ;
254
277
style. text_styles . insert ( TextStyle :: Body , FontId {
255
278
size : ( config. ui_font . size * 0.75 ) . floor ( ) ,
@@ -262,6 +285,28 @@ impl eframe::App for App {
262
285
family : config. ui_font . family . clone ( ) ,
263
286
} ) ;
264
287
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
+ }
265
310
ctx. set_style ( style) ;
266
311
}
267
312
@@ -323,6 +368,20 @@ impl eframe::App for App {
323
368
}
324
369
325
370
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
+ } ) ;
326
385
ui. label ( "UI font:" ) ;
327
386
egui:: introspection:: font_id_ui ( ui, & mut view_state. view_config . ui_font ) ;
328
387
ui. separator ( ) ;
@@ -359,15 +418,15 @@ impl eframe::App for App {
359
418
{
360
419
ui. scope ( |ui| {
361
420
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) ;
363
422
} ) ;
364
423
if ui. button ( "Copy" ) . clicked ( ) {
365
424
ui. output_mut ( |output| output. copied_text = demangled) ;
366
425
}
367
426
} else {
368
427
ui. scope ( |ui| {
369
428
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]" ) ;
371
430
} ) ;
372
431
}
373
432
} ) ;
0 commit comments