Qt: Fix handling of display window size in hidpi

This commit is contained in:
Connor McLaughlin
2020-01-07 14:27:48 +10:00
parent 1b7be01507
commit 5076d7dfe8
7 changed files with 525 additions and 13 deletions

View File

@ -1,12 +1,14 @@
#include "qtdisplaywindow.h"
#include "imgui.h"
#include "qtutils.h"
#include "qthostinterface.h"
#include "qtutils.h"
#include <QtGui/QKeyEvent>
QtDisplayWindow::QtDisplayWindow(QtHostInterface* host_interface, QWindow* parent)
: QWindow(parent), m_host_interface(host_interface)
{
m_window_width = static_cast<int>(static_cast<qreal>(width()) * devicePixelRatio());
m_window_height = static_cast<int>(static_cast<qreal>(height()) * devicePixelRatio());
}
QtDisplayWindow::~QtDisplayWindow() = default;
@ -40,8 +42,8 @@ bool QtDisplayWindow::createImGuiContext()
ImGui::CreateContext();
auto& io = ImGui::GetIO();
io.DisplaySize.x = static_cast<float>(width());
io.DisplaySize.y = static_cast<float>(height());
io.DisplaySize.x = static_cast<float>(m_window_width);
io.DisplaySize.y = static_cast<float>(m_window_height);
return true;
}
@ -62,6 +64,9 @@ void QtDisplayWindow::Render() {}
void QtDisplayWindow::onWindowResized(int width, int height)
{
m_window_width = width;
m_window_height = height;
// imgui may not have been initialized yet
if (!ImGui::GetCurrentContext())
return;
@ -90,5 +95,8 @@ void QtDisplayWindow::keyReleaseEvent(QKeyEvent* event)
void QtDisplayWindow::resizeEvent(QResizeEvent* event)
{
QWindow::resizeEvent(event);
emit windowResizedEvent(event->size().width(), event->size().height());
const int width = static_cast<int>(static_cast<qreal>(event->size().width()) * devicePixelRatio());
const int height = static_cast<int>(static_cast<qreal>(event->size().height()) * devicePixelRatio());
emit windowResizedEvent(width, height);
}