57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include "XCUIBackend/ImGuiXCUIInputAdapter.h"
|
|
|
|
namespace XCEngine {
|
|
namespace Editor {
|
|
namespace XCUIBackend {
|
|
|
|
class ImGuiXCUIInputSnapshotSource final : public IXCUIInputSnapshotSource {
|
|
public:
|
|
explicit ImGuiXCUIInputSnapshotSource(const ImGuiIO* io = nullptr)
|
|
: m_io(io) {
|
|
}
|
|
|
|
void SetIO(const ImGuiIO* io) {
|
|
m_io = io;
|
|
}
|
|
|
|
const ImGuiIO* GetIO() const {
|
|
return ResolveIO();
|
|
}
|
|
|
|
XCUIInputBridgeFrameSnapshot CaptureSnapshot(
|
|
const XCUIInputBridgeCaptureOptions& options = XCUIInputBridgeCaptureOptions()) const override {
|
|
const ImGuiIO* io = ResolveIO();
|
|
return io != nullptr
|
|
? ImGuiXCUIInputAdapter::CaptureSnapshot(*io, options)
|
|
: XCUIInputBridgeFrameSnapshot();
|
|
}
|
|
|
|
const ::XCEngine::UI::UIPoint& GetPointerPosition() const override {
|
|
m_cachedPointerPosition = {};
|
|
const ImGuiIO* io = ResolveIO();
|
|
if (io != nullptr) {
|
|
m_cachedPointerPosition = ::XCEngine::UI::UIPoint(io->MousePos.x, io->MousePos.y);
|
|
}
|
|
|
|
return m_cachedPointerPosition;
|
|
}
|
|
|
|
private:
|
|
const ImGuiIO* ResolveIO() const {
|
|
if (m_io != nullptr) {
|
|
return m_io;
|
|
}
|
|
|
|
return ImGui::GetCurrentContext() != nullptr ? &ImGui::GetIO() : nullptr;
|
|
}
|
|
|
|
const ImGuiIO* m_io = nullptr;
|
|
mutable ::XCEngine::UI::UIPoint m_cachedPointerPosition = {};
|
|
};
|
|
|
|
} // namespace XCUIBackend
|
|
} // namespace Editor
|
|
} // namespace XCEngine
|