Duckstation/src/duckstation-qt/qtdisplaywindow.cpp

110 lines
2.6 KiB
C++
Raw Normal View History

#include "qtdisplaywindow.h"
#include "imgui.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;
HostDisplay* QtDisplayWindow::getHostDisplayInterface()
{
return nullptr;
}
bool QtDisplayWindow::createDeviceContext(QThread* worker_thread)
{
return true;
}
bool QtDisplayWindow::initializeDeviceContext()
{
if (!createImGuiContext() || !createDeviceResources())
return false;
return true;
}
void QtDisplayWindow::destroyDeviceContext()
{
destroyImGuiContext();
destroyDeviceResources();
}
bool QtDisplayWindow::createImGuiContext()
{
ImGui::CreateContext();
2020-01-02 09:14:16 +00:00
auto& io = ImGui::GetIO();
2020-01-07 08:55:26 +00:00
io.IniFilename = nullptr;
io.DisplaySize.x = static_cast<float>(m_window_width);
io.DisplaySize.y = static_cast<float>(m_window_height);
2020-01-02 09:14:16 +00:00
2020-01-07 08:52:33 +00:00
const float framebuffer_scale = static_cast<float>(devicePixelRatio());
io.DisplayFramebufferScale.x = framebuffer_scale;
io.DisplayFramebufferScale.y = framebuffer_scale;
io.FontGlobalScale = framebuffer_scale;
ImGui::GetStyle().ScaleAllSizes(framebuffer_scale);
return true;
}
void QtDisplayWindow::destroyImGuiContext()
{
ImGui::DestroyContext();
}
bool QtDisplayWindow::createDeviceResources()
{
return true;
}
void QtDisplayWindow::destroyDeviceResources() {}
void QtDisplayWindow::Render() {}
2020-01-02 09:14:16 +00:00
void QtDisplayWindow::onWindowResized(int width, int height)
{
m_window_width = width;
m_window_height = height;
2020-01-02 09:14:16 +00:00
// imgui may not have been initialized yet
if (!ImGui::GetCurrentContext())
return;
auto& io = ImGui::GetIO();
io.DisplaySize.x = static_cast<float>(width);
io.DisplaySize.y = static_cast<float>(height);
}
void QtDisplayWindow::keyPressEvent(QKeyEvent* event)
{
2020-01-06 04:08:15 +00:00
if (event->isAutoRepeat())
return;
m_host_interface->handleKeyEvent(QtUtils::KeyEventToInt(event), true);
}
void QtDisplayWindow::keyReleaseEvent(QKeyEvent* event)
{
2020-01-06 04:08:15 +00:00
if (event->isAutoRepeat())
return;
m_host_interface->handleKeyEvent(QtUtils::KeyEventToInt(event), false);
}
2020-01-02 09:14:16 +00:00
void QtDisplayWindow::resizeEvent(QResizeEvent* event)
{
QWindow::resizeEvent(event);
2020-01-07 08:52:33 +00:00
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);
2020-01-02 09:14:16 +00:00
}