3#include "LkEngine/Core/Assert.h"
4#include "LkEngine/Core/Log/Log.h"
5#include "LkEngine/Core/LObject/Enum.h"
7#include "LkEngine/Serialization/YamlSerialization.h"
9#include <imgui/imgui.h>
14LK_ENUM_RANGE_BY_COUNT(ImGuiCol_, ImGuiCol_COUNT);
16namespace LkEngine::Enum
18 static const char* ToString(
const ImGuiCol_ ImGuiColor)
22 case ImGuiCol_Text:
return "Text";
23 case ImGuiCol_TextDisabled:
return "TextDisabled";
24 case ImGuiCol_WindowBg:
return "WindowBg";
25 case ImGuiCol_ChildBg:
return "ChildBg";
26 case ImGuiCol_PopupBg:
return "PopupBg";
27 case ImGuiCol_Border:
return "Border";
28 case ImGuiCol_BorderShadow:
return "BorderShadow";
29 case ImGuiCol_FrameBg:
return "FrameBg";
30 case ImGuiCol_FrameBgHovered:
return "FrameBgHovered";
31 case ImGuiCol_FrameBgActive:
return "FrameBgActive";
32 case ImGuiCol_TitleBg:
return "TitleBg";
33 case ImGuiCol_TitleBgActive:
return "TitleBgActive";
34 case ImGuiCol_TitleBgCollapsed:
return "TitleBgCollapsed";
35 case ImGuiCol_MenuBarBg:
return "MenuBarBg";
36 case ImGuiCol_ScrollbarBg:
return "ScrollbarBg";
37 case ImGuiCol_ScrollbarGrab:
return "ScrollbarGrab";
38 case ImGuiCol_ScrollbarGrabHovered:
return "ScrollbarGrabHovered";
39 case ImGuiCol_ScrollbarGrabActive:
return "ScrollbarGrabActive";
40 case ImGuiCol_CheckMark:
return "CheckMark";
41 case ImGuiCol_SliderGrab:
return "SliderGrab";
42 case ImGuiCol_SliderGrabActive:
return "SliderGrabActive";
43 case ImGuiCol_Button:
return "Button";
44 case ImGuiCol_ButtonHovered:
return "ButtonHovered";
45 case ImGuiCol_ButtonActive:
return "ButtonActive";
46 case ImGuiCol_Header:
return "Header";
47 case ImGuiCol_HeaderHovered:
return "HeaderHovered";
48 case ImGuiCol_HeaderActive:
return "HeaderActive";
49 case ImGuiCol_Separator:
return "Separator";
50 case ImGuiCol_SeparatorHovered:
return "SeparatorHovered";
51 case ImGuiCol_SeparatorActive:
return "SeparatorActive";
52 case ImGuiCol_ResizeGrip:
return "ResizeGrip";
53 case ImGuiCol_ResizeGripHovered:
return "ResizeGripHovered";
54 case ImGuiCol_ResizeGripActive:
return "ResizeGripActive";
55 case ImGuiCol_TabHovered:
return "TabHovered";
56 case ImGuiCol_Tab:
return "Tab";
57 case ImGuiCol_TabSelected:
return "TabSelected";
58 case ImGuiCol_TabSelectedOverline:
return "TabSelectedOverline";
59 case ImGuiCol_TabDimmed:
return "TabDimmed";
60 case ImGuiCol_TabDimmedSelected:
return "TabDimmedSelected";
61 case ImGuiCol_TabDimmedSelectedOverline:
return "TabDimmedSelectedOverline";
62 case ImGuiCol_DockingPreview:
return "DockingPreview";
63 case ImGuiCol_DockingEmptyBg:
return "DockingEmptyBg";
64 case ImGuiCol_PlotLines:
return "PlotLines";
65 case ImGuiCol_PlotLinesHovered:
return "PlotLinesHovered";
66 case ImGuiCol_PlotHistogram:
return "PlotHistogram";
67 case ImGuiCol_PlotHistogramHovered:
return "PlotHistogramHovered";
68 case ImGuiCol_TableHeaderBg:
return "TableHeaderBg";
69 case ImGuiCol_TableBorderStrong:
return "TableBorderStrong";
70 case ImGuiCol_TableBorderLight:
return "TableBorderLight";
71 case ImGuiCol_TableRowBg:
return "TableRowBg";
72 case ImGuiCol_TableRowBgAlt:
return "TableRowBgAlt";
73 case ImGuiCol_TextLink:
return "TextLink";
74 case ImGuiCol_TextSelectedBg:
return "TextSelectedBg";
75 case ImGuiCol_DragDropTarget:
return "DragDropTarget";
76 case ImGuiCol_NavCursor:
return "NavCursor";
77 case ImGuiCol_NavWindowingHighlight:
return "NavWindowingHighlight";
78 case ImGuiCol_NavWindowingDimBg:
return "NavWindowingDimBg";
79 case ImGuiCol_ModalWindowDimBg:
return "ModalWindowDimBg";
80 default: LK_CORE_ASSERT(
false,
"Unsupported ImGuiCol: {}", std::underlying_type_t<ImGuiCol_>(ImGuiColor));
91struct LK_FMT_LIB::formatter<ImVec2>
93 template<
typename ParseContext>
94 constexpr auto parse(ParseContext& Context)
96 return Context.begin();
99 template<
typename FormatContext>
100 auto format(
const ImVec2& Input, FormatContext& Context)
const
102 return LK_FMT_LIB::format_to(Context.out(),
"({:.2f}, {:.2f})", Input.x, Input.y);
110struct LK_FMT_LIB::formatter<ImVec4>
112 template<
typename ParseContext>
113 constexpr auto parse(ParseContext& Context)
115 return Context.begin();
118 template<
typename FormatContext>
119 auto format(
const ImVec4& Input, FormatContext& Context)
const
121 return LK_FMT_LIB::format_to(Context.out(),
"({:.2f}, {:.2f}, {:.2f}, {:.2f})", Input.x, Input.y, Input.z, Input.z);
130 struct convert<ImVec2>
132 static Node encode(
const ImVec2& Rhs)
135 YamlNode.push_back(Rhs.x);
136 YamlNode.push_back(Rhs.y);
140 static bool decode(
const Node& YamlNode, ImVec2& Rhs)
142 if (!YamlNode.IsSequence() || (YamlNode.size() != 2))
147 Rhs.x = YamlNode[0].as<
float>();
148 Rhs.y = YamlNode[1].as<
float>();
155 struct convert<ImVec4>
157 static Node encode(
const ImVec4& Rhs)
160 YamlNode.push_back(Rhs.x);
161 YamlNode.push_back(Rhs.y);
162 YamlNode.push_back(Rhs.z);
163 YamlNode.push_back(Rhs.w);
167 static bool decode(
const Node& YamlNode, ImVec4& Rhs)
169 if (!YamlNode.IsSequence() || (YamlNode.size() != 4))
174 Rhs.x = YamlNode[0].as<
float>();
175 Rhs.y = YamlNode[1].as<
float>();
176 Rhs.z = YamlNode[2].as<
float>();
177 Rhs.w = YamlNode[3].as<
float>();
187 inline YAML::Emitter& operator<<(YAML::Emitter& Out,
const ImVec2& InVec2)
190 Out << YAML::BeginSeq << InVec2.x << InVec2.y << YAML::EndSeq;
195 inline YAML::Emitter& operator<<(YAML::Emitter& Out,
const ImVec4& InVec4)
198 Out << YAML::BeginSeq << InVec4.x << InVec4.y << InVec4.z << InVec4.w << YAML::EndSeq;
Definition ImGuiFwd.h:127