1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Add UI for DXVK

It is used only in global settings for now. The old `DxvkWidget` was
left in the code intact for use in the per game settings. Due to how
interconnected the code is, it will require a more in-depth redesign
and it is outside the scope of the current PR.
This commit is contained in:
Stelios Tsampas 2021-04-29 00:36:59 +03:00
parent 4c0cc0caf9
commit d05f02d5f4
6 changed files with 327 additions and 7 deletions

View file

@ -3,11 +3,91 @@ from logging import getLogger
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QWidgetAction, QMenu, QToolButton, QHBoxLayout, QGroupBox
from PyQt5.QtWidgets import QGroupBox
from custom_legendary.core import LegendaryCore
from rare.components.tabs.settings.dxvk_ui import Ui_DxvkSettings
logger = getLogger("DXVK Settings")
class DxvkSettings(QGroupBox, Ui_DxvkSettings):
def __init__(self, core: LegendaryCore, name=None):
super(DxvkSettings, self).__init__()
self.setupUi(self)
self.name = name if name is not None else "default"
self.core = core
self.dxvk_options_map = {
"devinfo": self.devinfo,
"fps": self.fps,
"frametime": self.frametime,
"memory": self.memory,
"gpuload": self.gpuload,
"version": self.version,
"api": self.api,
}
self.load_settings()
self.show_dxvk.currentIndexChanged.connect(self.store_settings)
for opt in self.dxvk_options_map:
self.dxvk_options_map[opt].stateChanged.connect(self.store_settings)
# Show HUD ComboBox
# System Default, index 0, removes DXVK_HUD to use setting from env
# Hidden , index 1, adds DXVK_HUD=0 to override system configuration
# Visible , index 2, adds DXVK_HUD=1 to override system configuration
# Custom Options, index 3, adds DXVK_HUD=devinfo,fps and enables the customization panel
def load_settings(self):
dxvk_options = self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback=None)
self.gb_dxvk_options.setDisabled(True)
if dxvk_options is not None:
if dxvk_options == "0":
self.show_dxvk.setCurrentIndex(1)
elif dxvk_options == "1":
self.show_dxvk.setCurrentIndex(2)
else:
self.show_dxvk.setCurrentIndex(3)
self.gb_dxvk_options.setDisabled(False)
for opt in dxvk_options.split(","):
try:
self.dxvk_options_map[opt].setChecked(True)
except KeyError:
print("Malformed DXVK Option: " + opt)
continue
else:
self.show_dxvk.setCurrentIndex(0)
def store_settings(self):
show_dxvk_index = self.show_dxvk.currentIndex()
if show_dxvk_index:
if f"{self.name}.env" not in self.core.lgd.config.sections():
print("add section dxvk")
self.core.lgd.config.add_section(f"{self.name}.env")
if show_dxvk_index == 1:
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = "0"
if show_dxvk_index == 2:
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = "1"
if show_dxvk_index == 3:
dxvk_options = []
for o in self.dxvk_options_map:
if self.dxvk_options_map[o].isChecked():
dxvk_options.append(o)
if not dxvk_options:
dxvk_options = ["devinfo", "fps"]
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = ",".join(dxvk_options)
else:
if self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback=None) is not None:
self.core.lgd.config.remove_option(f"{self.name}.env", "DXVK_HUD")
if not self.core.lgd.config[f"{self.name}.env"]:
self.core.lgd.config.remove_section(f"{self.name}.env")
self.core.lgd.save_config()
self.load_settings()
class DxvkWidget(QGroupBox):
def __init__(self, core: LegendaryCore):

View file

