Archived
1
Fork 0

Clean up a bunch of pass/backend code for imgui

This commit is contained in:
redstrate 2021-10-12 10:52:29 -04:00
parent 5a046ee27a
commit 8205f65a8e
2 changed files with 24 additions and 32 deletions

View file

@ -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);

View file

@ -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;