forked from hoffstadt/DearPyGui
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmvLoadingIndicator.cpp
More file actions
123 lines (97 loc) · 4 KB
/
mvLoadingIndicator.cpp
File metadata and controls
123 lines (97 loc) · 4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "mvLoadingIndicator.h"
#include "mvLoadingIndicatorCustom.h"
#include "mvFontItems.h"
#include "mvThemes.h"
#include "mvContainers.h"
#include "mvItemHandlers.h"
void mvLoadingIndicator::draw(ImDrawList* drawlist, float x, float y)
{
//-----------------------------------------------------------------------------
// pre draw
//-----------------------------------------------------------------------------
// show/hide
if (!config.show)
return;
// focusing
if (info.focusNextFrame)
{
ImGui::SetKeyboardFocusHere();
info.focusNextFrame = false;
}
// cache old cursor position
ImVec2 previousCursorPos = ImGui::GetCursorPos();
// set cursor position if user set
if (info.dirtyPos)
ImGui::SetCursorPos(state.pos);
// update widget's position state
state.pos = { ImGui::GetCursorPosX(), ImGui::GetCursorPosY() };
// set item width
if (config.width != 0)
ImGui::SetNextItemWidth((float)config.width);
// set indent
if (config.indent > 0.0f)
ImGui::Indent(config.indent);
// push font if a font object is attached
if (font)
{
ImFont* fontptr = static_cast<mvFont*>(font.get())->getFontPtr();
ImGui::PushFont(fontptr);
}
// themes
apply_local_theming(this);
//-----------------------------------------------------------------------------
// draw
//-----------------------------------------------------------------------------
{
ScopedID id(uuid);
if (_style == 0)
LoadingIndicatorCircle(config.specifiedLabel.c_str(), _radius, _mainColor, _optionalColor, _circleCount, _speed);
else
LoadingIndicatorCircle2(config.specifiedLabel.c_str(), _radius, _thickness, _mainColor);
}
//-----------------------------------------------------------------------------
// update state
//-----------------------------------------------------------------------------
UpdateAppItemState(state);
//-----------------------------------------------------------------------------
// post draw
//-----------------------------------------------------------------------------
// set cursor position to cached position
if (info.dirtyPos)
ImGui::SetCursorPos(previousCursorPos);
if (config.indent > 0.0f)
ImGui::Unindent(config.indent);
// pop font off stack
if (font)
ImGui::PopFont();
// handle popping themes
cleanup_local_theming(this);
if (handlerRegistry)
handlerRegistry->checkEvents(&state);
// handle drag & drop if used
apply_drag_drop(this);
}
void mvLoadingIndicator::handleSpecificKeywordArgs(PyObject* dict)
{
if (dict == nullptr)
return;
if (PyObject* item = PyDict_GetItemString(dict, "style")) _style = ToInt(item);
if (PyObject* item = PyDict_GetItemString(dict, "circle_count")) _circleCount = ToInt(item);
if (PyObject* item = PyDict_GetItemString(dict, "radius")) _radius = ToFloat(item);
if (PyObject* item = PyDict_GetItemString(dict, "thickness")) _thickness = ToFloat(item);
if (PyObject* item = PyDict_GetItemString(dict, "speed")) _speed = ToFloat(item);
if (PyObject* item = PyDict_GetItemString(dict, "color")) _mainColor = ToColor(item);
if (PyObject* item = PyDict_GetItemString(dict, "secondary_color")) _optionalColor = ToColor(item);
}
void mvLoadingIndicator::getSpecificConfiguration(PyObject* dict)
{
if (dict == nullptr)
return;
PyDict_SetItemString(dict, "style", mvPyObject(ToPyInt(_style)));
PyDict_SetItemString(dict, "circle_count", mvPyObject(ToPyInt(_circleCount)));
PyDict_SetItemString(dict, "radius", mvPyObject(ToPyFloat(_radius)));
PyDict_SetItemString(dict, "thickness", mvPyObject(ToPyFloat(_thickness)));
PyDict_SetItemString(dict, "speed", mvPyObject(ToPyFloat(_speed)));
PyDict_SetItemString(dict, "color", mvPyObject(ToPyColor(_mainColor)));
PyDict_SetItemString(dict, "secondary_color", mvPyObject(ToPyColor(_optionalColor)));
}