Browse Source

very wip carboxyl

Signed-off-by: crueter <crueter@eden-emu.dev>
crueter 4 months ago
parent
commit
e72257d243
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 2
      CMakeModules/EdenModule.cmake
  2. 5
      src/CMakeLists.txt
  3. 2
      src/Eden/Config/CMakeLists.txt
  4. 53
      src/Eden/Config/GlobalConfigureDialog.qml
  5. 5
      src/Eden/Config/SectionHeader.qml
  6. 5
      src/Eden/Config/TestSetting.qml
  7. 82
      src/Eden/Config/fields/BaseField.qml
  8. 2
      src/Eden/Config/fields/ConfigCheckbox.qml
  9. 15
      src/Eden/Config/fields/ConfigComboBox.qml
  10. 5
      src/Eden/Config/fields/ConfigHexEdit.qml
  11. 5
      src/Eden/Config/fields/ConfigIntLine.qml
  12. 7
      src/Eden/Config/fields/ConfigIntSlider.qml
  13. 5
      src/Eden/Config/fields/ConfigIntSpin.qml
  14. 5
      src/Eden/Config/fields/ConfigStringEdit.qml
  15. 5
      src/Eden/Config/fields/ConfigTimeEdit.qml
  16. 5
      src/Eden/Config/fields/FieldLabel.qml
  17. 18
      src/Eden/Config/pages/PageScrollView.qml
  18. 42
      src/Eden/Config/pages/SettingsList.qml
  19. 4
      src/Eden/Config/pages/audio/AudioGeneralPage.qml
  20. 4
      src/Eden/Config/pages/cpu/CpuGeneralPage.qml
  21. 4
      src/Eden/Config/pages/debug/DebugAdvancedPage.qml
  22. 4
      src/Eden/Config/pages/debug/DebugCpuPage.qml
  23. 4
      src/Eden/Config/pages/debug/DebugGeneralPage.qml
  24. 4
      src/Eden/Config/pages/debug/DebugGraphicsPage.qml
  25. 5
      src/Eden/Config/pages/general/UiGameListPage.qml
  26. 18
      src/Eden/Config/pages/general/UiGeneralPage.qml
  27. 13
      src/Eden/Config/pages/global/GlobalTab.qml
  28. 3
      src/Eden/Config/pages/global/GlobalTabSwipeView.qml
  29. 4
      src/Eden/Config/pages/graphics/RendererAdvancedPage.qml
  30. 4
      src/Eden/Config/pages/graphics/RendererExtensionsPage.qml
  31. 4
      src/Eden/Config/pages/graphics/RendererPage.qml
  32. 4
      src/Eden/Config/pages/system/AppletsPage.qml
  33. 4
      src/Eden/Config/pages/system/FileSystemPage.qml
  34. 4
      src/Eden/Config/pages/system/SystemCorePage.qml
  35. 4
      src/Eden/Config/pages/system/SystemGeneralPage.qml
  36. 16
      src/Eden/Constants/Constants.qml
  37. 5
      src/Eden/Interface/QMLConfig.h
  38. 2
      src/Eden/Interface/SettingsInterface.cpp
  39. 2
      src/Eden/Interface/SettingsInterface.h
  40. 79
      src/Eden/Items/AnimatedDialog.qml
  41. 59
      src/Eden/Items/BetterMenu.qml
  42. 33
      src/Eden/Items/BetterMenuBar.qml
  43. 11
      src/Eden/Items/CMakeLists.txt
  44. 7
      src/Eden/Items/IconButton.qml
  45. 40
      src/Eden/Items/SettingsTabButton.qml
  46. 5
      src/Eden/Items/StatusBarButton.qml
  47. 46
      src/Eden/Items/VerticalTabBar.qml
  48. 68
      src/Eden/Items/fields/BetterSpinBox.qml
  49. 38
      src/Eden/Items/fields/BetterTextField.qml
  50. 20
      src/Eden/Items/fields/FieldFooter.qml
  51. 2
      src/Eden/Main/GameCarousel.qml
  52. 11
      src/Eden/Main/GameGrid.qml
  53. 4
      src/Eden/Main/GameGridCard.qml
  54. 4
      src/Eden/Main/GameList.qml
  55. 25
      src/Eden/Main/Main.qml
  56. 2
      src/Eden/Main/MarqueeText.qml
  57. 6
      src/Eden/Main/StatusBar.qml
  58. 2
      src/Eden/Models/GameIconProvider.cpp
  59. 3
      src/Eden/Models/GameListModel.cpp
  60. 2
      src/Eden/Models/GameListModel.h
  61. 6
      src/Eden/Models/GameListWorker.cpp
  62. 2
      src/Eden/Models/GameListWorker.h
  63. 2
      src/Eden/Native/CMakeLists.txt
  64. 16
      src/Eden/Native/icons/graphics.svg
  65. 29
      src/Eden/Native/main.cpp
  66. 6
      src/common/settings_enums.h
  67. 50
      src/qt_common/config/shared_translation.cpp
  68. 8
      src/qt_common/config/uisettings.h
  69. 6
      src/qt_common/externals/CMakeLists.txt
  70. 11
      src/qt_common/externals/cpmfile.json
  71. 10
      src/qt_common/qt_common.cpp
  72. 1
      src/qt_common/qt_common.h

2
CMakeModules/EdenModule.cmake

@ -44,4 +44,6 @@ function(EdenModule)
if (DEFINED MODULE_LIBRARIES)
target_link_libraries(${LIB_NAME} PRIVATE ${MODULE_LIBRARIES})
endif()
target_link_libraries(${LIB_NAME} PRIVATE Carboxyl::Base Carboxyl::Styles)
endfunction()

5
src/CMakeLists.txt

@ -17,6 +17,10 @@ endif()
set_property(DIRECTORY APPEND PROPERTY
COMPILE_DEFINITIONS $<$<CONFIG:Debug>:_DEBUG> $<$<NOT:$<CONFIG:Debug>>:NDEBUG>)
if (ENABLE_QT)
add_compile_definitions(YUZU_QT_WIDGETS YUZU_QT_QML)
endif()
# Set compilation flags
if (MSVC)
set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE STRING "" FORCE)
@ -235,7 +239,6 @@ if (YUZU_ROOM_STANDALONE)
endif()
if (ENABLE_QT)
add_definitions(-DYUZU_QT_WIDGETS)
add_subdirectory(qt_common)
add_subdirectory(Eden)
endif()

