[studio/modlib] Update ImGui drag/drop, other cleanup

This commit is contained in:
2026-04-29 01:50:39 -05:00
parent 4048753205
commit bc88333a59
@@ -9,11 +9,20 @@
#include <imgui.h> #include <imgui.h>
#include <ox/std/bit.hpp> #include <ox/std/bit.hpp>
#include <ox/std/cstringview.hpp>
#include <ox/std/stringparam.hpp>
#include <ox/claw/claw.hpp>
#include <turbine/context.hpp>
#include <studio/context.hpp>
#include <studio/widget.hpp> #include <studio/widget.hpp>
namespace turbine {
class Context;
}
namespace studio {
struct Context;
}
namespace studio::ig { namespace studio::ig {
inline constexpr auto BtnSz = ImVec2{52, 22}; inline constexpr auto BtnSz = ImVec2{52, 22};
@@ -31,18 +40,18 @@ ox::Result<T> getDragDropPayload(ox::CStringViewCR name) noexcept {
return ox::Error(1, "No drag/drop payload"); return ox::Error(1, "No drag/drop payload");
} }
return ox::readClaw<T>({ return ox::readClaw<T>({
std::launder(reinterpret_cast<char const*>(payload->Data)), static_cast<char const*>(payload->Data),
static_cast<size_t>(payload->DataSize)}); static_cast<size_t>(payload->DataSize)});
} }
template<typename T> template<typename T>
ox::Result<T> getDragDropPayload() noexcept { ox::Result<T> getDragDropPayload() noexcept {
auto const payload = ImGui::AcceptDragDropPayload(ox::ModelTypeName_v<T>); auto const payload = ImGui::AcceptDragDropPayload(ox::ModelTypeName_v<T>.c_str());
if (!payload) { if (!payload) {
return ox::Error(1, "No drag/drop payload"); return ox::Error(1, "No drag/drop payload");
} }
return ox::readClaw<T>({ return ox::readClaw<T>({
reinterpret_cast<char const*>(payload->Data), static_cast<char const*>(payload->Data),
static_cast<size_t>(payload->DataSize)}); static_cast<size_t>(payload->DataSize)});
} }
@@ -55,7 +64,7 @@ ox::Error setDragDropPayload(ox::CStringViewCR name, auto const &obj) noexcept {
template<typename T> template<typename T>
ox::Error setDragDropPayload(T const &obj) noexcept { ox::Error setDragDropPayload(T const &obj) noexcept {
OX_REQUIRE(buff, ox::writeClaw(obj, ox::ClawFormat::Metal)); OX_REQUIRE(buff, ox::writeClaw(obj, ox::ClawFormat::Metal));
ImGui::SetDragDropPayload(ox::ModelTypeName_v<T>, buff.data(), buff.size()); ImGui::SetDragDropPayload(ox::ModelTypeName_v<T>.c_str(), buff.data(), buff.size());
return {}; return {};
} }
@@ -64,8 +73,8 @@ class DragDropSource {
private: private:
bool const m_active{}; bool const m_active{};
public: public:
DragDropSource(ImGuiDragDropFlags const flags = 0) noexcept: explicit DragDropSource(ImGuiDragDropFlags const flags = 0) noexcept:
m_active(ImGui::BeginDragDropSource(flags)) { m_active{ImGui::BeginDragDropSource(flags)} {
} }
~DragDropSource() noexcept { ~DragDropSource() noexcept {
if (m_active) { if (m_active) {