From 941cc8b767ab9c217d628214693c1ab3a9308918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sun, 6 Jul 2025 12:44:59 +0200 Subject: [PATCH] ImGui: Added typed and scoped style vars --- BeefSpace.toml | 1 + GlitchyEngine/src/ImGui/ImGuiExtension.bf | 108 ++++++++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/BeefSpace.toml b/BeefSpace.toml index 8b72823..8fe8227 100644 --- a/BeefSpace.toml +++ b/BeefSpace.toml @@ -1,5 +1,6 @@ FileVersion = 1 Projects = {GlitchyEngine = {Path = "GlitchyEngine"}, GlitchLog = {Path = "GlitchLog"}, DirectX = {Path = "GlitchyEngine/vendor/directx/DirectX"}, LodePng = {Path = "vendor/lodepng-beef/lodepng-beef"}, FreeType = {Path = "GlitchyEngine/vendor/freetype"}, cgltf-beef = {Path = "GlitchyEngine/vendor/gltf/cgltf-beef"}, GlitchyEditor = {Path = "GlitchyEditor"}, msdfgen-beef = {Path = "GlitchyEngine/vendor/msdfgen/msdfgen-beef"}, ImGui = {Path = "GlitchyEngine/vendor/imgui/ImGui"}, ImGuiImplDX11 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplDX11"}, ImGuiImplWin32 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplWin32"}, ImGuizmo = {Path = "GlitchyEngine/vendor/imgui/ImGuizmo"}, GlitchyEngineHelper = {Path = "GlitchyEngineHelper"}, bon = {Path = "GlitchyEngine/vendor/bon"}, box2d-beef = {Path = "GlitchyEngine/vendor/box2D"}, "Beef.Linq" = {Path = "GlitchyEngine/vendor/Beef.Linq/src"}, ScriptCore = {Path = "ScriptCore"}} +Locked = ["ImGui"] WorkspaceFolders = {GlitchyEngine = ["GlitchyEngine", "GlitchLog", "GlitchyEngineHelper", "ScriptCore"], "GlitchyEngine/Dependencies" = ["cgltf-beef", "DirectX", "FreeType", "ImGui", "ImGuiImplDX11", "ImGuiImplWin32", "ImGuizmo", "LodePng", "msdfgen-beef", "bon", "box2d-beef", "Beef.Linq"], Beef = ["Beefy2D", "corlib", "MiniZ"]} [Workspace] diff --git a/GlitchyEngine/src/ImGui/ImGuiExtension.bf b/GlitchyEngine/src/ImGui/ImGuiExtension.bf index d489c70..b4c2a66 100644 --- a/GlitchyEngine/src/ImGui/ImGuiExtension.bf +++ b/GlitchyEngine/src/ImGui/ImGuiExtension.bf @@ -629,5 +629,113 @@ namespace ImGui SameLine(0, style.FramePadding.x * 2.0f); } + + [AllowDuplicates, CRepr] + public enum TypedStyleVar + { + case Alpha(float Value); + case DisabledAlpha(float Value); + case WindowPadding(float2 Value); + case WindowRounding(float Value); + case WindowBorderSize(float Value); + case WindowMinSize(float2 Value); + case WindowTitleAlign(float2 Value); + case ChildRounding(float Value); + case ChildBorderSize(float Value); + case PopupRounding(float Value); + case PopupBorderSize (float Value); + case FramePadding (float2 Value); + case FrameRounding (float Value); + case FrameBorderSize (float Value); + case ItemSpacing (float2 Value); + case ItemInnerSpacing (float2 Value); + case IndentSpacing (float Value); + case CellPadding (float2 Value); + case ScrollbarSize (float Value); + case ScrollbarRounding (float Value); + case GrabMinSize (float Value); + case GrabRounding (float Value); + case TabRounding (float Value); + case TabBarBorderSize (float Value); + case ButtonTextAlign (float2 Value); + case SelectableTextAlign (float2 Value); + case SeparatorTextBorderSize (float Value); + case SeparatorTextAlign (float2 Value); + case SeparatorTextPadding (float2 Value); + case DockingSeparatorSize (float Value); + } + + public static mixin PushScopedStyleVar(TypedStyleVar value) + { + PushStyleVar(value); + defer:mixin PopStyleVar(); + } + + public static void PushStyleVar(TypedStyleVar value) + { + switch (value) + { + case .Alpha(let Value): + PushStyleVar(.Alpha, Value); + case .DisabledAlpha(let Value): + PushStyleVar(.DisabledAlpha, Value); + case .WindowPadding(let Value): + PushStyleVar(.WindowPadding, Value); + case .WindowRounding(let Value): + PushStyleVar(.WindowRounding, Value); + case .WindowBorderSize(let Value): + PushStyleVar(.WindowBorderSize, Value); + case .WindowMinSize(let Value): + PushStyleVar(.WindowMinSize, Value); + case .WindowTitleAlign(let Value): + PushStyleVar(.WindowTitleAlign, Value); + case .ChildRounding(let Value): + PushStyleVar(.ChildRounding, Value); + case .ChildBorderSize(let Value): + PushStyleVar(.ChildBorderSize, Value); + case .PopupRounding(let Value): + PushStyleVar(.PopupRounding, Value); + case .PopupBorderSize(let Value): + PushStyleVar(.PopupBorderSize, Value); + case .FramePadding(let Value): + PushStyleVar(.FramePadding, Value); + case .FrameRounding(let Value): + PushStyleVar(.FrameRounding, Value); + case .FrameBorderSize(let Value): + PushStyleVar(.FrameBorderSize, Value); + case .ItemSpacing(let Value): + PushStyleVar(.ItemSpacing, Value); + case .ItemInnerSpacing(let Value): + PushStyleVar(.ItemInnerSpacing, Value); + case .IndentSpacing(let Value): + PushStyleVar(.IndentSpacing, Value); + case .CellPadding(let Value): + PushStyleVar(.CellPadding, Value); + case .ScrollbarSize(let Value): + PushStyleVar(.ScrollbarSize, Value); + case .ScrollbarRounding(let Value): + PushStyleVar(.ScrollbarRounding, Value); + case .GrabMinSize(let Value): + PushStyleVar(.GrabMinSize, Value); + case .GrabRounding(let Value): + PushStyleVar(.GrabRounding, Value); + case .TabRounding(let Value): + PushStyleVar(.TabRounding, Value); + case .TabBarBorderSize(let Value): + PushStyleVar(.TabBarBorderSize, Value); + case .ButtonTextAlign(let Value): + PushStyleVar(.ButtonTextAlign, Value); + case .SelectableTextAlign(let Value): + PushStyleVar(.SelectableTextAlign, Value); + case .SeparatorTextBorderSize(let Value): + PushStyleVar(.SeparatorTextBorderSize, Value); + case .SeparatorTextAlign(let Value): + PushStyleVar(.SeparatorTextAlign, Value); + case .SeparatorTextPadding(let Value): + PushStyleVar(.SeparatorTextPadding, Value); + case .DockingSeparatorSize(let Value): + PushStyleVar(.DockingSeparatorSize, Value); + } + } } } \ No newline at end of file