Files
XCEngine/new_editor/app/Features/Scene/SceneViewportTransformGizmo.h

62 lines
1.8 KiB
C++

#pragma once
#include <XCEngine/UI/DrawData.h>
#include <XCEngine/UI/Types.h>
#include <memory>
#include <vector>
namespace XCEngine::UI::Editor::App {
class EditorSceneRuntime;
struct SceneViewportTransformGizmoTriangle {
::XCEngine::UI::UIPoint a = {};
::XCEngine::UI::UIPoint b = {};
::XCEngine::UI::UIPoint c = {};
::XCEngine::UI::UIColor color = {};
};
struct SceneViewportTransformGizmoFrame {
bool visible = false;
::XCEngine::UI::UIRect clipRect = {};
std::vector<SceneViewportTransformGizmoTriangle> triangles = {};
};
class SceneViewportTransformGizmo {
public:
SceneViewportTransformGizmo();
~SceneViewportTransformGizmo();
SceneViewportTransformGizmo(const SceneViewportTransformGizmo&) = delete;
SceneViewportTransformGizmo& operator=(const SceneViewportTransformGizmo&) = delete;
SceneViewportTransformGizmo(SceneViewportTransformGizmo&&) noexcept;
SceneViewportTransformGizmo& operator=(SceneViewportTransformGizmo&&) noexcept;
void Refresh(
EditorSceneRuntime& sceneRuntime,
const ::XCEngine::UI::UIRect& viewportRect,
const ::XCEngine::UI::UIPoint& pointerScreen,
bool hoverEnabled);
bool TryBeginDrag(EditorSceneRuntime& sceneRuntime);
bool UpdateDrag(EditorSceneRuntime& sceneRuntime);
bool EndDrag(EditorSceneRuntime& sceneRuntime);
void CancelDrag(EditorSceneRuntime& sceneRuntime);
void ResetVisualState();
bool IsActive() const;
bool IsHoveringHandle() const;
const SceneViewportTransformGizmoFrame& GetFrame() const;
private:
struct State;
std::unique_ptr<State> m_state = {};
};
void AppendSceneViewportTransformGizmo(
::XCEngine::UI::UIDrawList& drawList,
const SceneViewportTransformGizmoFrame& frame);
} // namespace XCEngine::UI::Editor::App