@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'resources/ui/components/tabs/settings/dxvk.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_DxvkSettings(object):
def setupUi(self, DxvkSettings):
DxvkSettings.setObjectName("DxvkSettings")
DxvkSettings.resize(598, 182)
self.gridLayout = QtWidgets.QGridLayout(DxvkSettings)
self.gridLayout.setObjectName("gridLayout")
self.gb_dxvk_options = QtWidgets.QGroupBox(DxvkSettings)
self.gb_dxvk_options.setObjectName("gb_dxvk_options")
self.layout_dxvk_options = QtWidgets.QGridLayout(self.gb_dxvk_options)
self.layout_dxvk_options.setObjectName("layout_dxvk_options")
self.api = QtWidgets.QCheckBox(self.gb_dxvk_options)
self.api.setObjectName("api")
self.layout_dxvk_options.addWidget(self.api, 2, 2, 1, 1)
self.version = QtWidgets.QCheckBox(self.gb_dxvk_options)
self.version.setObjectName("version")
self.layout_dxvk_options.addWidget(self.version, 0, 2, 1, 1)
self.memory = QtWidgets.QCheckBox(self.gb_dxvk_options)
self.memory.setObjectName("memory")
self.layout_dxvk_options.addWidget(self.memory, 0, 1, 1, 1)
self.devinfo = QtWidgets.QCheckBox(self.gb_dxvk_options)
self.devinfo.setObjectName("devinfo")
self.layout_dxvk_options.addWidget(self.devinfo, 0, 0, 1, 1)
self.frametime = QtWidgets.QCheckBox(self.gb_dxvk_options)
self.frametime.setObjectName("frametime")
self.layout_dxvk_options.addWidget(self.frametime, 3, 0, 1, 1)
self.gpuload = QtWidgets.QCheckBox(self.gb_dxvk_options)
self.gpuload.setObjectName("gpuload")
self.layout_dxvk_options.addWidget(self.gpuload, 2, 1, 1, 1)
self.fps = QtWidgets.QCheckBox(self.gb_dxvk_options)
self.fps.setObjectName("fps")
self.layout_dxvk_options.addWidget(self.fps, 2, 0, 1, 1)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.layout_dxvk_options.addItem(spacerItem, 0, 3, 4, 1)
self.gridLayout.addWidget(self.gb_dxvk_options, 2, 0, 1, 3)
self.lbl_show_dxvk = QtWidgets.QLabel(DxvkSettings)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lbl_show_dxvk.sizePolicy().hasHeightForWidth())
self.lbl_show_dxvk.setSizePolicy(sizePolicy)
self.lbl_show_dxvk.setObjectName("lbl_show_dxvk")
self.gridLayout.addWidget(self.lbl_show_dxvk, 0, 0, 1, 1)
self.show_dxvk = QtWidgets.QComboBox(DxvkSettings)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.show_dxvk.sizePolicy().hasHeightForWidth())
self.show_dxvk.setSizePolicy(sizePolicy)
self.show_dxvk.setObjectName("show_dxvk")
self.show_dxvk.addItem("")
self.show_dxvk.addItem("")
self.show_dxvk.addItem("")
self.show_dxvk.addItem("")
self.gridLayout.addWidget(self.show_dxvk, 0, 1, 1, 2)
self.retranslateUi(DxvkSettings)
QtCore.QMetaObject.connectSlotsByName(DxvkSettings)
def retranslateUi(self, DxvkSettings):
_translate = QtCore.QCoreApplication.translate
DxvkSettings.setWindowTitle(_translate("DxvkSettings", "DxvkSettings"))
DxvkSettings.setTitle(_translate("DxvkSettings", "DXVK Settings"))
self.gb_dxvk_options.setTitle(_translate("DxvkSettings", "DXVK HUD Options"))
self.api.setText(_translate("DxvkSettings", "D3D Version"))
self.version.setText(_translate("DxvkSettings", "DXVK Version"))
self.memory.setText(_translate("DxvkSettings", "Memory Usage"))
self.devinfo.setText(_translate("DxvkSettings", "Device Info"))
self.frametime.setText(_translate("DxvkSettings", "Frame Time graph"))
self.gpuload.setText(_translate("DxvkSettings", "GPU Usage"))
self.fps.setText(_translate("DxvkSettings", "FPS"))
self.lbl_show_dxvk.setText(_translate("DxvkSettings", "Show HUD:"))
self.show_dxvk.setItemText(0, _translate("DxvkSettings", "System Default"))
self.show_dxvk.setItemText(1, _translate("DxvkSettings", "Hidden"))
self.show_dxvk.setItemText(2, _translate("DxvkSettings", "Visible"))
self.show_dxvk.setItemText(3, _translate("DxvkSettings", "Custom Options"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
DxvkSettings = QtWidgets.QGroupBox()
ui = Ui_DxvkSettings()
ui.setupUi(DxvkSettings)
DxvkSettings.show()
sys.exit(app.exec_())

View file

@ -3,19 +3,19 @@ from logging import getLogger
from PyQt5.QtWidgets import QFileDialog, QWidget
from custom_legendary.core import LegendaryCore
from rare.components.tabs.settings.dxvk import DxvkWidget
from rare.components.tabs.settings.dxvk import DxvkSettings, DxvkWidget
from rare.components.tabs.settings.linux_ui import Ui_LinuxSettings
from rare.utils.extra_widgets import PathEdit
from .linux_ui import Ui_LinuxSettings
logger = getLogger("LinuxSettings")
class LinuxSettings(QWidget, Ui_LinuxSettings):
def __init__(self, core: LegendaryCore, name="default"):
def __init__(self, core: LegendaryCore, name=None):
super(LinuxSettings, self).__init__()
self.setupUi(self)
self.name = name
self.name = name if name is not None else "default"
self.core = core
# Wineprefix
@ -46,7 +46,11 @@ class LinuxSettings(QWidget, Ui_LinuxSettings):
self.layout_exec.addWidget(self.wine_exec)
# dxvk
self.dxvk = DxvkWidget(core)
# FIXME: Remove this check when done with per game settings
if name is None:
self.dxvk = DxvkSettings(core, self.name)
else:
self.dxvk = DxvkWidget(core)
self.layout_dxvk.addWidget(self.dxvk)
def save_setting(self, widget: PathEdit, setting_name: str):

View file

@ -57,7 +57,7 @@ class Ui_LinuxSettings(object):
def retranslateUi(self, LinuxSettings):
_translate = QtCore.QCoreApplication.translate
LinuxSettings.setWindowTitle(_translate("LinuxSettings", "LinuxSettings"))
self.gb_wine.setTitle(_translate("LinuxSettings", "Default Wine Settings"))
self.gb_wine.setTitle(_translate("LinuxSettings", "Wine Settings"))
self.lbl_exec.setText(_translate("LinuxSettings", "Wine executable:"))
self.lbl_prefix.setText(_translate("LinuxSettings", "Wine prefix:"))

View file

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DxvkSettings</class>
<widget class="QGroupBox" name="DxvkSettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>598</width>
<height>182</height>
</rect>
</property>
<property name="windowTitle">
<string>DxvkSettings</string>
</property>
<property name="title">
<string>DXVK Settings</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0" colspan="3">
<widget class="QGroupBox" name="gb_dxvk_options">
<property name="title">
<string>DXVK HUD Options</string>
</property>
<layout class="QGridLayout" name="layout_dxvk_options">
<item row="2" column="2">
<widget class="QCheckBox" name="api">
<property name="text">
<string>D3D Version</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="version">
<property name="text">
<string>DXVK Version</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="memory">
<property name="text">
<string>Memory Usage</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="devinfo">
<property name="text">
<string>Device Info</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="frametime">
<property name="text">
<string>Frame Time graph</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="gpuload">
<property name="text">
<string>GPU Usage</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="fps">
<property name="text">
<string>FPS</string>
</property>
</widget>
</item>
<item row="0" column="3" rowspan="4">
<spacer name="hs_dxvk_options">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_show_dxvk">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Show HUD:</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QComboBox" name="show_dxvk">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>System Default</string>
</property>
</item>
<item>
<property name="text">
<string>Hidden</string>
</property>
</item>
<item>
<property name="text">
<string>Visible</string>
</property>
</item>
<item>
<property name="text">
<string>Custom Options</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -20,7 +20,7 @@
<item row="0" column="0">
<widget class="QGroupBox" name="gb_wine">
<property name="title">
<string>Default Wine Settings</string>
<string>Wine Settings</string>
</property>
<layout class="QGridLayout" name="layout_wine">
<item row="1" column="0" alignment="Qt::AlignRight">