INSTINCT Code Coverage Report


Directory: src/
File: internal/gui/widgets/imgui_ex.cpp
Date: 2025-02-07 16:54:41
Exec Total Coverage
Lines: 0 149 0.0%
Functions: 0 47 0.0%
Branches: 0 68 0.0%

Line Branch Exec Source
1 // This file is part of INSTINCT, the INS Toolkit for Integrated
2 // Navigation Concepts and Training by the Institute of Navigation of
3 // the University of Stuttgart, Germany.
4 //
5 // This Source Code Form is subject to the terms of the Mozilla Public
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
7 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9 #include "imgui_ex.hpp"
10
11 #include <imgui_stdlib.h>
12 #include <algorithm>
13
14 namespace ImGui
15 {
16
17 // ###########################################################################################################
18
19 bool DragDouble(const char* label, double* v, float v_speed, double v_min, double v_max, const char* format, ImGuiSliderFlags flags)
20 {
21 return DragScalar(label, ImGuiDataType_Double, v, v_speed, &v_min, &v_max, format, flags);
22 }
23
24 bool DragDouble2(const char* label, double v[2], float v_speed, double v_min, double v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
25 {
26 return DragScalarN(label, ImGuiDataType_Double, v, 2, v_speed, &v_min, &v_max, format, flags);
27 }
28
29 bool DragDouble3(const char* label, double v[3], float v_speed, double v_min, double v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
30 {
31 return DragScalarN(label, ImGuiDataType_Double, v, 3, v_speed, &v_min, &v_max, format, flags);
32 }
33
34 bool DragDouble4(const char* label, double v[4], float v_speed, double v_min, double v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
35 {
36 return DragScalarN(label, ImGuiDataType_Double, v, 4, v_speed, &v_min, &v_max, format, flags);
37 }
38
39 // ###########################################################################################################
40
41 bool DragLong(const char* label, int64_t* v, float v_speed, int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags)
42 {
43 return DragScalar(label, ImGuiDataType_S64, v, v_speed, &v_min, &v_max, format, flags);
44 }
45
46 bool DragLong2(const char* label, int64_t v[2], float v_speed, int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
47 {
48 return DragScalarN(label, ImGuiDataType_S64, v, 2, v_speed, &v_min, &v_max, format, flags);
49 }
50
51 bool DragLong3(const char* label, int64_t v[3], float v_speed, int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
52 {
53 return DragScalarN(label, ImGuiDataType_S64, v, 3, v_speed, &v_min, &v_max, format, flags);
54 }
55
56 bool DragLong4(const char* label, int64_t v[4], float v_speed, int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
57 {
58 return DragScalarN(label, ImGuiDataType_S64, v, 4, v_speed, &v_min, &v_max, format, flags);
59 }
60
61 // ###########################################################################################################
62
63 bool DragULong(const char* label, uint64_t* v, float v_speed, uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags)
64 {
65 return DragScalar(label, ImGuiDataType_U64, v, v_speed, &v_min, &v_max, format, flags);
66 }
67
68 bool DragULong2(const char* label, uint64_t v[2], float v_speed, uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
69 {
70 return DragScalarN(label, ImGuiDataType_U64, v, 2, v_speed, &v_min, &v_max, format, flags);
71 }
72
73 bool DragULong3(const char* label, uint64_t v[3], float v_speed, uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
74 {
75 return DragScalarN(label, ImGuiDataType_U64, v, 3, v_speed, &v_min, &v_max, format, flags);
76 }
77
78 bool DragULong4(const char* label, uint64_t v[4], float v_speed, uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
79 {
80 return DragScalarN(label, ImGuiDataType_U64, v, 4, v_speed, &v_min, &v_max, format, flags);
81 }
82
83 // ###########################################################################################################
84
85 bool SliderDouble(const char* label, double* v, double v_min, double v_max, const char* format, ImGuiSliderFlags flags)
86 {
87 return SliderScalar(label, ImGuiDataType_Double, v, &v_min, &v_max, format, flags);
88 }
89
90 bool SliderDouble2(const char* label, double v[2], double v_min, double v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
91 {
92 return SliderScalarN(label, ImGuiDataType_Double, v, 2, &v_min, &v_max, format, flags);
93 }
94
95 bool SliderDouble3(const char* label, double v[3], double v_min, double v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
96 {
97 return SliderScalarN(label, ImGuiDataType_Double, v, 3, &v_min, &v_max, format, flags);
98 }
99
100 bool SliderDouble4(const char* label, double v[4], double v_min, double v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
101 {
102 return SliderScalarN(label, ImGuiDataType_Double, v, 4, &v_min, &v_max, format, flags);
103 }
104
105 // ###########################################################################################################
106
107 bool SliderLong(const char* label, int64_t* v, int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags)
108 {
109 return SliderScalar(label, ImGuiDataType_S64, v, &v_min, &v_max, format, flags);
110 }
111
112 bool SliderLong2(const char* label, int64_t v[2], int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
113 {
114 return SliderScalarN(label, ImGuiDataType_S64, v, 2, &v_min, &v_max, format, flags);
115 }
116
117 bool SliderLong3(const char* label, int64_t v[3], int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
118 {
119 return SliderScalarN(label, ImGuiDataType_S64, v, 3, &v_min, &v_max, format, flags);
120 }
121
122 bool SliderLong4(const char* label, int64_t v[4], int64_t v_min, int64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
123 {
124 return SliderScalarN(label, ImGuiDataType_S64, v, 4, &v_min, &v_max, format, flags);
125 }
126
127 // ###########################################################################################################
128
129 bool SliderULong(const char* label, uint64_t* v, uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags)
130 {
131 return SliderScalar(label, ImGuiDataType_U64, v, &v_min, &v_max, format, flags);
132 }
133
134 bool SliderULong2(const char* label, uint64_t v[2], uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
135 {
136 return SliderScalarN(label, ImGuiDataType_U64, v, 2, &v_min, &v_max, format, flags);
137 }
138
139 bool SliderULong3(const char* label, uint64_t v[3], uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
140 {
141 return SliderScalarN(label, ImGuiDataType_U64, v, 3, &v_min, &v_max, format, flags);
142 }
143
144 bool SliderULong4(const char* label, uint64_t v[4], uint64_t v_min, uint64_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
145 {
146 return SliderScalarN(label, ImGuiDataType_U64, v, 4, &v_min, &v_max, format, flags);
147 }
148
149 // ###########################################################################################################
150
151 bool SliderUInt(const char* label, uint32_t* v, uint32_t v_min, uint32_t v_max, const char* format, ImGuiSliderFlags flags)
152 {
153 return SliderScalar(label, ImGuiDataType_U32, v, &v_min, &v_max, format, flags);
154 }
155
156 bool SliderUInt2(const char* label, uint32_t v[2], uint32_t v_min, uint32_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
157 {
158 return SliderScalarN(label, ImGuiDataType_U32, v, 2, &v_min, &v_max, format, flags);
159 }
160
161 bool SliderUInt3(const char* label, uint32_t v[3], uint32_t v_min, uint32_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
162 {
163 return SliderScalarN(label, ImGuiDataType_U32, v, 3, &v_min, &v_max, format, flags);
164 }
165
166 bool SliderUInt4(const char* label, uint32_t v[4], uint32_t v_min, uint32_t v_max, const char* format, ImGuiSliderFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
167 {
168 return SliderScalarN(label, ImGuiDataType_U32, v, 4, &v_min, &v_max, format, flags);
169 }
170
171 // ###########################################################################################################
172
173 bool InputDouble2(const char* label, double v[2], const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
174 {
175 return InputScalarN(label, ImGuiDataType_Double, v, 2, nullptr, nullptr, format, flags);
176 }
177
178 bool InputDouble3(const char* label, double v[3], const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
179 {
180 return InputScalarN(label, ImGuiDataType_Double, v, 3, nullptr, nullptr, format, flags);
181 }
182
183 bool InputDouble4(const char* label, double v[4], const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
184 {
185 return InputScalarN(label, ImGuiDataType_Double, v, 4, nullptr, nullptr, format, flags);
186 }
187
188 // ###########################################################################################################
189
190 bool InputFloatL(const char* label, float* v, float v_min, float v_max, float step, float step_fast, const char* format, ImGuiInputTextFlags flags)
191 {
192 if (InputFloat(label, v, step, step_fast, format, flags))
193 {
194 *v = std::clamp(*v, v_min, v_max);
195 return true;
196 }
197 return false;
198 }
199
200 bool InputFloat2L(const char* label, float v[2], float v_min, float v_max, const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
201 {
202 if (InputFloat2(label, v, format, flags))
203 {
204 for (size_t i = 0; i < 2; i++)
205 {
206 v[i] = std::clamp(v[i], v_min, v_max);
207 }
208
209 return true;
210 }
211 return false;
212 }
213
214 bool InputFloat3L(const char* label, float v[3], float v_min, float v_max, const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
215 {
216 if (InputFloat3(label, v, format, flags))
217 {
218 for (size_t i = 0; i < 3; i++)
219 {
220 v[i] = std::clamp(v[i], v_min, v_max);
221 }
222
223 return true;
224 }
225 return false;
226 }
227
228 bool InputFloat4L(const char* label, float v[4], float v_min, float v_max, const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
229 {
230 if (InputFloat4(label, v, format, flags))
231 {
232 for (size_t i = 0; i < 4; i++)
233 {
234 v[i] = std::clamp(v[i], v_min, v_max);
235 }
236
237 return true;
238 }
239 return false;
240 }
241
242 bool InputIntL(const char* label, int* v, int v_min, int v_max, int step, int step_fast, ImGuiInputTextFlags flags)
243 {
244 if (InputInt(label, v, step, step_fast, flags))
245 {
246 *v = std::clamp(*v, v_min, v_max);
247 return true;
248 }
249 return false;
250 }
251
252 bool InputInt2L(const char* label, int v[2], int v_min, int v_max, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
253 {
254 if (InputInt2(label, v, flags))
255 {
256 for (size_t i = 0; i < 2; i++)
257 {
258 v[i] = std::clamp(v[i], v_min, v_max);
259 }
260
261 return true;
262 }
263 return false;
264 }
265
266 bool InputInt3L(const char* label, int v[3], int v_min, int v_max, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
267 {
268 if (InputInt3(label, v, flags))
269 {
270 for (size_t i = 0; i < 3; i++)
271 {
272 v[i] = std::clamp(v[i], v_min, v_max);
273 }
274
275 return true;
276 }
277 return false;
278 }
279
280 bool InputInt4L(const char* label, int v[4], int v_min, int v_max, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
281 {
282 if (InputInt4(label, v, flags))
283 {
284 for (size_t i = 0; i < 4; i++)
285 {
286 v[i] = std::clamp(v[i], v_min, v_max);
287 }
288
289 return true;
290 }
291 return false;
292 }
293
294 bool InputDoubleL(const char* label, double* v, double v_min, double v_max, double step, double step_fast, const char* format, ImGuiInputTextFlags flags)
295 {
296 if (InputDouble(label, v, step, step_fast, format, flags))
297 {
298 *v = std::clamp(*v, v_min, v_max);
299 return true;
300 }
301 return false;
302 }
303
304 bool InputDouble2L(const char* label, double v[2], double v_min, double v_max, const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
305 {
306 if (InputDouble2(label, v, format, flags))
307 {
308 for (size_t i = 0; i < 2; i++)
309 {
310 v[i] = std::clamp(v[i], v_min, v_max);
311 }
312
313 return true;
314 }
315 return false;
316 }
317
318 bool InputDouble3L(const char* label, double v[3], double v_min, double v_max, const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
319 {
320 if (InputDouble3(label, v, format, flags))
321 {
322 for (size_t i = 0; i < 3; i++)
323 {
324 v[i] = std::clamp(v[i], v_min, v_max);
325 }
326
327 return true;
328 }
329 return false;
330 }
331
332 bool InputDouble4L(const char* label, double v[4], double v_min, double v_max, const char* format, ImGuiInputTextFlags flags) // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
333 {
334 if (InputDouble4(label, v, format, flags))
335 {
336 for (size_t i = 0; i < 4; i++)
337 {
338 v[i] = std::clamp(v[i], v_min, v_max);
339 }
340
341 return true;
342 }
343 return false;
344 }
345
346 bool InputTextL(const char* label, std::string* str, size_t limit, ImGuiInputTextFlags flags)
347 {
348 std::pair<std::string, size_t> oldTextLimit = std::make_pair(*str, limit);
349 auto callback = [](ImGuiInputTextCallbackData* data) -> int {
350 if (data->EventFlag == ImGuiInputTextFlags_CallbackEdit)
351 {
352 auto* oldTextLimit = static_cast<std::pair<std::string, size_t>*>(data->UserData);
353 int limit = static_cast<int>(oldTextLimit->second);
354 if (data->BufTextLen > limit)
355 {
356 strncpy(data->Buf, oldTextLimit->first.data(), oldTextLimit->first.length() + 1);
357 data->BufTextLen = static_cast<int>(oldTextLimit->first.length());
358 data->BufDirty = true;
359 if (data->CursorPos != limit) { data->CursorPos--; }
360 }
361 }
362 return 0;
363 };
364
365 return InputText(label, str, flags | ImGuiInputTextFlags_CallbackEdit, callback, &oldTextLimit);
366 }
367
368 } // namespace ImGui
369
370 bool operator==(const ImVec4& lhs, const ImVec4& rhs)
371 {
372 return lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z && lhs.w == rhs.w;
373 }
374
375 bool operator!=(const ImVec4& lhs, const ImVec4& rhs)
376 {
377 return lhs.x != rhs.x || lhs.y != rhs.y || lhs.z != rhs.z || lhs.w != rhs.w;
378 }
379