mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Merge pull request #1164 from kemenaran/qt-high-dpi-fixes
citra-qt: high-DPI fixes and Retina on OS X
This commit is contained in:
		
						commit
						87eca546b2
					
				@ -24,6 +24,7 @@ set(SRCS
 | 
			
		||||
            hotkeys.cpp
 | 
			
		||||
            main.cpp
 | 
			
		||||
            citra-qt.rc
 | 
			
		||||
            Info.plist
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
set(HEADERS
 | 
			
		||||
@ -72,6 +73,7 @@ endif()
 | 
			
		||||
 | 
			
		||||
if (APPLE)
 | 
			
		||||
    add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS})
 | 
			
		||||
    set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
 | 
			
		||||
else()
 | 
			
		||||
    add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS})
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								src/citra_qt/Info.plist
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/citra_qt/Info.plist
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
<plist version="1.0">
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>CFBundleDevelopmentRegion</key>
 | 
			
		||||
	<string>English</string>
 | 
			
		||||
	<key>CFBundleExecutable</key>
 | 
			
		||||
	<string>$(EXECUTABLE_NAME)</string>
 | 
			
		||||
	<key>CFBundleGetInfoString</key>
 | 
			
		||||
	<string></string>
 | 
			
		||||
	<key>CFBundleIconFile</key>
 | 
			
		||||
	<string>citra.icns</string>
 | 
			
		||||
	<key>CFBundleIdentifier</key>
 | 
			
		||||
	<string>com.citra-emu.citra</string>
 | 
			
		||||
	<key>CFBundleInfoDictionaryVersion</key>
 | 
			
		||||
	<string>6.0</string>
 | 
			
		||||
	<key>CFBundleLongVersionString</key>
 | 
			
		||||
	<string></string>
 | 
			
		||||
	<key>CFBundleName</key>
 | 
			
		||||
	<string>Citra</string>
 | 
			
		||||
	<key>CFBundlePackageType</key>
 | 
			
		||||
	<string>APPL</string>
 | 
			
		||||
	<key>CFBundleShortVersionString</key>
 | 
			
		||||
	<string></string>
 | 
			
		||||
	<key>CFBundleSignature</key>
 | 
			
		||||
	<string>????</string>
 | 
			
		||||
	<key>CFBundleVersion</key>
 | 
			
		||||
	<string></string>
 | 
			
		||||
	<key>CSResourcesFileMapped</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>LSRequiresCarbon</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>NSHumanReadableCopyright</key>
 | 
			
		||||
	<string></string>
 | 
			
		||||
	<key>NSPrincipalClass</key>
 | 
			
		||||
	<string>NSApplication</string>
 | 
			
		||||
	<key>NSHighResolutionCapable</key>
 | 
			
		||||
	<string>True</string>
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
@ -181,16 +181,9 @@ void GRenderWindow::PollEvents() {
 | 
			
		||||
void GRenderWindow::OnFramebufferSizeChanged()
 | 
			
		||||
{
 | 
			
		||||
    // Screen changes potentially incur a change in screen DPI, hence we should update the framebuffer size
 | 
			
		||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
 | 
			
		||||
    // windowHandle() might not be accessible until the window is displayed to screen.
 | 
			
		||||
    auto pixel_ratio = windowHandle() ? (windowHandle()->screen()->devicePixelRatio()) : 1.0;
 | 
			
		||||
 | 
			
		||||
    unsigned width = child->QPaintDevice::width() * pixel_ratio;
 | 
			
		||||
    unsigned height = child->QPaintDevice::height() * pixel_ratio;
 | 
			
		||||
#else
 | 
			
		||||
    unsigned width = child->QPaintDevice::width();
 | 
			
		||||
    unsigned height = child->QPaintDevice::height();
 | 
			
		||||
#endif
 | 
			
		||||
    qreal pixelRatio = windowPixelRatio();
 | 
			
		||||
    unsigned width = child->QPaintDevice::width() * pixelRatio;
 | 
			
		||||
    unsigned height = child->QPaintDevice::height() * pixelRatio;
 | 
			
		||||
 | 
			
		||||
    NotifyFramebufferLayoutChanged(EmuWindow::FramebufferLayout::DefaultScreenLayout(width, height));
 | 
			
		||||
}
 | 
			
		||||
@ -223,6 +216,16 @@ QByteArray GRenderWindow::saveGeometry()
 | 
			
		||||
        return geometry;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qreal GRenderWindow::windowPixelRatio()
 | 
			
		||||
{
 | 
			
		||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
 | 
			
		||||
    // windowHandle() might not be accessible until the window is displayed to screen.
 | 
			
		||||
    return windowHandle() ? windowHandle()->screen()->devicePixelRatio() : 1.0f;
 | 
			
		||||
#else
 | 
			
		||||
    return 1.0f;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GRenderWindow::closeEvent(QCloseEvent* event) {
 | 
			
		||||
    emit Closed();
 | 
			
		||||
    QWidget::closeEvent(event);
 | 
			
		||||
@ -243,14 +246,18 @@ void GRenderWindow::mousePressEvent(QMouseEvent *event)
 | 
			
		||||
    if (event->button() == Qt::LeftButton)
 | 
			
		||||
    {
 | 
			
		||||
        auto pos = event->pos();
 | 
			
		||||
        this->TouchPressed(static_cast<unsigned>(pos.x()), static_cast<unsigned>(pos.y()));
 | 
			
		||||
        qreal pixelRatio = windowPixelRatio();
 | 
			
		||||
        this->TouchPressed(static_cast<unsigned>(pos.x() * pixelRatio),
 | 
			
		||||
                           static_cast<unsigned>(pos.y() * pixelRatio));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GRenderWindow::mouseMoveEvent(QMouseEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    auto pos = event->pos();
 | 
			
		||||
    this->TouchMoved(static_cast<unsigned>(std::max(pos.x(), 0)), static_cast<unsigned>(std::max(pos.y(), 0)));
 | 
			
		||||
    qreal pixelRatio = windowPixelRatio();
 | 
			
		||||
    this->TouchMoved(std::max(static_cast<unsigned>(pos.x() * pixelRatio), 0u),
 | 
			
		||||
                     std::max(static_cast<unsigned>(pos.y() * pixelRatio), 0u));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GRenderWindow::mouseReleaseEvent(QMouseEvent *event)
 | 
			
		||||
 | 
			
		||||
@ -111,6 +111,8 @@ public:
 | 
			
		||||
    void restoreGeometry(const QByteArray& geometry); // overridden
 | 
			
		||||
    QByteArray saveGeometry();  // overridden
 | 
			
		||||
 | 
			
		||||
    qreal windowPixelRatio();
 | 
			
		||||
 | 
			
		||||
    void closeEvent(QCloseEvent* event) override;
 | 
			
		||||
 | 
			
		||||
    void keyPressEvent(QKeyEvent* event) override;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user