| |
| |
|
|
| #include <QGuiApplication> |
| #include <QStringLiteral> |
| #include <QWindow> |
| #include "common/logging/log.h" |
| #include "core/frontend/emu_window.h" |
| #include "yuzu/qt_common.h" |
|
|
| #if !defined(WIN32) && !defined(__APPLE__) |
| #include <qpa/qplatformnativeinterface.h> |
| #elif defined(__APPLE__) |
| #include <objc/message.h> |
| #endif |
|
|
| namespace QtCommon { |
| Core::Frontend::WindowSystemType GetWindowSystemType() { |
| |
| QString platform_name = QGuiApplication::platformName(); |
| if (platform_name == QStringLiteral("windows")) |
| return Core::Frontend::WindowSystemType::Windows; |
| else if (platform_name == QStringLiteral("xcb")) |
| return Core::Frontend::WindowSystemType::X11; |
| else if (platform_name == QStringLiteral("wayland")) |
| return Core::Frontend::WindowSystemType::Wayland; |
| else if (platform_name == QStringLiteral("wayland-egl")) |
| return Core::Frontend::WindowSystemType::Wayland; |
| else if (platform_name == QStringLiteral("cocoa")) |
| return Core::Frontend::WindowSystemType::Cocoa; |
| else if (platform_name == QStringLiteral("android")) |
| return Core::Frontend::WindowSystemType::Android; |
|
|
| LOG_CRITICAL(Frontend, "Unknown Qt platform {}!", platform_name.toStdString()); |
| return Core::Frontend::WindowSystemType::Windows; |
| } |
|
|
| Core::Frontend::EmuWindow::WindowSystemInfo GetWindowSystemInfo(QWindow* window) { |
| Core::Frontend::EmuWindow::WindowSystemInfo wsi; |
| wsi.type = GetWindowSystemType(); |
|
|
| #if defined(WIN32) |
| |
| wsi.render_surface = reinterpret_cast<void*>(window->winId()); |
| #elif defined(__APPLE__) |
| wsi.render_surface = reinterpret_cast<void* (*)(id, SEL)>(objc_msgSend)( |
| reinterpret_cast<id>(window->winId()), sel_registerName("layer")); |
| #else |
| QPlatformNativeInterface* pni = QGuiApplication::platformNativeInterface(); |
| wsi.display_connection = pni->nativeResourceForWindow("display", window); |
| if (wsi.type == Core::Frontend::WindowSystemType::Wayland) |
| wsi.render_surface = window ? pni->nativeResourceForWindow("surface", window) : nullptr; |
| else |
| wsi.render_surface = window ? reinterpret_cast<void*>(window->winId()) : nullptr; |
| #endif |
| wsi.render_surface_scale = window ? static_cast<float>(window->devicePixelRatio()) : 1.0f; |
|
|
| return wsi; |
| } |
| } |
|
|