// inspiration: brio because it's style is fucking amazing using Dalamud.Bindings.ImGui; using LightlessSync.LightlessConfiguration; using System.Numerics; namespace LightlessSync.UI.Style { internal static class MainStyle { private static LightlessConfigService? _config; public static void Init(LightlessConfigService config) => _config = config; public static bool ShouldUseTheme => _config?.Current.UseLightlessRedesign ?? false; private static bool _hasPushed; private static int _pushedColorCount; private static int _pushedStyleVarCount; public static void PushStyle() { if (_hasPushed) PopStyle(); if (!ShouldUseTheme) { _hasPushed = false; return; } _hasPushed = true; _pushedColorCount = 0; _pushedStyleVarCount = 0; Push(ImGuiCol.Text, new Vector4(255, 255, 255, 255)); Push(ImGuiCol.TextDisabled, new Vector4(128, 128, 128, 255)); Push(ImGuiCol.WindowBg, new Vector4(23, 23, 23, 248)); Push(ImGuiCol.ChildBg, new Vector4(23, 23, 23, 66)); Push(ImGuiCol.PopupBg, new Vector4(23, 23, 23, 248)); Push(ImGuiCol.Border, new Vector4(65, 65, 65, 255)); Push(ImGuiCol.BorderShadow, new Vector4(0, 0, 0, 150)); Push(ImGuiCol.FrameBg, new Vector4(40, 40, 40, 255)); Push(ImGuiCol.FrameBgHovered, new Vector4(50, 50, 50, 255)); Push(ImGuiCol.FrameBgActive, new Vector4(30, 30, 30, 255)); Push(ImGuiCol.TitleBg, new Vector4(24, 24, 24, 232)); Push(ImGuiCol.TitleBgActive, new Vector4(30, 30, 30, 255)); Push(ImGuiCol.TitleBgCollapsed, new Vector4(27, 27, 27, 255)); Push(ImGuiCol.MenuBarBg, new Vector4(36, 36, 36, 255)); Push(ImGuiCol.ScrollbarBg, new Vector4(0, 0, 0, 0)); Push(ImGuiCol.ScrollbarGrab, new Vector4(62, 62, 62, 255)); Push(ImGuiCol.ScrollbarGrabHovered, new Vector4(70, 70, 70, 255)); Push(ImGuiCol.ScrollbarGrabActive, new Vector4(70, 70, 70, 255)); Push(ImGuiCol.CheckMark, UIColors.Get("LightlessPurple")); Push(ImGuiCol.SliderGrab, new Vector4(101, 101, 101, 255)); Push(ImGuiCol.SliderGrabActive, new Vector4(123, 123, 123, 255)); Push(ImGuiCol.Button, UIColors.Get("ButtonDefault")); Push(ImGuiCol.ButtonHovered, UIColors.Get("LightlessPurple")); Push(ImGuiCol.ButtonActive, UIColors.Get("LightlessPurpleActive")); Push(ImGuiCol.Header, new Vector4(0, 0, 0, 60)); Push(ImGuiCol.HeaderHovered, new Vector4(0, 0, 0, 90)); Push(ImGuiCol.HeaderActive, new Vector4(0, 0, 0, 120)); Push(ImGuiCol.Separator, new Vector4(75, 75, 75, 121)); Push(ImGuiCol.SeparatorHovered, UIColors.Get("LightlessPurple")); Push(ImGuiCol.SeparatorActive, UIColors.Get("LightlessPurpleActive")); Push(ImGuiCol.ResizeGrip, new Vector4(0, 0, 0, 0)); Push(ImGuiCol.ResizeGripHovered, new Vector4(0, 0, 0, 0)); Push(ImGuiCol.ResizeGripActive, UIColors.Get("LightlessPurpleActive")); Push(ImGuiCol.Tab, new Vector4(40, 40, 40, 255)); Push(ImGuiCol.TabHovered, UIColors.Get("LightlessPurple")); Push(ImGuiCol.TabActive, UIColors.Get("LightlessPurpleActive")); Push(ImGuiCol.TabUnfocused, new Vector4(40, 40, 40, 255)); Push(ImGuiCol.TabUnfocusedActive, UIColors.Get("LightlessPurpleActive")); Push(ImGuiCol.DockingPreview, UIColors.Get("LightlessPurpleActive")); Push(ImGuiCol.DockingEmptyBg, new Vector4(50, 50, 50, 255)); Push(ImGuiCol.PlotLines, new Vector4(150, 150, 150, 255)); Push(ImGuiCol.TableHeaderBg, new Vector4(48, 48, 48, 255)); Push(ImGuiCol.TableBorderStrong, new Vector4(79, 79, 89, 255)); Push(ImGuiCol.TableBorderLight, new Vector4(59, 59, 64, 255)); Push(ImGuiCol.TableRowBg, new Vector4(0, 0, 0, 0)); Push(ImGuiCol.TableRowBgAlt, new Vector4(255, 255, 255, 15)); Push(ImGuiCol.TextSelectedBg, new Vector4(98, 75, 224, 255)); Push(ImGuiCol.DragDropTarget, new Vector4(98, 75, 224, 255)); Push(ImGuiCol.NavHighlight, new Vector4(98, 75, 224, 179)); Push(ImGuiCol.NavWindowingDimBg, new Vector4(204, 204, 204, 51)); Push(ImGuiCol.NavWindowingHighlight, new Vector4(204, 204, 204, 89)); PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(6, 6)); PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(4, 3)); PushStyleVar(ImGuiStyleVar.CellPadding, new Vector2(4, 4)); PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(4, 4)); PushStyleVar(ImGuiStyleVar.ItemInnerSpacing, new Vector2(4, 4)); PushStyleVar(ImGuiStyleVar.IndentSpacing, 21.0f); PushStyleVar(ImGuiStyleVar.ScrollbarSize, 10.0f); PushStyleVar(ImGuiStyleVar.GrabMinSize, 20.0f); PushStyleVar(ImGuiStyleVar.WindowBorderSize, 1.5f); PushStyleVar(ImGuiStyleVar.ChildBorderSize, 1.5f); PushStyleVar(ImGuiStyleVar.PopupBorderSize, 1.5f); PushStyleVar(ImGuiStyleVar.FrameBorderSize, 0f); PushStyleVar(ImGuiStyleVar.WindowRounding, 7f); PushStyleVar(ImGuiStyleVar.ChildRounding, 4f); PushStyleVar(ImGuiStyleVar.FrameRounding, 4f); PushStyleVar(ImGuiStyleVar.PopupRounding, 4f); PushStyleVar(ImGuiStyleVar.ScrollbarRounding, 4f); PushStyleVar(ImGuiStyleVar.GrabRounding, 4f); PushStyleVar(ImGuiStyleVar.TabRounding, 4f); } public static void PopStyle() { if (!_hasPushed) return; if (_pushedStyleVarCount > 0) ImGui.PopStyleVar(_pushedStyleVarCount); if (_pushedColorCount > 0) ImGui.PopStyleColor(_pushedColorCount); _hasPushed = false; _pushedColorCount = 0; _pushedStyleVarCount = 0; } private static void Push(ImGuiCol col, Vector4 rgba) { if (rgba.X > 1f || rgba.Y > 1f || rgba.Z > 1f || rgba.W > 1f) rgba /= 255f; ImGui.PushStyleColor(col, rgba); _pushedColorCount++; } private static void Push(ImGuiCol col, uint packedRgba) { ImGui.PushStyleColor(col, packedRgba); _pushedColorCount++; } private static void PushStyleVar(ImGuiStyleVar var, float value) { ImGui.PushStyleVar(var, value); _pushedStyleVarCount++; } private static void PushStyleVar(ImGuiStyleVar var, Vector2 value) { ImGui.PushStyleVar(var, value); _pushedStyleVarCount++; } } }