Clean up a bunch of pass/backend code for imgui
This commit is contained in:
parent
5a046ee27a
commit
8205f65a8e
2 changed files with 24 additions and 32 deletions
|
@ -98,23 +98,20 @@ imgui_backend::imgui_backend() {
|
|||
|
||||
ImGuiPlatformMonitor monitor = {};
|
||||
|
||||
const auto rect = platform::get_monitor_resolution();
|
||||
monitor.MainPos = rect.offset;
|
||||
monitor.MainSize = rect.extent;
|
||||
const auto monitorArea = platform::get_monitor_resolution();
|
||||
monitor.MainPos = monitorArea.offset;
|
||||
monitor.MainSize = monitorArea.extent;
|
||||
|
||||
const auto wrect = platform::get_monitor_work_area();
|
||||
monitor.WorkPos = wrect.offset;
|
||||
monitor.WorkSize = wrect.extent;
|
||||
const auto workArea = platform::get_monitor_work_area();
|
||||
monitor.WorkPos = workArea.offset;
|
||||
monitor.WorkSize = workArea.extent;
|
||||
|
||||
monitor.DpiScale = platform::get_monitor_dpi();
|
||||
|
||||
platform_io.Monitors.push_back(monitor);
|
||||
|
||||
platform_io.Platform_CreateWindow = [](ImGuiViewport* viewport) {
|
||||
viewport->Flags = ImGuiViewportFlags_NoDecoration;
|
||||
|
||||
viewport->PlatformHandle = platform::open_window("",
|
||||
{viewport->Pos, viewport->Size}, WindowFlags::Borderless);
|
||||
viewport->PlatformHandle = platform::open_window("", {viewport->Pos, viewport->Size}, WindowFlags::Borderless);
|
||||
};
|
||||
|
||||
platform_io.Platform_DestroyWindow = [](ImGuiViewport* viewport) {
|
||||
|
@ -127,18 +124,16 @@ imgui_backend::imgui_backend() {
|
|||
platform::set_window_position(viewport->PlatformHandle, pos);
|
||||
};
|
||||
|
||||
platform_io.Platform_GetWindowPos = [](ImGuiViewport* viewport) {
|
||||
auto [x, y] = platform::get_window_position(viewport->PlatformHandle);
|
||||
return ImVec2(x, y);
|
||||
platform_io.Platform_GetWindowPos = [](ImGuiViewport* viewport) -> ImVec2 {
|
||||
return platform::get_window_position(viewport->PlatformHandle);
|
||||
};
|
||||
|
||||
platform_io.Platform_SetWindowSize = [](ImGuiViewport* viewport, const ImVec2 size) {
|
||||
platform::set_window_size(viewport->PlatformHandle, size);
|
||||
};
|
||||
|
||||
platform_io.Platform_GetWindowSize = [](ImGuiViewport* viewport) {
|
||||
auto [x, y] = platform::get_window_size(viewport->PlatformHandle);
|
||||
return ImVec2(x, y);
|
||||
platform_io.Platform_GetWindowSize = [](ImGuiViewport* viewport) -> ImVec2 {
|
||||
return platform::get_window_size(viewport->PlatformHandle);
|
||||
};
|
||||
|
||||
platform_io.Platform_SetWindowFocus = [](ImGuiViewport* viewport) {
|
||||
|
@ -178,11 +173,12 @@ void imgui_backend::begin_frame(const float delta_time) {
|
|||
}
|
||||
}
|
||||
|
||||
const auto [width, height] = platform::get_window_size(::engine->get_main_window());
|
||||
const auto [dw, dh] = platform::get_window_drawable_size(::engine->get_main_window());
|
||||
const auto size = platform::get_window_size(::engine->get_main_window());
|
||||
const auto drawableSize = platform::get_window_drawable_size(::engine->get_main_window());
|
||||
|
||||
io.DisplaySize = ImVec2(width, height);
|
||||
io.DisplayFramebufferScale = ImVec2((float)dw / width, (float)dh / height);
|
||||
io.DisplaySize = size;
|
||||
io.DisplayFramebufferScale = ImVec2(static_cast<float>(drawableSize.width) / static_cast<float>(size.width),
|
||||
static_cast<float>(drawableSize.height) / static_cast<float>(size.height));
|
||||
io.DeltaTime = delta_time;
|
||||
io.KeyCtrl = platform::get_key_down(InputButton::Ctrl);
|
||||
io.KeyShift = platform::get_key_down(InputButton::Shift);
|
||||
|
|
|
@ -72,16 +72,12 @@ void ImGuiPass::create_render_target_resources(RenderTarget& target) {
|
|||
|
||||
void ImGuiPass::render_post(GFXCommandBuffer* command_buffer, RenderTarget& target, const platform::window_ptr index) {
|
||||
ImDrawData* draw_data = nullptr;
|
||||
if(platform::is_main_window(index)) {
|
||||
if(!(ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable)) {
|
||||
draw_data = ImGui::GetDrawData();
|
||||
} else {
|
||||
auto& io = ImGui::GetPlatformIO();
|
||||
for(int i = 1; i < io.Viewports.size(); i++) {
|
||||
if((io.Viewports[i]->Flags & ImGuiViewportFlags_Minimized) == 0) {
|
||||
if(io.Viewports[i]->PlatformHandle == index)
|
||||
draw_data = io.Viewports[i]->DrawData;
|
||||
}
|
||||
}
|
||||
auto viewport = ImGui::FindViewportByPlatformHandle(index);
|
||||
if(viewport != nullptr)
|
||||
draw_data = viewport->DrawData;
|
||||
}
|
||||
|
||||
if(draw_data == nullptr)
|
||||
|
@ -158,8 +154,8 @@ void ImGuiPass::load_font(const std::string_view filename) {
|
|||
|
||||
font_file->read_all();
|
||||
|
||||
io.Fonts->AddFontFromMemoryTTF(font_file->cast_data<unsigned char>(), font_file->size(), 15.0 * platform::get_window_dpi(engine->get_main_window()));
|
||||
ImGui::GetIO().FontGlobalScale = 1.0 / platform::get_window_dpi(engine->get_main_window());
|
||||
io.Fonts->AddFontFromMemoryTTF(font_file->cast_data<unsigned char>(), font_file->size(), 15.0f * platform::get_window_dpi(engine->get_main_window()));
|
||||
ImGui::GetIO().FontGlobalScale = 1.0f / platform::get_window_dpi(engine->get_main_window());
|
||||
} else {
|
||||
prism::log("Failed to load font file for imgui!");
|
||||
return;
|
||||
|
|
Reference in a new issue