X Tutup
#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(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))); }
X Tutup