2
src/Eden/Config/CMakeLists.txt

@ -14,6 +14,8 @@ EdenModule(
SectionHeader.qml
pages/SettingsList.qml
pages/PageScrollView.qml
pages/global/GlobalTab.qml
pages/global/GlobalTabSwipeView.qml
pages/global/GlobalGeneralPage.qml

53
src/Eden/Config/GlobalConfigureDialog.qml

@ -1,5 +1,5 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Constants
@ -7,57 +7,82 @@ import Eden.Items
import Eden.Interface
import Eden.Util
AnimatedDialog {
import Carboxyl.Base
Dialog {
property list<var> configs
preferredWidth: 1280
popupType: Dialog.Native
anchors.centerIn: Overlay.overlay
implicitWidth: 1000
implicitHeight: 700
title: "Configuration"
title: qsTr("Configuration")
standardButtons: Dialog.Ok | Dialog.Cancel
Component.onCompleted: configs = Util.searchItem(swipe, "BaseField")
onAccepted: {
console.log("Accepted")
configs.forEach(config => {
config.apply()
// console.log(config.setting.label)
console.log(config.setting.label)
})
QtConfig.save()
}
onRejected: {
console.log("Rejected")
configs.forEach(config => config.sync())
QtConfig.reload()
// QtConfig.reload()
}
VerticalTabBar {
CarboxylTabBar {
id: tabBar
vertical: true
anchors {
top: parent.top
topMargin: 55
left: parent.left
leftMargin: 10
bottom: parent.bottom
}
contentWidth: 100
contentHeight: 60
position: TabBar.Footer
currentIndex: swipe.currentIndex
height: contentHeight * count + 20
width: contentWidth
Repeater {
model: ["General", "System", "CPU", "Graphics", "Audio", "Debug", "Controls"]
model: [qsTr("General"), qsTr("System"), qsTr("CPU"), qsTr(
"Graphics"), qsTr("Audio"), qsTr("Debug"), qsTr("Controls")]
CarboxylTabButton {
text: modelData
coloredIcon: true
inlineIcon: false // TODO: fix inlineIcon
SettingsTabButton {
required property string modelData
label: modelData
onClicked: tabBar.currentIndex = TabBar.index
icon.source: "qrc:/icons/" + modelData.toLowerCase() + ".svg"
icon.width: 20
icon.height: 20
}
}
}
SwipeView {
id: swipe
currentIndex: tabBar.currentIndex
width: 1000
height: 700
interactive: false
orientation: Qt.Vertical
anchors {
left: tabBar.right

5
src/Eden/Config/SectionHeader.qml

@ -1,8 +1,7 @@
import QtQuick
import Eden.Constants
import Carboxyl.Base
Text {
color: Constants.text
Label {
font.pixelSize: 16
}

5
src/Eden/Config/TestSetting.qml

@ -1,7 +1,7 @@
import QtQuick
import QtQuick.Layouts
import Eden.Constants
import Carboxyl.Base
Column {
topPadding: 5
@ -9,10 +9,9 @@ Column {
RowLayout {
uniformCellSizes: true
Text {
Label {
Layout.fillWidth: true
text: model.label
color: Constants.text
font.pixelSize: 16
height: 40

82
src/Eden/Config/fields/BaseField.qml

@ -18,11 +18,12 @@ Item {
readonly property string typeName: "BaseField"
clip: true
height: content.height + (helpText.height + helpText.anchors.topMargin)
height: 40 + (helpText.height + helpText.anchors.topMargin)
Component.onCompleted: sync()
function apply() {
console.log("Applying value", value, "to", setting.label)
if (setting.value !== value) {
setting.value = value
}
@ -34,56 +35,65 @@ Item {
}
}
RowLayout {
id: content
height: 50
IconButton {
id: help
label: "help"
icon.width: 30
icon.height: 30
spacing: 0
onClicked: helpText.toggle()
icon.color: palette.text
visible: setting.tooltip !== ""
anchors {
left: parent.left
right: parent.right
top: parent.top
topMargin: 5
}
z: 2
}
IconButton {
label: "help"
icon.width: 20
icon.height: 20
FieldCheckbox {
id: enable
setting: field.setting
z: 2
force: field.forceCheckbox
onClicked: helpText.toggle()
icon.color: setting.tooltip !== "" ? Constants.text : Constants.dialog
z: 2
}
height: 40
FieldCheckbox {
id: enable
setting: field.setting
z: 2
force: field.forceCheckbox
anchors {
left: help.right
}
}
RowLayout {
Layout.fillWidth: true
uniformCellSizes: true
spacing: 0
z: 2
FieldLabel {
z: 2
id: label
setting: field.setting
FieldLabel {
z: 2
id: label
setting: field.setting
}
height: 40
verticalAlignment: Text.AlignVCenter
children: showLabel ? [label, contentItem] : [contentItem]
anchors {
left: (enable.visible ? enable : help).right
right: parent.horizontalCenter
}
}
Rectangle {
color: Constants.dialog
anchors.fill: content
z: 0
RowLayout {
id: content
height: 40
visible: showLabel
anchors {
left: parent.horizontalCenter
right: parent.right
}
children: [contentItem]
}
Text {
@ -95,14 +105,14 @@ Item {
right: parent.right
rightMargin: 20
top: content.bottom
top: label.bottom
topMargin: -height
}
z: -1
text: setting.tooltip
color: Constants.subText
color: palette.toolTipText
font.pixelSize: 12
wrapMode: Text.WordWrap

2
src/Eden/Config/fields/ConfigCheckbox.qml

@ -1,5 +1,5 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Constants

15
src/Eden/Config/fields/ConfigComboBox.qml

@ -1,7 +1,6 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Controls.Material.impl
import Eden.Constants
import Eden.Config
@ -17,17 +16,5 @@ BaseField {
font.pixelSize: 14
model: setting.combo
currentIndex: value
background: MaterialTextContainer {
implicitWidth: 120
implicitHeight: 40
outlineColor: (enabled
&& control.hovered) ? control.Material.primaryTextColor : control.Material.hintTextColor
focusedOutlineColor: control.Material.accentColor
controlHasActiveFocus: control.activeFocus
controlHasText: true
horizontalPadding: control.Material.textFieldHorizontalPadding
}
}
}

5
src/Eden/Config/fields/ConfigHexEdit.qml

@ -1,12 +1,13 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Eden.Items
import Eden.Config
import Eden.Constants
BaseField {
contentItem: BetterTextField {
contentItem: TextField {
enabled: enable
Layout.fillWidth: true
@ -19,8 +20,8 @@ BaseField {
font.pixelSize: 15
text: Number(value).toString(16)
suffix: setting.suffix
// suffix: setting.suffix
onTextEdited: value = Number("0x" + text)
}
}

5
src/Eden/Config/fields/ConfigIntLine.qml

@ -1,4 +1,5 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Items
@ -6,7 +7,7 @@ import Eden.Config
import Eden.Constants
BaseField {
contentItem: BetterTextField {
contentItem: TextField {
enabled: enable
Layout.fillWidth: true
@ -21,8 +22,8 @@ BaseField {
font.pixelSize: 15
text: value
suffix: setting.suffix
// suffix: setting.suffix
onTextEdited: value = parseInt(text)
}
}

7
src/Eden/Config/fields/ConfigIntSlider.qml

@ -1,10 +1,10 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Items
import Eden.Config
import Eden.Constants
import Carboxyl.Base
// Lots of cancer but idrc
BaseField {
@ -28,9 +28,8 @@ BaseField {
snapMode: Slider.SnapAlways
}
Text {
Label {
font.pixelSize: 14
color: Constants.text
text: field.value + setting.suffix

5
src/Eden/Config/fields/ConfigIntSpin.qml

@ -1,5 +1,6 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Eden.Items
import Eden.Config
@ -7,7 +8,7 @@ import Eden.Constants
BaseField {
id: field
contentItem: BetterSpinBox {
contentItem: SpinBox {
enabled: enable
Layout.fillWidth: true
@ -19,8 +20,8 @@ BaseField {
font.pixelSize: 15
value: field.value
label: setting.suffix
// label: setting.suffix
onValueModified: field.value = value
}
}

5
src/Eden/Config/fields/ConfigStringEdit.qml

@ -1,12 +1,13 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Eden.Items
import Eden.Config
import Eden.Constants
BaseField {
contentItem: BetterTextField {
contentItem: TextField {
enabled: enable
Layout.fillWidth: true
@ -15,8 +16,8 @@ BaseField {
font.pixelSize: 15
text: value
suffix: setting.suffix
// suffix: setting.suffix
onTextEdited: value = text
}
}

5
src/Eden/Config/fields/ConfigTimeEdit.qml

@ -1,5 +1,6 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Eden.Items
import Eden.Config
@ -7,7 +8,7 @@ import Eden.Constants
BaseField {
// TODO: real impl
contentItem: BetterTextField {
contentItem: TextField {
enabled: enable
Layout.fillWidth: true
@ -22,6 +23,6 @@ BaseField {
font.pixelSize: 15
text: value
suffix: setting.suffix
// suffix: setting.suffix
}
}

5
src/Eden/Config/fields/FieldLabel.qml

@ -2,13 +2,12 @@ import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Constants
import Carboxyl.Base
Text {
Label {
property var setting
text: setting.label
color: Constants.text
font.pixelSize: 14
height: 50

18
src/Eden/Config/pages/PageScrollView.qml

@ -0,0 +1,18 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
ScrollView {
id: scroll
WheelHandler {
target: scroll
onWheel: event => {
const sensitivity = 1 / 1500
scroll.ScrollBar.vertical.position -= event.angleDelta.y * sensitivity
scroll.ScrollBar.vertical.position = Math.max(
Math.min(scroll.ScrollBar.vertical.position,
1.0 - scroll.ScrollBar.vertical.size), 0.0)
}
}
}

42
src/Eden/Config/pages/SettingsList.qml

@ -2,10 +2,9 @@ import QtQuick
import QtQuick.Layouts
import Eden.Config
import Eden.Constants
import Eden.Interface
ColumnLayout {
ListView {
required property int category
property bool inset: false
@ -13,35 +12,28 @@ ColumnLayout {
property list<string> idInclude: []
property list<string> idExclude: []
SectionHeader {
text: header
visible: header != ""
}
ListView {
clip: true
boundsBehavior: Flickable.StopAtBounds
clip: true
boundsBehavior: Flickable.StopAtBounds
interactive: false
interactive: false
implicitHeight: contentHeight
delegate: Setting {}
implicitHeight: contentHeight
delegate: Setting {}
Layout.fillHeight: true
Layout.fillWidth: true
Layout.leftMargin: 5
spacing: 8
Layout.fillHeight: true
Layout.fillWidth: true
Layout.leftMargin: 5
spacing: 0
model: SettingsInterface.category(category, idInclude, idExclude)
model: SettingsInterface.category(category, idInclude, idExclude)
Rectangle {
anchors.fill: parent
color: "transparent"
Rectangle {
anchors.fill: parent
color: "transparent"
border {
color: inset ? Constants.text : "transparent"
width: 1
}
border {
color: inset ? palette.text : "transparent"
width: 1
}
}
}

4
src/Eden/Config/pages/audio/AudioGeneralPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/cpu/CpuGeneralPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/debug/DebugAdvancedPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {

4
src/Eden/Config/pages/debug/DebugCpuPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {

4
src/Eden/Config/pages/debug/DebugGeneralPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {

4
src/Eden/Config/pages/debug/DebugGraphicsPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {

5
src/Eden/Config/pages/general/UiGameListPage.qml

@ -1,12 +1,13 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
// TODO: language, theme
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

18
src/Eden/Config/pages/general/UiGeneralPage.qml

@ -1,23 +1,35 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth
SettingsList {
category: SettingsCategories.UiGeneral
// onContentHeightChanged: console.log(height, parent.height)
}
SectionHeader {
text: qsTr("Linux")
visible: Qt.platform.os === "linux"
}
SettingsList {
category: SettingsCategories.Linux
visible: Qt.platform.os === "linux"
}
SectionHeader {
text: qsTr("Theming")
}
// SettingsList {
// category: SettingsCategories.UiLayout
// }
}
}

13
src/Eden/Config/pages/global/GlobalTab.qml

@ -1,13 +1,15 @@
import QtQuick 2.15
import QtQuick.Controls.Material
import QtQuick.Controls
import Eden.Constants
import Carboxyl.Base
Item {
required property list<string> tabs
property alias tabBar: tabBar
TabBar {
CarboxylTabBar {
id: tabBar
currentIndex: swipe.currentIndex
@ -20,15 +22,10 @@ Item {
Repeater {
model: tabs
TabButton {
CarboxylTabButton {
font.pixelSize: 16
text: modelData
}
}
background: Rectangle {
color: tabBar.Material.backgroundColor
radius: 8
}
}
}

3
src/Eden/Config/pages/global/GlobalTabSwipeView.qml

@ -1,9 +1,10 @@
import QtQuick 2.15
import QtQuick.Controls.Material
import QtQuick.Controls
import Eden.Constants
SwipeView {
interactive: false
anchors {
top: tabBar.bottom
left: parent.left

4
src/Eden/Config/pages/graphics/RendererAdvancedPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/graphics/RendererExtensionsPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/graphics/RendererPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/system/AppletsPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/system/FileSystemPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/system/SystemCorePage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

4
src/Eden/Config/pages/system/SystemGeneralPage.qml

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Interface
import Eden.Config
ScrollView {
PageScrollView {
id: scroll
ColumnLayout {
width: scroll.width - scroll.effectiveScrollBarWidth

16
src/Eden/Constants/Constants.qml

@ -5,20 +5,4 @@ import QtQuick
QtObject {
readonly property int width: 1200
readonly property int height: 1000
property color accent: "#FF4444"
property color accentPressed: "#ff5252"
readonly property color bg: "#111111"
readonly property color dialog: "#222222"
readonly property color dialogButton: "#000000"
readonly property color sub: "#181818"
readonly property color button: "#1E1E1E"
readonly property color buttonHighlighted: "#4A4A4A"
readonly property color text: "#EEEEEE"
readonly property color subText: "#AAAAAA"
property real scalar: 1.0
}

5
src/Eden/Interface/QMLConfig.h

@ -1,9 +1,10 @@
#ifndef QMLCONFIG_H
#define QMLCONFIG_H
#include "qt_common/qt_config.h"
#include "qt_common/config/qt_config.h"
#include <QObject>
#include <qdebug.h>
class QMLConfig : public QObject {
Q_OBJECT
@ -16,9 +17,11 @@ public:
{}
Q_INVOKABLE inline void reload() {
qDebug() << "Reloading";
m_config->ReloadAllValues();
}
Q_INVOKABLE inline void save() {
qDebug() << "Saving";
m_config->SaveAllValues();
}
};

2
src/Eden/Interface/SettingsInterface.cpp

@ -1,7 +1,7 @@
#include "SettingsInterface.h"
#include "common/settings.h"
#include "common/logging/log.h"
#include "qt_common/uisettings.h"
#include "qt_common/config/uisettings.h"
SettingsInterface::SettingsInterface(QObject* parent)
: QObject{parent}

2
src/Eden/Interface/SettingsInterface.h

@ -5,7 +5,7 @@
#include <QQmlEngine>
#include "QMLSetting.h"
#include "qt_common/shared_translation.h"
#include "qt_common/config/shared_translation.h"
#include "Models/SettingsModel.h"
namespace SettingsCategories {

79
src/Eden/Items/AnimatedDialog.qml

@ -1,79 +0,0 @@
import QtQuick
import QtQuick.Controls.Material
import Eden.Constants
Dialog {
id: dia
property int preferredWidth: Overlay.overlay.width / 2
property int preferredHeight: Overlay.overlay.height / 1.25
width: Math.min(preferredWidth, Overlay.overlay.width)
height: Math.min(preferredHeight, Overlay.overlay.height)
property int radius: 12
property bool colorful: false
anchors.centerIn: Overlay.overlay
enter: Transition {
NumberAnimation {
property: "opacity"
duration: 200
from: 0.0
to: 1.0
}
}
exit: Transition {
NumberAnimation {
property: "opacity"
duration: 200
from: 1.0
to: 0.0
}
}
header: Rectangle {
topLeftRadius: dia.radius
topRightRadius: dia.radius
color: colorful ? Qt.alpha(Constants.accent, 0.5) : Constants.dialog
height: 50
Text {
anchors.fill: parent
font.pixelSize: Math.round(25)
text: title
color: Constants.text
font.bold: true
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
}
background: Rectangle {
radius: dia.radius
color: Constants.dialog
}
footer: DialogButtonBox {
id: control
background: Item {}
delegate: Button {
id: btn
}
}
Overlay.modal: Item {}
Overlay.modeless: Item {}
}

59
src/Eden/Items/BetterMenu.qml

@ -1,59 +0,0 @@
import QtQuick
import QtQuick.Controls
import Eden.Constants
Menu {
background: Rectangle {
implicitWidth: 200
implicitHeight: 40
color: Constants.button
radius: 10
}
function fixAmpersands(originalText) {
var regex = /&(\w)/g
return originalText.replace(regex, "<u>$1</u>")
}
delegate: MenuItem {
id: control
font.pixelSize: 14
background: Rectangle {
color: control.down || control.hovered
|| control.highlighted ? Constants.buttonHighlighted : Constants.button
}
contentItem: Item {
Text {
anchors {
left: parent.left
leftMargin: 5 + (control.checkable ? control.indicator.width : 0)
verticalCenter: parent.verticalCenter
}
text: fixAmpersands(control.text)
color: Constants.text
font: control.font
}
Text {
anchors {
right: parent.right
rightMargin: 5
verticalCenter: parent.verticalCenter
}
Component.onCompleted: if (control.action != null
&& typeof control.action.shortcut !== 'undefined')
text = control.action.shortcut
color: Constants.text
font: control.font
}
}
}
}

33
src/Eden/Items/BetterMenuBar.qml

@ -1,33 +0,0 @@
import QtQuick
import QtQuick.Controls
import Eden.Constants
MenuBar {
background: Rectangle {
implicitHeight: 30
color: Constants.button
}
function fixAmpersands(originalText) {
var regex = /&(\w)/g
return originalText.replace(regex, "<u>$1</u>")
}
delegate: MenuBarItem {
id: control
font.pixelSize: 16
background: Rectangle {
color: control.down || control.hovered
|| control.highlighted ? Constants.buttonHighlighted : Constants.button
}
contentItem: Text {
text: fixAmpersands(control.text)
color: Constants.text
font: control.font
}
}
}

11
src/Eden/Items/CMakeLists.txt

@ -9,14 +9,7 @@ EdenModule(
URI Eden.Items
QML_FILES
StatusBarButton.qml
BetterMenu.qml
AnimatedDialog.qml
BetterMenuBar.qml
SettingsTabButton.qml
IconButton.qml
VerticalTabBar.qml
fields/BetterSpinBox.qml
fields/BetterTextField.qml
fields/FieldFooter.qml
)

7
src/Eden/Items/IconButton.qml

@ -1,7 +1,5 @@
import QtQuick
import QtQuick.Controls.Material
import Eden.Constants
import QtQuick.Controls
Button {
required property string label
@ -15,9 +13,6 @@ Button {
height: icon.height
icon.source: "qrc:/icons/" + label.toLowerCase() + ".svg"
icon.width: 45
icon.height: 45
icon.color: Constants.text
background: Item {}
}

40
src/Eden/Items/SettingsTabButton.qml

@ -1,40 +0,0 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Layouts
import Eden.Constants
TabButton {
required property string label
id: button
implicitHeight: 100
width: 95
contentItem: ColumnLayout {
IconButton {
label: button.label
Layout.maximumHeight: 60
Layout.maximumWidth: 65
Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
onClicked: button.clicked()
}
Text {
font.pixelSize: 16
text: label
Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
color: Constants.text
}
}
// background: Rectangle {
// color: button.Material.backgroundColor
// }
}

5
src/Eden/Items/StatusBarButton.qml

@ -4,17 +4,18 @@ import QtQuick.Layouts
import Eden.Constants
// TODO: ToolButton?
MouseArea {
id: button
required property string text
property color textColor: Constants.text
property color textColor: palette.text
implicitHeight: 20
implicitWidth: txt.width
hoverEnabled: true
onHoveredChanged: rect.color = containsMouse ? Constants.buttonHighlighted : "transparent"
onHoveredChanged: rect.color = containsMouse ? palette.alternateBase : "transparent"
Rectangle {
id: rect

46
src/Eden/Items/VerticalTabBar.qml

@ -1,46 +0,0 @@
import QtQuick
import QtQuick.Controls.Material
import Eden.Constants
TabBar {
clip: true
id: control
contentItem: ListView {
model: control.contentModel
currentIndex: control.currentIndex
spacing: control.spacing
orientation: ListView.Vertical
boundsBehavior: Flickable.StopAtBounds
flickableDirection: Flickable.AutoFlickIfNeeded
snapMode: ListView.SnapToItem
highlightMoveDuration: 300
highlightRangeMode: ListView.ApplyRange
preferredHighlightBegin: 40
preferredHighlightEnd: height - 40
highlight: Item {
z: 2
Rectangle {
radius: 5
anchors {
right: parent.right
verticalCenter: parent.verticalCenter
}
height: parent.height / 2
width: 5
color: Constants.accent
}
}
}
background: Rectangle {
color: control.Material.backgroundColor
radius: 8
}
}

68
src/Eden/Items/fields/BetterSpinBox.qml

@ -1,68 +0,0 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls.impl
import Eden.Constants
SpinBox {
id: control
property string label: ""
from: -0x7FFFFFFF
to: 0x7FFFFFFF
contentItem: BetterTextField {
text: parent.textFromValue(parent.value, parent.locale)
placeholderText: parent.label
width: parent.width
font: parent.font
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
inputMethodHints: Qt.ImhFormattedNumbersOnly
onEditingFinished: {
control.value = parseFloat(text.replace(/,/g, ""))
valueModified()
}
}
up.indicator: IconLabel {
icon {
source: "qrc:/icons/forward.svg"
}
x: control.mirrored ? 0 : control.width - width
implicitWidth: 40
implicitHeight: 40
height: parent.height
width: height / 2
}
down.indicator: IconLabel {
icon {
source: "qrc:/icons/back.svg"
}
x: control.mirrored ? control.width - width : 0
implicitWidth: 40
implicitHeight: 40
height: parent.height
width: height / 2
}
background: Item {}
FieldFooter {
anchors {
bottom: contentItem.bottom
}
}
}

38
src/Eden/Items/fields/BetterTextField.qml

@ -1,38 +0,0 @@
import QtQuick
import QtQuick.Controls.Material
import Eden.Constants
import Eden.Items
TextField {
property string suffix: ""
placeholderTextColor: enabled && activeFocus ? Constants.accent : Qt.darker(
Constants.text, 1.3)
color: enabled ? Constants.text : Qt.darker(Constants.text, 1.5)
background: Rectangle {
color: "transparent"
}
FieldFooter {}
horizontalAlignment: "AlignHCenter"
Text {
id: txt
text: suffix
font.pixelSize: 14
anchors {
verticalCenter: parent.verticalCenter
right: parent.right
rightMargin: 5
}
color: "gray"
}
}

20
src/Eden/Items/fields/FieldFooter.qml

@ -1,20 +0,0 @@
import QtQuick
import QtQuick.Controls.Material
import Eden.Constants
Rectangle {
height: 2
color: enabled ? Constants.text : Qt.darker(Constants.text, 1.5)
width: parent.width
anchors {
bottom: parent.bottom
left: parent.left
}
Behavior on color {
ColorAnimation {
duration: 250
}
}
}

2
src/Eden/Main/GameCarousel.qml

@ -70,7 +70,7 @@ ListView {
font.family: "Monospace"
color: "lightblue"
background: Constants.bg
background: "transparent"
}
}

11
src/Eden/Main/GameGrid.qml

@ -11,6 +11,17 @@ GridView {
id: grid
property int cellSize: Math.floor(width / setting.value)
boundsBehavior: Flickable.StopAtBounds
WheelHandler {
target: grid
onWheel: event => {
const sensitivity = 1.0
grid.contentY -= event.angleDelta.y * sensitivity
grid.contentY = Math.min(Math.max(grid.contentY, 0.0),
grid.contentHeight - grid.height)
}
}
highlightFollowsCurrentItem: true
clip: true

4
src/Eden/Main/GameGridCard.qml

@ -8,7 +8,7 @@ import Eden.Constants
Rectangle {
id: wrapper
color: Constants.dialog
color: palette.alternateBase
radius: 16
Image {
@ -74,7 +74,7 @@ Rectangle {
font.family: "Monospace"
color: "lightblue"
background: Constants.dialog
background: "transparent"
canMarquee: wrapper.GridView.isCurrentItem
}

4
src/Eden/Main/GameList.qml

@ -18,7 +18,7 @@ Rectangle {
readonly property int deadzone: 8000
readonly property int repeatTimeMs: 125
color: Constants.bg
color: palette.base
// TODO: use the original yuzu backend for dis
// Gamepad {
@ -65,7 +65,7 @@ Rectangle {
id: view
anchors {
bottom: button.top
bottom: parent.bottom
left: parent.left
right: parent.right
top: parent.top

25
src/Eden/Main/Main.qml

@ -1,20 +1,19 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import Eden.Config
import Eden.Items
import Eden.Constants
import Carboxyl.Base
ApplicationWindow {
width: Constants.width
height: Constants.height
visible: true
title: TitleManager.title
Material.theme: Material.Dark
Material.accent: Material.Red
Material.roundedScale: Material.NotRounded
palette: Palettes.theme
GameList {
anchors {
@ -30,8 +29,8 @@ ApplicationWindow {
id: globalConfig
}
menuBar: BetterMenuBar {
BetterMenu {
menuBar: MenuBar {
Menu {
title: qsTr("&File")
contentWidth: 225
@ -51,7 +50,7 @@ ApplicationWindow {
MenuSeparator {}
BetterMenu {
Menu {
title: "&Recent Files"
}
@ -75,7 +74,7 @@ ApplicationWindow {
shortcut: "Ctrl+Q"
}
}
BetterMenu {
Menu {
title: qsTr("&Emulation")
contentWidth: 240
@ -108,7 +107,7 @@ ApplicationWindow {
}
}
BetterMenu {
Menu {
title: qsTr("&View")
contentWidth: 260
@ -143,7 +142,7 @@ ApplicationWindow {
MenuSeparator {}
}
BetterMenu {
Menu {
title: qsTr("&Tools")
contentWidth: 225
@ -161,7 +160,7 @@ ApplicationWindow {
MenuSeparator {}
BetterMenu {
Menu {
title: qsTr("&Amiibo")
}
@ -188,7 +187,7 @@ ApplicationWindow {
shortcut: "Ctrl+P"
}
BetterMenu {
Menu {
title: "&TAS"
}
}

2
src/Eden/Main/MarqueeText.qml

@ -24,7 +24,7 @@ Item {
step) + combined.substring(
0, step) : text
property int step: 0
property bool animate: canMarquee && txt.contentWidth > parent.width
property bool animate: canMarquee && txt.contentWidth > width
property bool canMarquee: false

6
src/Eden/Main/StatusBar.qml

@ -1,5 +1,5 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import QtQuick.Layouts
import Eden.Constants
@ -20,7 +20,7 @@ ToolBar {
implicitHeight: 30
background: Rectangle {
color: Constants.bg
color: palette.dark
}
// TODO: reduce duplicate code
@ -72,7 +72,7 @@ ToolBar {
text: value.toUpperCase()
textColor: Constants.text
textColor: palette.text
onClicked: {
if (value === "docked") {

2
src/Eden/Models/GameIconProvider.cpp

@ -1,6 +1,6 @@
#include <qnamespace.h>
#include "GameIconProvider.h"
#include "qt_common/uisettings.h"
#include "qt_common/config/uisettings.h"
/**
* Gets the default icon (for games without valid title metadata)

3
src/Eden/Models/GameListModel.cpp

@ -10,7 +10,7 @@
#include "core/hle/service/filesystem/filesystem.h"
#include "hid_core/hid_core.h"
#include "qt_common/qt_common.h"
#include "qt_common/qt_meta.h"
#include "qt_common/util/meta.h"
GameListModel::GameListModel(QObject *parent, QQmlEngine *engine) {
QHash<int, QByteArray> rez = QStandardItemModel::roleNames();
@ -85,7 +85,6 @@ void GameListModel::addEntry(QStandardItem *entry, const UISettings::GameDir &pa
QString text = entry->data(GLMRoleTypes::NAME).toString();
QPixmap pixmap = entry->data(GLMRoleTypes::ICON).value<QPixmap>();
qDebug() << "Adding pixmap" << text;
m_provider->addPixmap(text, pixmap);
invisibleRootItem()->appendRow(entry);
}

2
src/Eden/Models/GameListModel.h

@ -5,7 +5,7 @@
#include <QObject>
#include <QQmlEngine>
#include <QStandardItemModel>
#include "qt_common/uisettings.h"
#include "qt_common/config/uisettings.h"
typedef struct Game {
QString absPath;

6
src/Eden/Models/GameListWorker.cpp

@ -29,7 +29,7 @@
#include "core/file_sys/submission_package.h"
#include "core/loader/loader.h"
#include "qt_common/qt_common.h"
#include "qt_common/uisettings.h"
#include "qt_common/config/uisettings.h"
namespace {
@ -238,7 +238,9 @@ QStandardItem* MakeGameListEntry(const std::string& path,
item->setData(QString::fromStdString(name), GameListModel::NAME);
item->setData(QString::fromStdString(path), GameListModel::PATH);
const u32 pic_size = UISettings::values.game_icon_size.GetValue();
// We should always choose 256
// Good balance of size and not looking stupid
const u32 pic_size = 256;
QPixmap picture;
if (!picture.loadFromData(icon.data(), static_cast<u32>(icon.size()))) {

2
src/Eden/Models/GameListWorker.h

@ -15,7 +15,7 @@
#include "common/thread.h"
#include "core/file_sys/registered_cache.h"
#include "qt_common/uisettings.h"
#include "qt_common/config/uisettings.h"
namespace Core { class System; }

2
src/Eden/Native/CMakeLists.txt

@ -32,6 +32,8 @@ target_link_libraries(eden
Qt6::Quick
Qt6::QuickControls2
Carboxyl::Base
${MODULES}
)

16
src/Eden/Native/icons/graphics.svg

@ -2,7 +2,7 @@
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg
fill="#000000"
fill="#FFFFFF"
height="800px"
width="800px"
version="1.1"
@ -18,7 +18,7 @@
id="defs5" /><sodipodi:namedview
id="namedview5"
pagecolor="#ffffff"
bordercolor="#000000"
bordercolor="#FFFFFF"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
@ -35,25 +35,25 @@
inkscape:current-layer="Layer_1" />
<g
id="g5"
style="fill:#000000;fill-opacity:1">
style="fill:#FFFFFF;fill-opacity:1">
<g
id="g4"
style="fill:#000000;fill-opacity:1">
style="fill:#FFFFFF;fill-opacity:1">
<g
id="g3"
style="fill:#000000;fill-opacity:1">
style="fill:#FFFFFF;fill-opacity:1">
<path
d="M490.667,96H85.333V74.667c0-11.782-9.551-21.333-21.333-21.333H21.333C9.551,53.333,0,62.885,0,74.667 C0,86.449,9.551,96,21.333,96h21.333v21.333v256V416c0,11.782,9.551,21.333,21.333,21.333c11.782,0,21.333-9.551,21.333-21.333 v-21.333H128v42.667c0,11.782,9.551,21.333,21.333,21.333c11.782,0,21.333-9.551,21.333-21.333v-42.667h42.667v42.667 c0,11.782,9.551,21.333,21.333,21.333c11.782,0,21.333-9.551,21.333-21.333v-42.667h42.667v42.667 c0,11.782,9.551,21.333,21.333,21.333s21.333-9.551,21.333-21.333v-42.667h149.333c11.782,0,21.333-9.551,21.333-21.333v-256 C512,105.551,502.449,96,490.667,96z M469.333,352h-384V138.667h384V352z"
id="path1"
style="fill:#000000;fill-opacity:1" />
style="fill:#FFFFFF;fill-opacity:1" />
<path
d="M362.667,330.667c47.131,0,85.333-38.202,85.333-85.333S409.798,160,362.667,160s-85.333,38.202-85.333,85.333 S315.535,330.667,362.667,330.667z M362.667,202.667c23.567,0,42.667,19.099,42.667,42.667S386.234,288,362.667,288 S320,268.901,320,245.333S339.099,202.667,362.667,202.667z"
id="path2"
style="fill:#000000;fill-opacity:1" />
style="fill:#FFFFFF;fill-opacity:1" />
<path
d="M192,330.667h42.667c11.782,0,21.333-9.551,21.333-21.333v-128c0-11.782-9.551-21.333-21.333-21.333H192 c-47.131,0-85.333,38.202-85.333,85.333S144.869,330.667,192,330.667z M192,202.667h21.333V288H192 c-23.567,0-42.667-19.099-42.667-42.667S168.433,202.667,192,202.667z"
id="path3"
style="fill:#000000;fill-opacity:1" />
style="fill:#FFFFFF;fill-opacity:1" />
</g>
</g>
</g>

29
src/Eden/Native/main.cpp

@ -1,26 +1,27 @@
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "CarboxylApplication.h"
#include "Interface/QMLConfig.h"
#include "Interface/SettingsInterface.h"
#include "Interface/TitleManager.h"
#include "Models/GameListModel.h"
#include "core/core.h"
#include "common/settings_enums.h"
#include "qt_common/config/uisettings.h"
#include "qt_common/qt_common.h"
#include <QQuickStyle>
#include <qwidget.h>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQuickStyle::setStyle(QObject::tr("Material"));
QQmlApplicationEngine engine;
QCoreApplication::setOrganizationName(QStringLiteral("eden-emu"));
QCoreApplication::setApplicationName(QStringLiteral("eden"));
QApplication::setDesktopFileName(QStringLiteral("org.eden-emu.eden"));
QGuiApplication::setWindowIcon(QIcon(":/icons/eden.svg"));
QApplication::setDesktopFileName(QStringLiteral("dev.eden-emu.eden"));
QGuiApplication::setWindowIcon(QIcon(QStringLiteral(":/icons/eden.svg")));
/// QtCommon
QtCommon::Init(new QWidget);
@ -34,13 +35,21 @@ int main(int argc, char *argv[])
config->save();
});
/// Expose Enums
// carboxyl setup
auto translations = ConfigurationShared::ComboboxEnumeration(&app);
// Core
std::unique_ptr<Core::System> system = std::make_unique<Core::System>();
const auto enumeration = &translations->at(Settings::EnumMetadata<Settings::Style>::Index());
QString style;
for (const auto &[idx, name] : *enumeration) {
if (idx == (u32) UISettings::values.carboxyl_style.GetValue()) {
style = name;
}
}
CarboxylApplication *carboxylApp = new CarboxylApplication(app, &engine, style, QStringLiteral("Trioxide"));
carboxylApp->setParent(&app);
/// CONTEXT
QQmlApplicationEngine engine;
auto ctx = engine.rootContext();
ctx->setContextProperty(QStringLiteral("QtConfig"), QVariant::fromValue(config));

6
src/common/settings_enums.h

@ -152,6 +152,12 @@ ENUM(SpirvOptimizeMode, Never, OnLoad, Always);
ENUM(GpuOverclock, Low, Medium, High)
ENUM(TemperatureUnits, Celsius, Fahrenheit)
#ifdef YUZU_QT_QML
ENUM(Accent, System, Red, Blue, Orange, Gold, Forest, Violet, Pink, Cyan, Steel);
ENUM(Theme, System, Light, Dark, Midnight);
ENUM(Style, Trioxide, Graphide, Basalt, Hydrogen, Helios);
#endif
template <typename Type>
inline std::string_view CanonicalizeEnum(Type id) {
const auto group = EnumMetadata<Type>::Canonicalizations();

50
src/qt_common/config/shared_translation.cpp

@ -403,6 +403,11 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent)
// Web Service
// Ui
INSERT(UISettings, carboxyl_accent, tr("Accent"), tr("What accent color to use throughout the application."));
INSERT(UISettings, carboxyl_theme, tr("Theme"), tr("The palette to use throughout the application."));
// TODO: brief explanations, link to Carboxyl?
INSERT(UISettings, carboxyl_style, tr("Style"), tr("The control style to use throughout the application."));
// Ui General
INSERT(UISettings,
@ -727,6 +732,51 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent)
PAIR(GpuOverclock, High, tr("High (512)")),
}});
#ifdef YUZU_QT_QML
#define ACCENT(name) PAIR(Accent, name, tr(#name))
translations->insert({Settings::EnumMetadata<Settings::Accent>::Index(),
{
ACCENT(System),
ACCENT(Red),
ACCENT(Blue),
ACCENT(Orange),
ACCENT(Gold),
ACCENT(Forest),
ACCENT(Violet),
ACCENT(Pink),
ACCENT(Cyan),
ACCENT(Steel),
}});
#undef ACCENT
#define THEME(name) PAIR(Theme, name, tr(#name))
translations->insert({Settings::EnumMetadata<Settings::Theme>::Index(),
{
THEME(System),
THEME(Light),
THEME(Dark),
THEME(Midnight),
}});
#undef THEME
#define STYLE(name) PAIR(Style, name, tr(#name))
translations->insert({Settings::EnumMetadata<Settings::Style>::Index(),
{
STYLE(Trioxide),
STYLE(Graphide),
STYLE(Basalt),
STYLE(Hydrogen),
STYLE(Helios),
}});
#undef STYLE
#endif
#undef PAIR
#undef CTX_PAIR

8
src/qt_common/config/uisettings.h

@ -150,11 +150,19 @@ struct Values {
false,
#endif
"enable_gamemode", Category::UiGeneral};
#ifdef __unix__
SwitchableSetting<bool> gui_force_x11{linkage, false, "gui_force_x11", Category::UiGeneral};
Setting<bool> gui_hide_backend_warning{linkage, false, "gui_hide_backend_warning", Category::UiGeneral};
#endif
#ifdef YUZU_QT_QML
// TODO: native-like style default
Setting<Settings::Theme> carboxyl_theme{linkage, Settings::Theme::System, "carboyl_theme", Category::UiLayout};
Setting<Settings::Style> carboxyl_style{linkage, Settings::Style::Trioxide, "carboyl_style", Category::UiLayout};
Setting<Settings::Accent> carboxyl_accent{linkage, Settings::Accent::System, "carboyl_accent", Category::UiLayout};
#endif
// Discord RPC
Setting<bool> enable_discord_presence{linkage, false, "enable_discord_presence", Category::Ui};

6
src/qt_common/externals/CMakeLists.txt

@ -17,3 +17,9 @@ AddJsonPackage(quazip)
# frozen
AddJsonPackage(frozen)
# Carboxyl
# TODO
if (ENABLE_QT)
AddJsonPackage(carboxyl)
endif()

11
src/qt_common/externals/cpmfile.json

@ -14,5 +14,16 @@
"repo": "serge-sans-paille/frozen",
"sha": "61dce5ae18",
"hash": "b8dfe741c82bc178dfc9749d4ab5a130cee718d9ee7b71d9b547cf5f7f23027ed0152ad250012a8546399fcc1e12187efc68d89d6731256c4d2df7d04eef8d5c"
},
"carboxyl": {
"package": "Carboxyl",
"repo": "crueter/Carboxyl",
"git_host": "git.crueter.xyz",
"sha": "a9071022e2",
"hash": "340ae7e3fbc5b01b321e1cd9c8c8b3da4047b00abc5bf5d6388e47f253139d7551bcc006c5606665565f04d3bfc21cd2228e11c221090ea78746a6f72898ecc4",
"bundled": "true",
"options": [
"CARBOXYL_DEMO OFF"
]
}
}

10
src/qt_common/qt_common.cpp

@ -36,8 +36,14 @@ std::unique_ptr<Core::System> system = nullptr;
std::shared_ptr<FileSys::RealVfsFilesystem> vfs = nullptr;
std::unique_ptr<FileSys::ManualContentProvider> provider = nullptr;
Core::Frontend::WindowSystemType GetWindowSystemType()
{
const QStringList supported_file_extensions = {QStringLiteral("nro"),
QStringLiteral("nso"),
QStringLiteral("nca"),
QStringLiteral("xci"),
QStringLiteral("nsp"),
QStringLiteral("kip")};
Core::Frontend::WindowSystemType GetWindowSystemType() {
// Determine WSI type based on Qt platform.
QString platform_name = QGuiApplication::platformName();
if (platform_name == QStringLiteral("windows"))

1
src/qt_common/qt_common.h

@ -23,6 +23,7 @@ extern QObject *rootObject;
extern std::unique_ptr<Core::System> system;
extern std::shared_ptr<FileSys::RealVfsFilesystem> vfs;
extern std::unique_ptr<FileSys::ManualContentProvider> provider;
extern const QStringList supported_file_extensions;
typedef std::function<bool(std::size_t, std::size_t)> QtProgressCallback;

Loading…
Cancel
Save