2
3
4
5
10#include "Render/Vulkan/VulkanRenderBackend.h"
11#include "Systems/SlateSystem.h"
15#include "..\..\..\Core\Thread\ThreadModel.h"
16#include "Slate/SlateStyleLayout.h"
21 const std::string& panelName ,
33 m_ViewportContext = std::make_shared<SlateImage>(
"SceneColor",
"SlateRenderer.Slate.Default");
37
38
41 ss <<
"FloatingInfo_" <<
m_Index;
43 m_FloatingInfo = SlateSystem::GetRegister()->Register<ImguiFloatingInfo>(
false, ss.str(),
this);
47
48
53 m_Gizmos = SlateSystem::GetRegister()->Register<ImguiGizmos>(
false, ss.str(),
this);
57
58
63 m_ToolBar = SlateSystem::GetRegister()->Register<ImguiViewportToolBar>(
false, ss.str(),
this);
67
68
70 m_ToggleStateList = std::make_shared<scl::behave_state_list<
void>>();
73 auto state = m_ToggleStateList->AddNode();
74 state->PushBehave(
"Toggle", [&]() {
76 m_IsToggled = !m_IsToggled;
80 AsyncTask(ThreadPoolEnum::Game, []() {
81 SlateStyleLayout::Get()->StoreLayoutCache();
86 m_WindowFlags ^= ImGuiWindowFlags_NoResize & ImGuiWindowFlags_NoMove;
88 AsyncTask(ThreadPoolEnum::Game, []() {
89 SlateStyleLayout::Get()->LoadLayoutCache();
95 auto state = m_ToggleStateList->AddNode();
96 state->PushBehave(
"Toggle", [&]() {
100 const ImGuiViewport* viewport = ImGui::GetMainViewport();
101 ImGui::SetNextWindowPos(viewport->Pos);
102 ImGui::SetNextWindowSize(viewport->Size);
104 m_WindowFlags |= ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove;
109 m_ToggleStateList->SetState(1);
117 m_ToggleStateList->GetState()->ExecuteBehave(
"Toggle");
120
121
122 Begin(0.5, ImGuiWindowFlags_NoTitleBar);
125
126
130 ImGuiH::CustomMaterialImage(m_ViewportContext.get(), m_PanelSize);
134
135
136 m_ToolBar->OnRender();
139
140
141 m_FloatingInfo->OnRender();
144
145
146 m_Gizmos->OnRender();
149
150
153 m_ToggleStateList->IncreateState();
161
162
166
167
178
179
180 ImVec2 tempSize = ImVec2(glm::max(thisFrameSize.x, 1.0f), glm::max(thisFrameSize.y, 1.0f));
182 if (m_PanelSize.x != tempSize.x || m_PanelSize.y != tempSize.y)
191 m_PanelSize = tempSize;
198 ImGuiIO& io = ImGui::GetIO();
199 ImVec2 viewportPos = io.MousePos - m_PanelPos;
201 std::pair<uint32_t, uint32_t> pair = std::make_pair(
202 static_cast<uint32_t>(viewportPos.x),
203 static_cast<uint32_t>(viewportPos.y)
213 m_ToggleStateList->ResetState();
221
222
223 m_ViewportContext->ReBuildTextureID();
226
227
236
237
238 m_ViewportContext->ReBuildTextureID();
241
242
#define BIND_EVENT_FN(x)
Bind Event.
#define SPICES_PROFILE_ZONEN(...)
#define SPICES_PROFILE_ZONE
EventDispatcher(Event &event)
Constructor Function.
This Class store a Specific Event type first and Dispatch a event handle function to it.
This Class is the basic Event Class. Inherit from it and create specific event class.
FrameInfo Class. This class defines the FrameInfo data.
ImguiSlate(const std::string &panelName, FrameInfo &frameInfo)
Constructor Function. Init with Slate's name.
bool m_IsResized
Boolean of whether resized this frame.
This Class defines the basic behaves of specific slate. When we add an new Slate, we need inherit fro...
uint32_t m_Index
This viewport index.
bool OnWindowResizeOver(WindowResizeOverEvent &event) const
Event Dispatcher target. Registry on Windows Resized.
void Toggle() const
Toggle viewport.
bool OnToggleSlate(KeyPressedEvent &event) const
Toggle focused slate.
ImguiViewport(const std::string &panelName, FrameInfo &frameInfo, uint32_t index=0)
Constructor Function.
bool OnSlateResize(SlateResizeEvent &event) const
Event Dispatcher target. Registry on Slate(Viewport) Resized.
virtual void QueryIsResizedThisFrame(const ImVec2 &thisFrameSize) override
Query whether viewport is resized this frame. Clamp min m_panelsize value to 1 here,...
virtual void OnRender() override
This interface is called On SlateRenderer Render.
std::pair< uint32_t, uint32_t > GetMousePosInViewport() const
Get Mouse Position Relative Viewport(Might be negative value).
virtual void OnEvent(Event &event) override
This interface is called On Global Event Function Pointer is called.
The ImguiViewport Class. This class defines how to render a viewport.
const int & GetKeyCode() const
Get Key Input Code.
This Class is inherited from KeyEvent Class.
This Class is inherited from Event Class. Called by Viewport Resize.