Unravel Engine C++ Reference
Loading...
Searching...
No Matches
inspector_basetypes.cpp
Go to the documentation of this file.
2#include "imgui_widgets/utils.h"
3
4namespace unravel
5{
6
7template<typename T>
9 entt::meta_any& var,
10 const var_info& info,
11 const entt::meta_custom& custom,
12 const char* fmt0 = "Min:",
13 const char* fmt1 = "Max:") -> inspect_result
14{
15 auto& data = var.cast<range<T>&>();
16
17 T min{};
18 T max{};
19
20 T* min_ptr{};
21 T* max_ptr{};
22 auto min_var = entt::get_attribute(custom, "min");
23 if(min_var && min_var.allow_cast<T>())
24 {
25 min = min_var.cast<T>();
26 min_ptr = &min;
27 }
28
29 auto max_var = entt::get_attribute(custom, "max");
30 if(max_var && max_var.allow_cast<T>())
31 {
32 max = max_var.cast<T>();
33 max_ptr = &max;
34 }
35 const auto formatted0 = fmt::format("{}{}", fmt0, ImGui::GetDataPrintFormat<T>());
36 const auto formatted1 = fmt::format("{}{}", fmt1, ImGui::GetDataPrintFormat<T>());
37
38 std::array<const char*, 2> formats = {{formatted0.c_str(), formatted1.c_str()}};
39
40 inspect_result result{};
41 result.changed = ImGui::DragMultiFormatScalarN("##",
42 ImGui::GetDataType<T>(),
43 &data.min,
44 2,
45 0.5f,
46 min_ptr,
47 max_ptr,
48 formats.data());
49 ImGui::ActiveItemWrapMousePos();
50
51 result.edit_finished = ImGui::IsItemDeactivatedAfterEdit();
52
53 // ImGui::DrawItemActivityOutline();
54
55 return result;
56}
57
58template<typename T>
60 entt::meta_any& var,
61 const var_info& info,
62 const entt::meta_custom& custom,
63 const char* fmt0 = "Min:",
64 const char* fmt1 = "Max:") -> inspect_result
65{
66 auto& data = var.cast<size<T>&>();
67
68 T min{};
69 T max{};
70
71 T* min_ptr{};
72 T* max_ptr{};
73 auto min_var = entt::get_attribute(custom, "min");
74 if(min_var && min_var.allow_cast<T>())
75 {
76 min = min_var.cast<T>();
77 min_ptr = &min;
78 }
79
80 auto max_var = entt::get_attribute(custom, "max");
81 if(max_var && max_var.allow_cast<T>())
82 {
83 max = max_var.cast<T>();
84 max_ptr = &max;
85 }
86 const auto formatted0 = fmt::format("{}{}", fmt0, ImGui::GetDataPrintFormat<T>());
87 const auto formatted1 = fmt::format("{}{}", fmt1, ImGui::GetDataPrintFormat<T>());
88
89 std::array<const char*, 2> formats = {{formatted0.c_str(), formatted1.c_str()}};
90
91 inspect_result result{};
92 result.changed = ImGui::DragMultiFormatScalarN("##",
93 ImGui::GetDataType<T>(),
94 &data.width,
95 2,
96 0.5f,
97 min_ptr,
98 max_ptr,
99 formats.data());
100 ImGui::ActiveItemWrapMousePos();
101
102 result.edit_finished = ImGui::IsItemDeactivatedAfterEdit();
103
104 // ImGui::DrawItemActivityOutline();
105
106 return result;
107}
108
110 entt::meta_any& var,
111 const meta_any_proxy& var_proxy,
112 const var_info& info,
113 const entt::meta_custom& custom) -> inspect_result
114{
115 return inspect_range_scalar<float>(ctx, var, info, custom);
116}
117
119 entt::meta_any& var,
120 const meta_any_proxy& var_proxy,
121 const var_info& info,
122 const entt::meta_custom& custom) -> inspect_result
123{
124 return inspect_range_scalar<double>(ctx, var, info, custom);
125}
126
128 entt::meta_any& var,
129 const meta_any_proxy& var_proxy,
130 const var_info& info,
131 const entt::meta_custom& custom) -> inspect_result
132{
133 return inspect_range_scalar<int8_t>(ctx, var, info, custom);
134}
135
137 entt::meta_any& var,
138 const meta_any_proxy& var_proxy,
139 const var_info& info,
140 const entt::meta_custom& custom) -> inspect_result
141{
142 return inspect_range_scalar<int16_t>(ctx, var, info, custom);
143}
144
146 entt::meta_any& var,
147 const meta_any_proxy& var_proxy,
148 const var_info& info,
149 const entt::meta_custom& custom) -> inspect_result
150{
151 return inspect_range_scalar<int32_t>(ctx, var, info, custom);
152}
153
155 entt::meta_any& var,
156 const meta_any_proxy& var_proxy,
157 const var_info& info,
158 const entt::meta_custom& custom) -> inspect_result
159{
160 return inspect_range_scalar<int64_t>(ctx, var, info, custom);
161}
162
164 entt::meta_any& var,
165 const meta_any_proxy& var_proxy,
166 const var_info& info,
167 const entt::meta_custom& custom) -> inspect_result
168{
169 return inspect_range_scalar<uint8_t>(ctx, var, info, custom);
170}
171
173 entt::meta_any& var,
174 const meta_any_proxy& var_proxy,
175 const var_info& info,
176 const entt::meta_custom& custom) -> inspect_result
177{
178 return inspect_range_scalar<uint16_t>(ctx, var, info, custom);
179}
180
182 entt::meta_any& var,
183 const meta_any_proxy& var_proxy,
184 const var_info& info,
185 const entt::meta_custom& custom) -> inspect_result
186{
187 return inspect_range_scalar<uint32_t>(ctx, var, info, custom);
188}
189
191 entt::meta_any& var,
192 const meta_any_proxy& var_proxy,
193 const var_info& info,
194 const entt::meta_custom& custom) -> inspect_result
195{
196 return inspect_range_scalar<uint64_t>(ctx, var, info, custom);
197}
198
200 entt::meta_any& var,
201 const meta_any_proxy& var_proxy,
202 const var_info& info,
203 const entt::meta_custom& custom) -> inspect_result
204{
205 return inspect_size_scalar<float>(ctx, var, info, custom, "W:", "H:");
206}
207
209 entt::meta_any& var,
210 const meta_any_proxy& var_proxy,
211 const var_info& info,
212 const entt::meta_custom& custom) -> inspect_result
213{
214 return inspect_size_scalar<double>(ctx, var, info, custom, "W:", "H:");
215}
216
218 entt::meta_any& var,
219 const meta_any_proxy& var_proxy,
220 const var_info& info,
221 const entt::meta_custom& custom) -> inspect_result
222{
223 return inspect_size_scalar<int8_t>(ctx, var, info, custom, "W:", "H:");
224}
225
227 entt::meta_any& var,
228 const meta_any_proxy& var_proxy,
229 const var_info& info,
230 const entt::meta_custom& custom) -> inspect_result
231{
232 return inspect_size_scalar<int16_t>(ctx, var, info, custom, "W:", "H:");
233}
234
236 entt::meta_any& var,
237 const meta_any_proxy& var_proxy,
238 const var_info& info,
239 const entt::meta_custom& custom) -> inspect_result
240{
241 return inspect_size_scalar<int32_t>(ctx, var, info, custom, "W:", "H:");
242}
243
245 entt::meta_any& var,
246 const meta_any_proxy& var_proxy,
247 const var_info& info,
248 const entt::meta_custom& custom) -> inspect_result
249{
250 return inspect_size_scalar<int64_t>(ctx, var, info, custom, "W:", "H:");
251}
252
254 entt::meta_any& var,
255 const meta_any_proxy& var_proxy,
256 const var_info& info,
257 const entt::meta_custom& custom) -> inspect_result
258{
259 return inspect_size_scalar<uint8_t>(ctx, var, info, custom, "W:", "H:");
260}
261
263 entt::meta_any& var,
264 const meta_any_proxy& var_proxy,
265 const var_info& info,
266 const entt::meta_custom& custom) -> inspect_result
267{
268 return inspect_size_scalar<uint16_t>(ctx, var, info, custom, "W:", "H:");
269}
270
272 entt::meta_any& var,
273 const meta_any_proxy& var_proxy,
274 const var_info& info,
275 const entt::meta_custom& custom) -> inspect_result
276{
277 return inspect_size_scalar<uint32_t>(ctx, var, info, custom, "W:", "H:");
278}
279
281 entt::meta_any& var,
282 const meta_any_proxy& var_proxy,
283 const var_info& info,
284 const entt::meta_custom& custom) -> inspect_result
285{
286 return inspect_size_scalar<uint64_t>(ctx, var, info, custom, "W:", "H:");
287}
288
289} // namespace unravel
auto get_attribute(const meta_custom &custom, const char *name) -> const meta_any &
auto inspect_size_scalar(rtti::context &ctx, entt::meta_any &var, const var_info &info, const entt::meta_custom &custom, const char *fmt0="Min:", const char *fmt1="Max:") -> inspect_result
auto inspect_range_scalar(rtti::context &ctx, entt::meta_any &var, const var_info &info, const entt::meta_custom &custom, const char *fmt0="Min:", const char *fmt1="Max:") -> inspect_result
Result of an inspection operation indicating what changes occurred.
Definition inspector.h:146
bool changed
Whether the value was modified during inspection.
Definition inspector.h:148
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
auto inspect(rtti::context &ctx, entt::meta_any &var, const meta_any_proxy &var_proxy, const var_info &info, const entt::meta_custom &custom) -> inspect_result override
Safe deferred property access proxy for arbitrary object properties.
Definition inspector.h:198
Metadata about a variable being inspected.
Definition inspector.h:133