12internal class ThemeController : MonoBehaviour
14 public ImTheme BaseTheme = SetBaseTheme(ImThemeBuiltin.Dark());
16 private bool changesDetected =
false;
18 public static ImTheme SetBaseTheme(ImTheme theme)
21 theme.Background =
new Color(0f, 0f, 0f, 1f);
22 theme.Foreground =
new Color(1f, 1f, 1f, 1f);
23 theme.Accent = AccentColor.Value;
24 theme.Control =
new Color(0.15f, 0.15f, 0.15f, 1f);
26 theme.Contrast = HighContrast.Value ? 1f : 0f;
27 theme.BorderContrast = 1f;
31 theme.BorderRadius = 1f;
32 theme.ReadOnlyColorMultiplier = 0.25f;
37 public void RegisterChanges()
39 changesDetected =
true;
41 BaseTheme.Contrast = HighContrast.Value ? 1f : 0f;
42 BaseTheme.Accent = AccentColor.Value;
45 public void DetectChanges(ImGui gui)
49 changesDetected =
false;
54 public void DrawAppearanceEditor(ImGui gui)
56 var tempValue = HighContrast.Value;
57 if (gui.Checkbox(ref tempValue,
"High contrast"))
59 HighContrast.Value = tempValue;
60 BaseTheme.Contrast = HighContrast.Value ? 1f : 0f;
64 var tempValue1 = AccentColor.Value;
65 if (gui.ColorEdit(ref tempValue1))
67 AccentColor.Value = tempValue1;
68 BaseTheme.Accent = AccentColor.Value;
73 public static bool DrawThemeEditor(ImGui gui, ref ImTheme theme)
77 gui.Separator(
"Colors");
79 using (
new LabeledScope(gui, nameof(theme.Foreground))) changed |= gui.ColorEdit(ref theme.Foreground);
80 using (
new LabeledScope(gui, nameof(theme.Background))) changed |= gui.ColorEdit(ref theme.Background);
81 using (
new LabeledScope(gui, nameof(theme.Accent))) changed |= gui.ColorEdit(ref theme.Accent);
82 using (
new LabeledScope(gui, nameof(theme.Control))) changed |= gui.ColorEdit(ref theme.Control);
83 using (
new LabeledScope(gui, nameof(theme.Contrast))) changed |= gui.NumericEdit(ref theme.Contrast, min: -1.0f, max: +1.0f, flags: ImNumericEditFlag.Slider);
84 using (
new LabeledScope(gui, nameof(theme.BorderContrast))) changed |= gui.NumericEdit(ref theme.BorderContrast, min: -1.0f, max: +2.0f, flags: ImNumericEditFlag.Slider);
86 gui.Separator(
"Values");
88 using (
new LabeledScope(gui, nameof(theme.TextSize))) changed |= gui.NumericEdit(ref theme.TextSize, min: 4.0f, max: 128.0f, flags: ImNumericEditFlag.Slider);
89 using (
new LabeledScope(gui, nameof(theme.Spacing))) changed |= gui.NumericEdit(ref theme.Spacing, min: 0.0f, max: 32.0f, flags: ImNumericEditFlag.Slider);
90 using (
new LabeledScope(gui, nameof(theme.InnerSpacing))) changed |= gui.NumericEdit(ref theme.InnerSpacing, min: 0.0f, max: 32.0f, flags: ImNumericEditFlag.Slider);
91 using (
new LabeledScope(gui, nameof(theme.Indent))) changed |= gui.NumericEdit(ref theme.Indent, min: 0.0f, max: 128.0f, flags: ImNumericEditFlag.Slider);
92 using (
new LabeledScope(gui, nameof(theme.ExtraRowHeight))) changed |= gui.NumericEdit(ref theme.ExtraRowHeight, min: 0.0f, max: 128.0f, flags: ImNumericEditFlag.Slider);
93 using (
new LabeledScope(gui, nameof(theme.ScrollBarSize))) changed |= gui.NumericEdit(ref theme.ScrollBarSize, min: 2.0f, max: 128.0f, flags: ImNumericEditFlag.Slider);
94 using (
new LabeledScope(gui, nameof(theme.WindowBorderRadius))) changed |= gui.NumericEdit(ref theme.WindowBorderRadius, min: 0.0f, max: 32.0f, flags: ImNumericEditFlag.Slider);
95 using (
new LabeledScope(gui, nameof(theme.WindowBorderThickness))) changed |= gui.NumericEdit(ref theme.WindowBorderThickness, min: 0.0f, max: 8.0f, step: 0.5f, flags: ImNumericEditFlag.Slider);
96 using (
new LabeledScope(gui, nameof(theme.BorderRadius))) changed |= gui.NumericEdit(ref theme.BorderRadius, min: 0.0f, max: 16.0f, flags: ImNumericEditFlag.Slider);
97 using (
new LabeledScope(gui, nameof(theme.BorderThickness))) changed |= gui.NumericEdit(ref theme.BorderThickness, min: 0.0f, max: 8.0f, step: 0.5f, flags: ImNumericEditFlag.Slider);
98 using (
new LabeledScope(gui, nameof(theme.ReadOnlyColorMultiplier))) changed |= gui.NumericEdit(ref theme.ReadOnlyColorMultiplier, min: 0.0f, max: 8.0f, flags: ImNumericEditFlag.Slider);
103 public void SetTheme(ImGui gui)
105 gui.SetTheme(BaseTheme);