LkEngine 0.1.2
 
Loading...
Searching...
No Matches
ImGuiFwd.h
1#pragma once
2
3#include "LkEngine/Core/Assert.h"
4#include "LkEngine/Core/Log/Log.h"
5#include "LkEngine/Core/LObject/Enum.h"
6
7#include "LkEngine/Serialization/YamlSerialization.h"
8
9#include <imgui/imgui.h>
10
14LK_ENUM_RANGE_BY_COUNT(ImGuiCol_, ImGuiCol_COUNT);
15
16namespace LkEngine::Enum
17{
18 static const char* ToString(const ImGuiCol_ ImGuiColor)
19 {
20 switch (ImGuiColor)
21 {
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));
81 }
82
83 return "";
84 }
85}
86
90template<>
91struct LK_FMT_LIB::formatter<ImVec2>
92{
93 template<typename ParseContext>
94 constexpr auto parse(ParseContext& Context)
95 {
96 return Context.begin();
97 }
98
99 template<typename FormatContext>
100 auto format(const ImVec2& Input, FormatContext& Context) const
101 {
102 return LK_FMT_LIB::format_to(Context.out(), "({:.2f}, {:.2f})", Input.x, Input.y);
103 }
104};
105
109template<>
110struct LK_FMT_LIB::formatter<ImVec4>
111{
112 template<typename ParseContext>
113 constexpr auto parse(ParseContext& Context)
114 {
115 return Context.begin();
116 }
117
118 template<typename FormatContext>
119 auto format(const ImVec4& Input, FormatContext& Context) const
120 {
121 return LK_FMT_LIB::format_to(Context.out(), "({:.2f}, {:.2f}, {:.2f}, {:.2f})", Input.x, Input.y, Input.z, Input.z);
122 }
123};
124
125
126namespace YAML
127{
128 /* Yaml Formatter: ImVec2 */
129 template<>
130 struct convert<ImVec2>
131 {
132 static Node encode(const ImVec2& Rhs)
133 {
134 Node YamlNode;
135 YamlNode.push_back(Rhs.x);
136 YamlNode.push_back(Rhs.y);
137 return YamlNode;
138 }
139
140 static bool decode(const Node& YamlNode, ImVec2& Rhs)
141 {
142 if (!YamlNode.IsSequence() || (YamlNode.size() != 2))
143 {
144 return false;
145 }
146
147 Rhs.x = YamlNode[0].as<float>();
148 Rhs.y = YamlNode[1].as<float>();
149 return true;
150 }
151 };
152
153 /* Yaml Formatter: ImVec4 */
154 template<>
155 struct convert<ImVec4>
156 {
157 static Node encode(const ImVec4& Rhs)
158 {
159 Node YamlNode;
160 YamlNode.push_back(Rhs.x);
161 YamlNode.push_back(Rhs.y);
162 YamlNode.push_back(Rhs.z);
163 YamlNode.push_back(Rhs.w);
164 return YamlNode;
165 }
166
167 static bool decode(const Node& YamlNode, ImVec4& Rhs)
168 {
169 if (!YamlNode.IsSequence() || (YamlNode.size() != 4))
170 {
171 return false;
172 }
173
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>();
178 return true;
179 }
180 };
181
182}
183
184namespace LkEngine
185{
186 /* Yaml bitwise operator: ImVec2 */
187 inline YAML::Emitter& operator<<(YAML::Emitter& Out, const ImVec2& InVec2)
188 {
189 Out << YAML::Flow;
190 Out << YAML::BeginSeq << InVec2.x << InVec2.y << YAML::EndSeq;
191 return Out;
192 }
193
194 /* Yaml bitwise operator: ImVec4 */
195 inline YAML::Emitter& operator<<(YAML::Emitter& Out, const ImVec4& InVec4)
196 {
197 Out << YAML::Flow;
198 Out << YAML::BeginSeq << InVec4.x << InVec4.y << InVec4.z << InVec4.w << YAML::EndSeq;
199 return Out;
200 }
201}
Definition Asset.h:11
Definition ImGuiFwd.h:127