forked from eden-emu/eden
Compare commits
6 commits
master
...
solariscom
Author | SHA1 | Date | |
---|---|---|---|
1851c7552f | |||
0faf988fd5 | |||
de16e75f29 | |||
1f557a907d | |||
62349956a7 | |||
6e661266f2 |
66 changed files with 443 additions and 2460 deletions
|
@ -7,6 +7,11 @@ project(yuzu)
|
|||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
||||
# Terrific Solaris pkg shenanigans
|
||||
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||
list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||
endif()
|
||||
|
||||
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
|
||||
|
||||
|
@ -216,14 +221,14 @@ if (YUZU_USE_BUNDLED_VCPKG)
|
|||
list(APPEND VCPKG_MANIFEST_FEATURES "android")
|
||||
endif()
|
||||
|
||||
include(CPMUtil)
|
||||
include(CPM)
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
AddPackage(
|
||||
NAME vcpkg
|
||||
CPMAddPackage(
|
||||
DOWNLOAD_ONLY YES
|
||||
URL "https://github.com/microsoft/vcpkg.git"
|
||||
GIT_REPOSITORY "https://github.com/microsoft/vcpkg.git"
|
||||
GIT_TAG "ea2a964f93"
|
||||
SHA "ea2a964f93"
|
||||
CUSTOM_CACHE_KEY "ea2a"
|
||||
)
|
||||
|
||||
include(${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake)
|
||||
|
@ -277,30 +282,6 @@ function(check_submodules_present)
|
|||
message(FATAL_ERROR "Git submodule ${module} not found. "
|
||||
"Please run: \ngit submodule update --init --recursive")
|
||||
endif()
|
||||
|
||||
set(SUBMODULE_DIR "${PROJECT_SOURCE_DIR}/${module}")
|
||||
|
||||
execute_process(
|
||||
COMMAND git rev-parse --short=10 HEAD
|
||||
WORKING_DIRECTORY ${SUBMODULE_DIR}
|
||||
OUTPUT_VARIABLE SUBMODULE_SHA
|
||||
)
|
||||
|
||||
# would probably be better to do string parsing, but whatever
|
||||
execute_process(
|
||||
COMMAND git remote get-url origin
|
||||
WORKING_DIRECTORY ${SUBMODULE_DIR}
|
||||
OUTPUT_VARIABLE SUBMODULE_URL
|
||||
)
|
||||
|
||||
string(REGEX REPLACE "\n|\r" "" SUBMODULE_SHA ${SUBMODULE_SHA})
|
||||
string(REGEX REPLACE "\n|\r|\\.git" "" SUBMODULE_URL ${SUBMODULE_URL})
|
||||
|
||||
get_filename_component(SUBMODULE_NAME ${SUBMODULE_DIR} NAME)
|
||||
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${SUBMODULE_NAME})
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS ${SUBMODULE_SHA})
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${SUBMODULE_URL})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
|
@ -477,7 +458,7 @@ if (ENABLE_SDL2)
|
|||
endif()
|
||||
|
||||
if (DEFINED SDL2_VER)
|
||||
download_bundled_external("sdl2/" ${SDL2_VER} "sdl2-bundled" SDL2_PREFIX 2.32.8)
|
||||
download_bundled_external("sdl2/" ${SDL2_VER} "sdl2-bundled" SDL2_PREFIX)
|
||||
endif()
|
||||
|
||||
set(SDL2_FOUND YES)
|
||||
|
@ -540,7 +521,11 @@ if (ENABLE_QT)
|
|||
endif()
|
||||
|
||||
if (UNIX AND NOT APPLE)
|
||||
find_package(Qt6 REQUIRED COMPONENTS DBus GuiPrivate)
|
||||
find_package(Qt6 REQUIRED COMPONENTS DBus)
|
||||
endif()
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
|
||||
endif()
|
||||
|
||||
if (ENABLE_QT_TRANSLATION)
|
||||
|
@ -608,7 +593,7 @@ endif()
|
|||
|
||||
if (WIN32 AND YUZU_CRASH_DUMPS)
|
||||
set(BREAKPAD_VER "breakpad-c89f9dd")
|
||||
download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX "c89f9dd")
|
||||
download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX)
|
||||
|
||||
set(BREAKPAD_CLIENT_INCLUDE_DIR "${BREAKPAD_PREFIX}/include")
|
||||
set(BREAKPAD_CLIENT_LIBRARY "${BREAKPAD_PREFIX}/lib/libbreakpad_client.lib")
|
||||
|
@ -746,6 +731,7 @@ else()
|
|||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT yuzu-cmd)
|
||||
endif()
|
||||
|
||||
|
||||
# Installation instructions
|
||||
# =========================
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,117 +0,0 @@
|
|||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Created-By: crueter
|
||||
# Docs will come at a later date, mostly this is to just reduce boilerplate
|
||||
# and some cmake magic to allow for runtime viewing of dependency versions
|
||||
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
include(CPM)
|
||||
|
||||
function(AddPackage)
|
||||
cpm_set_policies()
|
||||
|
||||
set(oneValueArgs
|
||||
NAME
|
||||
VERSION
|
||||
REPO
|
||||
SHA
|
||||
HASH
|
||||
KEY
|
||||
URL # Only for custom non-GitHub urls
|
||||
DOWNLOAD_ONLY
|
||||
FIND_PACKAGE_ARGUMENTS
|
||||
SYSTEM_PACKAGE
|
||||
BUNDLED_PACKAGE
|
||||
)
|
||||
|
||||
set(multiValueArgs OPTIONS PATCHES)
|
||||
|
||||
cmake_parse_arguments(PKG_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
||||
|
||||
if (NOT DEFINED PKG_ARGS_NAME)
|
||||
message(FATAL_ERROR "CPMUtil: No package name defined")
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED PKG_ARGS_URL)
|
||||
if (DEFINED PKG_ARGS_REPO AND DEFINED PKG_ARGS_SHA)
|
||||
set(PKG_GIT_URL https://github.com/${PKG_ARGS_REPO})
|
||||
set(PKG_URL "${PKG_GIT_URL}/archive/${PKG_ARGS_SHA}.zip")
|
||||
else()
|
||||
message(FATAL_ERROR "CPMUtil: No custom URL and no repository + sha defined")
|
||||
endif()
|
||||
else()
|
||||
set(PKG_URL ${PKG_ARGS_URL})
|
||||
set(PKG_GIT_URL ${PKG_URL})
|
||||
endif()
|
||||
|
||||
message(STATUS "CPMUtil: Downloading package ${PKG_ARGS_NAME} from ${PKG_URL}")
|
||||
|
||||
if (NOT DEFINED PKG_ARGS_KEY)
|
||||
if (DEFINED PKG_ARGS_SHA)
|
||||
string(SUBSTRING ${PKG_ARGS_SHA} 0 4 PKG_KEY)
|
||||
message(STATUS "CPMUtil: No custom key defined, using ${PKG_KEY} from sha")
|
||||
else()
|
||||
message(FATAL_ERROR "CPMUtil: No custom key and no commit sha defined")
|
||||
endif()
|
||||
else()
|
||||
set(PKG_KEY ${PKG_ARGS_KEY})
|
||||
endif()
|
||||
|
||||
if (DEFINED PKG_ARGS_HASH)
|
||||
set(PKG_HASH "SHA512=${PKG_ARGS_HASH}")
|
||||
endif()
|
||||
|
||||
# Default behavior is bundled
|
||||
if (DEFINED PKG_ARGS_SYSTEM_PACKAGE)
|
||||
set(CPM_USE_LOCAL_PACKAGES ${PKG_ARGS_SYSTEM_PACKAGE})
|
||||
elseif (DEFINED PKG_ARGS_BUNDLED_PACKAGE)
|
||||
if (PKG_ARGS_BUNDLED_PACKAGE)
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
else()
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
endif()
|
||||
else()
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
endif()
|
||||
|
||||
CPMAddPackage(
|
||||
NAME ${PKG_ARGS_NAME}
|
||||
VERSION ${PKG_ARGS_VERSION}
|
||||
URL ${PKG_URL}
|
||||
URL_HASH ${PKG_HASH}
|
||||
CUSTOM_CACHE_KEY ${PKG_KEY}
|
||||
DOWNLOAD_ONLY ${PKG_ARGS_DOWNLOAD_ONLY}
|
||||
FIND_PACKAGE_ARGUMENTS ${PKG_ARGS_FIND_PACKAGE_ARGUMENTS}
|
||||
|
||||
OPTIONS ${PKG_ARGS_OPTIONS}
|
||||
PATCHES ${PKG_ARGS_PATCHES}
|
||||
|
||||
${PKG_ARGS_UNPARSED_ARGUMENTS}
|
||||
)
|
||||
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${PKG_ARGS_NAME})
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${PKG_GIT_URL})
|
||||
|
||||
if (${PKG_ARGS_NAME}_ADDED)
|
||||
if (DEFINED PKG_ARGS_SHA)
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS ${PKG_ARGS_SHA})
|
||||
elseif(DEFINED PKG_ARGS_VERSION)
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS ${PKG_ARGS_VERSION})
|
||||
else()
|
||||
message(WARNING "CPMUtil: Package ${PKG_ARGS_NAME} has no specified sha or version")
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS "unknown")
|
||||
endif()
|
||||
else()
|
||||
if (DEFINED CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION)
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS "${CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION} (system)")
|
||||
else()
|
||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS "unknown (system)")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# pass stuff to parent scope
|
||||
set(${PKG_ARGS_NAME}_ADDED "${${PKG_ARGS_NAME}_ADDED}" PARENT_SCOPE)
|
||||
set(${PKG_ARGS_NAME}_SOURCE_DIR "${${PKG_ARGS_NAME}_SOURCE_DIR}" PARENT_SCOPE)
|
||||
set(${PKG_ARGS_NAME}_BINARY_DIR "${${PKG_ARGS_NAME}_BINARY_DIR}" PARENT_SCOPE)
|
||||
endfunction()
|
|
@ -63,4 +63,6 @@ function(copy_yuzu_Qt6_deps target_dir)
|
|||
else()
|
||||
# Update for non-MSVC platforms if needed
|
||||
endif()
|
||||
# Fixes dark mode being forced automatically even when light theme is set in app settings.
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/qt.conf" "[Platforms]\nWindowsArguments = darkmode=0")
|
||||
endfunction(copy_yuzu_Qt6_deps)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# remote_path: path to the file to download, relative to the remote repository root
|
||||
# prefix_var: name of a variable which will be set with the path to the extracted contents
|
||||
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
||||
function(download_bundled_external remote_path lib_name cpm_key prefix_var version)
|
||||
function(download_bundled_external remote_path lib_name cpm_key prefix_var)
|
||||
set(package_base_url "https://github.com/eden-emulator/")
|
||||
set(package_repo "no_platform")
|
||||
set(package_extension "no_platform")
|
||||
|
@ -29,13 +29,13 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
|
|||
set(package_url "${package_base_url}${package_repo}")
|
||||
set(full_url ${package_url}${remote_path}${lib_name}${package_extension})
|
||||
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME ${cpm_key}
|
||||
VERSION ${version}
|
||||
URL ${full_url}
|
||||
DOWNLOAD_ONLY YES
|
||||
KEY ${CACHE_KEY}
|
||||
# TODO(crueter): hash
|
||||
CUSTOM_CACHE_KEY ${CACHE_KEY}
|
||||
)
|
||||
|
||||
set(${prefix_var} "${${cpm_key}_SOURCE_DIR}" PARENT_SCOPE)
|
||||
|
@ -46,11 +46,11 @@ function(download_win_archives)
|
|||
set(FORCE_WIN_ARCHIVES ON)
|
||||
set(FFmpeg_EXT_NAME "ffmpeg-7.1.1")
|
||||
|
||||
download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "ffmpeg-bundled" "" 7.1.1)
|
||||
download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "ffmpeg-bundled" "")
|
||||
|
||||
# TODO(crueter): separate handling for arm64
|
||||
set(SDL2_VER "SDL2-2.32.8")
|
||||
download_bundled_external("sdl2/" ${SDL2_VER} "sdl2-bundled" "" 2.32.8)
|
||||
download_bundled_external("sdl2/" ${SDL2_VER} "sdl2-bundled" "")
|
||||
set(FORCE_WIN_ARCHIVES OFF)
|
||||
endfunction()
|
||||
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
get_property(NAMES GLOBAL PROPERTY CPM_PACKAGE_NAMES)
|
||||
get_property(SHAS GLOBAL PROPERTY CPM_PACKAGE_SHAS)
|
||||
get_property(URLS GLOBAL PROPERTY CPM_PACKAGE_URLS)
|
||||
|
||||
list(LENGTH NAMES DEPS_LENGTH)
|
||||
|
||||
list(JOIN NAMES "\",\n\t\"" DEP_NAME_DIRTY)
|
||||
set(DEP_NAMES "\t\"${DEP_NAME_DIRTY}\"")
|
||||
|
||||
list(JOIN SHAS "\",\n\t\"" DEP_SHAS_DIRTY)
|
||||
set(DEP_SHAS "\t\"${DEP_SHAS_DIRTY}\"")
|
||||
|
||||
list(JOIN URLS "\",\n\t\"" DEP_URLS_DIRTY)
|
||||
set(DEP_URLS "\t\"${DEP_URLS_DIRTY}\"")
|
||||
|
||||
configure_file(dep_hashes.h.in dep_hashes.h @ONLY)
|
||||
target_sources(common PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/dep_hashes.h)
|
||||
target_include_directories(common PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
|
@ -104,6 +104,7 @@ Then type `target remote localhost:1234` and type `c` (for continue) - and then
|
|||
- `br <expr>`: Set breakpoint at `<expr>`.
|
||||
- `delete`: Deletes all breakpoints.
|
||||
- `catch throw`: Breakpoint at throw. Can also use `br __cxa_throw`
|
||||
- `br _mesa_error`: Break on mesa errors (set environment variable `MESA_DEBUG=1` beforehand), see [MESA_DEBUG](https://mesa-docs.readthedocs.io/en/latest/debugging.html).
|
||||
|
||||
Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference of a pointer) or `*(1 + var)` (computed expression).
|
||||
|
||||
|
|
13
docs/build/Solaris.md
vendored
13
docs/build/Solaris.md
vendored
|
@ -87,6 +87,19 @@ export PATH="$PATH:$PWD"
|
|||
- **Build**: `cmake --build build`.
|
||||
- **Installing**: `sudo cmake --install build`.
|
||||
|
||||
### Running
|
||||
|
||||
Default Mesa is a bit outdated, the following environment variables should be set for a smoother experience:
|
||||
```sh
|
||||
export MESA_GL_VERSION_OVERRIDE=4.6
|
||||
export MESA_GLSL_VERSION_OVERRIDE=460
|
||||
export MESA_EXTENSION_MAX_YEAR=2025
|
||||
export MESA_DEBUG=1
|
||||
export MESA_VK_VERSION_OVERRIDE=1.3
|
||||
# Only if nvidia/intel drm drivers cause crashes, will severely hinder performance
|
||||
export LIBGL_ALWAYS_SOFTWARE=1
|
||||
```
|
||||
|
||||
### Notes
|
||||
|
||||
- Modify the generated ffmpeg.make (in build dir) if using multiple threads (base system `make` doesn't use `-j4`, so change for `gmake`).
|
||||
|
|
209
externals/CMakeLists.txt
vendored
209
externals/CMakeLists.txt
vendored
|
@ -5,7 +5,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# cpm
|
||||
include(CPMUtil)
|
||||
include(CPM)
|
||||
|
||||
# Explicitly declare this option here to propagate to the oaknut CPM call
|
||||
option(DYNARMIC_TESTS "Build tests" ${BUILD_TESTING})
|
||||
|
@ -29,6 +29,8 @@ endif()
|
|||
|
||||
# Xbyak (also used by Dynarmic, so needs to be added first)
|
||||
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")
|
||||
# Fix regset.h collisions
|
||||
set(XBYAK_HASH 51f507b0b3)
|
||||
|
@ -38,22 +40,22 @@ if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
|||
set(XBYAK_SHA512SUM 5824e92159e07fa36a774aedd3b3ef3541d0241371d522cffa4ab3e1f215fa5097b1b77865b47b2481376c704fa079875557ea463ca63d0a7fd6a8a20a589e70)
|
||||
endif()
|
||||
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME xbyak
|
||||
REPO "Lizzie841/xbyak"
|
||||
SHA ${XBYAK_HASH}
|
||||
HASH ${XBYAK_SHA512SUM}
|
||||
URL "https://github.com/Lizzie841/xbyak/archive/${XBYAK_HASH}.zip"
|
||||
URL_HASH SHA512=${XBYAK_SHA512SUM}
|
||||
CUSTOM_CACHE_KEY ${XBYAK_HASH}
|
||||
)
|
||||
endif()
|
||||
|
||||
# Oaknut (also used by Dynarmic, so needs to be added first)
|
||||
if (ARCHITECTURE_arm64 OR DYNARMIC_TESTS)
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME oaknut
|
||||
VERSION 2.0.1
|
||||
REPO "merryhime/oaknut"
|
||||
SHA 94c726ce03
|
||||
HASH d8d082242fa1881abce3c82f8dafa002c4e561e66a69e7fc038af67faa5eff2630f082d3d19579c88c4c9f9488e54552accc8cb90e7ce743efe043b6230c08ac
|
||||
URL "https://github.com/merryhime/oaknut/archive/94c726ce03.zip"
|
||||
URL_HASH SHA512=d8d082242fa1881abce3c82f8dafa002c4e561e66a69e7fc038af67faa5eff2630f082d3d19579c88c4c9f9488e54552accc8cb90e7ce743efe043b6230c08ac
|
||||
CUSTOM_CACHE_KEY "94c7"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@ -67,14 +69,15 @@ add_subdirectory(glad)
|
|||
|
||||
# mbedtls
|
||||
# TODO(crueter): test local mbedtls
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME mbedtls
|
||||
REPO "Mbed-TLS/mbedtls"
|
||||
SHA "8c88150ca1"
|
||||
HASH 769ad1e94c570671071e1f2a5c0f1027e0bf6bcdd1a80ea8ac970f2c86bc45ce4e31aa88d6d8110fc1bed1de81c48bc624df1b38a26f8b340a44e109d784a966
|
||||
URL "https://github.com/Mbed-TLS/mbedtls/archive/8c88150ca1.zip"
|
||||
URL_HASH SHA512=769ad1e94c570671071e1f2a5c0f1027e0bf6bcdd1a80ea8ac970f2c86bc45ce4e31aa88d6d8110fc1bed1de81c48bc624df1b38a26f8b340a44e109d784a966
|
||||
PATCHES
|
||||
${CMAKE_SOURCE_DIR}/.patch/mbedtls/0001-cmake-version.patch
|
||||
SYSTEM_PACKAGE ON
|
||||
CUSTOM_CACHE_KEY "8c88"
|
||||
)
|
||||
|
||||
if (mbedtls_ADDED)
|
||||
|
@ -128,12 +131,11 @@ if (YUZU_USE_EXTERNAL_SDL2)
|
|||
set(SDL_SHA512SUM d95af47f469a312876f8ab361074a1e7b8083db19935a102d9c6e5887ace6008e64475a8c54b00164b40cad86492bb1b2366084efdd0b2555e5fea6d9c5da80e)
|
||||
endif()
|
||||
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME SDL2
|
||||
REPO "libsdl-org/SDL"
|
||||
SHA ${SDL_HASH}
|
||||
HASH ${SDL_SHA512SUM}
|
||||
KEY ${YUZU_SYSTEM_PROFILE}
|
||||
URL "https://github.com/libsdl-org/SDL/archive/${SDL_HASH}.zip"
|
||||
URL_HASH SHA512=${SDL_SHA512SUM}
|
||||
CUSTOM_CACHE_KEY "${YUZU_SYSTEM_PROFILE}"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@ -144,17 +146,18 @@ if (NOT TARGET enet::enet)
|
|||
add_library(enet::enet ALIAS enet)
|
||||
endif()
|
||||
|
||||
AddPackage(
|
||||
# TODO(crueter): Create a common CPMUtil.cmake that does this for me
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME cubeb
|
||||
REPO "mozilla/cubeb"
|
||||
SHA fa02160712
|
||||
HASH 82d808356752e4064de48c8fecbe7856715ade1e76b53937116bf07129fc1cc5b3de5e4b408de3cd000187ba8dc32ca4109661cb7e0355a52e54bd81b9be1c61
|
||||
URL "https://github.com/mozilla/cubeb/archive/fa02160712.zip"
|
||||
FIND_PACKAGE_ARGUMENTS "CONFIG" # not sure this works outside of gentoo
|
||||
OPTIONS
|
||||
"USE_SANITIZERS OFF"
|
||||
"BUILD_TESTS OFF"
|
||||
"BUILD_TOOLS OFF"
|
||||
SYSTEM_PACKAGE ON
|
||||
CUSTOM_CACHE_KEY "fa02"
|
||||
)
|
||||
|
||||
if (cubeb_ADDED)
|
||||
|
@ -181,17 +184,19 @@ endif()
|
|||
|
||||
# DiscordRPC
|
||||
if (USE_DISCORD_PRESENCE)
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME discord-rpc
|
||||
REPO "discord/discord-rpc"
|
||||
SHA 963aa9f3e5
|
||||
HASH 386e1344e9a666d730f2d335ee3aef1fd05b1039febefd51aa751b705009cc764411397f3ca08dffd46205c72f75b235c870c737b2091a4ed0c3b061f5919bde
|
||||
URL "https://github.com/discord/discord-rpc/archive/963aa9f3e5.zip"
|
||||
URL_HASH SHA512=386e1344e9a666d730f2d335ee3aef1fd05b1039febefd51aa751b705009cc764411397f3ca08dffd46205c72f75b235c870c737b2091a4ed0c3b061f5919bde
|
||||
OPTIONS
|
||||
"BUILD_EXAMPLES OFF"
|
||||
PATCHES
|
||||
${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0001-cmake-version.patch
|
||||
${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0002-no-clang-format.patch
|
||||
${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0003-fix-cpp17.patch
|
||||
CUSTOM_CACHE_KEY "963a"
|
||||
)
|
||||
|
||||
target_include_directories(discord-rpc INTERFACE ${discord-rpc_SOURCE_DIR}/include)
|
||||
|
@ -200,68 +205,76 @@ endif()
|
|||
|
||||
# Sirit
|
||||
# TODO(crueter): spirv-tools doesn't work w/ system
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME SPIRV-Headers
|
||||
REPO "KhronosGroup/SPIRV-Headers"
|
||||
SHA 4e209d3d7e
|
||||
HASH f48bbe18341ed55ea0fe280dbbbc0a44bf222278de6e716e143ca1e95ca320b06d4d23d6583fbf8d03e1428f3dac8fa00e5b82ddcd6b425e6236d85af09550a4
|
||||
URL "https://github.com/KhronosGroup/SPIRV-Headers/archive/4e209d3d7e.zip"
|
||||
URL_HASH SHA512=f48bbe18341ed55ea0fe280dbbbc0a44bf222278de6e716e143ca1e95ca320b06d4d23d6583fbf8d03e1428f3dac8fa00e5b82ddcd6b425e6236d85af09550a4
|
||||
CUSTOM_CACHE_KEY "4e20"
|
||||
)
|
||||
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME sirit
|
||||
REPO "eden-emulator/sirit"
|
||||
SHA db1f1e8ab5
|
||||
HASH 73eb3a042848c63a10656545797e85f40d142009dfb7827384548a385e1e28e1ac72f42b25924ce530d58275f8638554281e884d72f9c7aaf4ed08690a414b05
|
||||
URL "https://github.com/raphaelthegreat/sirit/archive/51fcf9720f.zip"
|
||||
URL_HASH SHA512=a8f98ea0c51763b89924d836ad482ebdfe9130251cf4e14733ccaacc885ae8cc4c8b03d1dc43e8861609e5f7929c16f935879c1f6bf61866fd75077954774394
|
||||
OPTIONS
|
||||
"SIRIT_USE_SYSTEM_SPIRV_HEADERS ON"
|
||||
SYSTEM_PACKAGE ON
|
||||
CUSTOM_CACHE_KEY "51fc"
|
||||
)
|
||||
|
||||
# httplib
|
||||
if ((ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER))
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES ${YUZU_USE_SYSTEM_HTTPLIB})
|
||||
|
||||
# TODO(crueter): fix local package (gentoo?)
|
||||
CPMAddPackage(
|
||||
NAME httplib
|
||||
VERSION 0.12
|
||||
REPO "yhirose/cpp-httplib"
|
||||
SHA a609330e4c
|
||||
HASH dd3fd0572f8367d8549e1319fd98368b3e75801a293b0c3ac9b4adb806473a4506a484b3d389dc5bee5acc460cb90af7a20e5df705a1696b56496b30b9ce7ed2
|
||||
URL "https://github.com/yhirose/cpp-httplib/archive/a609330e4c.zip"
|
||||
URL_HASH SHA512=dd3fd0572f8367d8549e1319fd98368b3e75801a293b0c3ac9b4adb806473a4506a484b3d389dc5bee5acc460cb90af7a20e5df705a1696b56496b30b9ce7ed2
|
||||
FIND_PACKAGE_ARGUMENTS "MODULE"
|
||||
OPTIONS
|
||||
"HTTPLIB_REQUIRE_OPENSSL ON"
|
||||
SYSTEM_PACKAGE ${YUZU_USE_SYSTEM_HTTPLIB}
|
||||
CUSTOM_CACHE_KEY "a609"
|
||||
)
|
||||
endif()
|
||||
|
||||
# cpp-jwt
|
||||
if (ENABLE_WEB_SERVICE)
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME cpp-jwt
|
||||
VERSION 1.4
|
||||
REPO "arun11299/cpp-jwt"
|
||||
SHA 10ef5735d8
|
||||
HASH ebba3d26b33a3b0aa909f475e099594560edbce10ecd03e76d7fea68549a28713ea606d363808f88a5495b62c54c3cdb7e47aee2d946eceabd36e310479dadb7
|
||||
URL "https://github.com/arun11299/cpp-jwt/archive/10ef5735d8.zip"
|
||||
URL_HASH SHA512=ebba3d26b33a3b0aa909f475e099594560edbce10ecd03e76d7fea68549a28713ea606d363808f88a5495b62c54c3cdb7e47aee2d946eceabd36e310479dadb7
|
||||
FIND_PACKAGE_ARGUMENTS "CONFIG"
|
||||
OPTIONS
|
||||
"CPP_JWT_BUILD_EXAMPLES OFF"
|
||||
"CPP_JWT_BUILD_TESTS OFF"
|
||||
"CPP_JWT_USE_VENDORED_NLOHMANN_JSON OFF"
|
||||
CUSTOM_CACHE_KEY "10ef"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Opus
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES ${YUZU_USE_SYSTEM_OPUS})
|
||||
|
||||
CPMAddPackage(
|
||||
NAME Opus
|
||||
VERSION 1.3
|
||||
REPO "xiph/opus"
|
||||
SHA 5ded705cf4
|
||||
HASH 0dc89e58ddda1f3bc6a7037963994770c5806c10e66f5cc55c59286fc76d0544fe4eca7626772b888fd719f434bc8a92f792bdb350c807968b2ac14cfc04b203
|
||||
URL "https://github.com/xiph/opus/archive/5ded705cf4.zip"
|
||||
URL_HASH SHA512=0dc89e58ddda1f3bc6a7037963994770c5806c10e66f5cc55c59286fc76d0544fe4eca7626772b888fd719f434bc8a92f792bdb350c807968b2ac14cfc04b203
|
||||
FIND_PACKAGE_ARGUMENTS "MODULE"
|
||||
OPTIONS
|
||||
"OPUS_BUILD_TESTING OFF"
|
||||
"OPUS_BUILD_PROGRAMS OFF"
|
||||
"OPUS_INSTALL_PKG_CONFIG_MODULE OFF"
|
||||
"OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF"
|
||||
SYSTEM_PACKAGE ${YUZU_USE_SYSTEM_OPUS}
|
||||
CUSTOM_CACHE_KEY "5ded"
|
||||
)
|
||||
|
||||
# FFMpeg
|
||||
|
@ -277,36 +290,31 @@ endif()
|
|||
if (YUZU_USE_EXTERNAL_VULKAN_HEADERS)
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
else()
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
endif()
|
||||
|
||||
# TODO(crueter): Vk1.4 impl
|
||||
# TODO(crueter): System vk-headers are too new for externals vk-util
|
||||
|
||||
# TODO(crueter): allow sys packages?
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME VulkanHeaders
|
||||
VERSION 1.3.274
|
||||
REPO "KhronosGroup/Vulkan-Headers"
|
||||
SHA 89268a6d17
|
||||
HASH 3ab349f74298ba72cafb8561015690c0674d428a09fb91ccd3cd3daca83650d190d46d33fd97b0a8fd4223fe6df2bcabae89136fbbf7c0bfeb8776f9448304c8
|
||||
BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_HEADERS}
|
||||
URL "https://github.com/KhronosGroup/Vulkan-Headers/archive/89268a6d17.zip"
|
||||
URL_HASH SHA512=3ab349f74298ba72cafb8561015690c0674d428a09fb91ccd3cd3daca83650d190d46d33fd97b0a8fd4223fe6df2bcabae89136fbbf7c0bfeb8776f9448304c8
|
||||
CUSTOM_CACHE_KEY "8926"
|
||||
)
|
||||
|
||||
# CMake's interface generator sucks
|
||||
if (VulkanHeaders_ADDED)
|
||||
target_include_directories(Vulkan-Headers INTERFACE ${VulkanHeaders_SOURCE_DIR}/include)
|
||||
# Vulkan-Utility-Libraries
|
||||
if (YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
else()
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
endif()
|
||||
|
||||
set(VulkanHeaders_SOURCE_DIR "${VulkanHeaders_SOURCE_DIR}" PARENT_SCOPE)
|
||||
set(VulkanHeaders_ADDED "${VulkanHeaders_ADDED}" PARENT_SCOPE)
|
||||
|
||||
# Vulkan-Utility-Libraries
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME VulkanUtilityLibraries
|
||||
REPO "KhronosGroup/Vulkan-Utility-Libraries"
|
||||
SHA df2e358152
|
||||
HASH 3e468c3d9ff93f6d418d71e5527abe0a12c8c7ab5b0b52278bbbee4d02bb87e99073906729b727e0147242b7e3fd5dedf68b803f1878cb4c0e4f730bc2238d79
|
||||
BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES}
|
||||
URL "https://github.com/KhronosGroup/Vulkan-Utility-Libraries/archive/df2e358152.zip"
|
||||
URL_HASH SHA512=3e468c3d9ff93f6d418d71e5527abe0a12c8c7ab5b0b52278bbbee4d02bb87e99073906729b727e0147242b7e3fd5dedf68b803f1878cb4c0e4f730bc2238d79
|
||||
CUSTOM_CACHE_KEY "df2e"
|
||||
)
|
||||
|
||||
set(VulkanUtilityLibraries_SOURCE_DIR "${VulkanUtilityLibraries_SOURCE_DIR}" PARENT_SCOPE)
|
||||
|
@ -314,35 +322,38 @@ set(VulkanUtilityLibraries_ADDED "${VulkanUtilityLibraries_ADDED}" PARENT_SCOPE)
|
|||
|
||||
# SPIRV-Tools
|
||||
if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME SPIRV-Tools
|
||||
REPO "KhronosGroup/SPIRV-Tools"
|
||||
SHA 40eb301f32
|
||||
HASH 58d0fb1047d69373cf24c73e6f78c73a72a6cca3b4df1d9f083b9dcc0962745ef154abf3dbe9b3623b835be20c6ec769431cf11733349f45e7568b3525f707aa
|
||||
URL "https://github.com/KhronosGroup/SPIRV-Tools/archive/40eb301f32.zip"
|
||||
URL_HASH SHA512=58d0fb1047d69373cf24c73e6f78c73a72a6cca3b4df1d9f083b9dcc0962745ef154abf3dbe9b3623b835be20c6ec769431cf11733349f45e7568b3525f707aa
|
||||
OPTIONS
|
||||
"SPIRV_SKIP_EXECUTABLES ON"
|
||||
CUSTOM_CACHE_KEY "40eb"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Boost headers
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME boost_headers
|
||||
REPO "boostorg/headers"
|
||||
SHA 0456900fad
|
||||
HASH 50cd75dcdfc5f082225cdace058f47b4fb114a47585f7aee1d22236a910a80b667186254c214fa2fcebac67ae6d37ba4b6e695e1faea8affd6fd42a03cf996e3
|
||||
URL "https://github.com/boostorg/headers/archive/0456900fad.zip"
|
||||
URL_HASH SHA512=50cd75dcdfc5f082225cdace058f47b4fb114a47585f7aee1d22236a910a80b667186254c214fa2fcebac67ae6d37ba4b6e695e1faea8affd6fd42a03cf996e3
|
||||
CUSTOM_CACHE_KEY "0456"
|
||||
)
|
||||
|
||||
# TZDB (Time Zone Database)
|
||||
add_subdirectory(nx_tzdb)
|
||||
|
||||
# VMA
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME VulkanMemoryAllocator
|
||||
REPO "GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator"
|
||||
SHA 1076b348ab
|
||||
HASH a46b44e4286d08cffda058e856c47f44c7fed3da55fe9555976eb3907fdcc20ead0b1860b0c38319cda01dbf9b1aa5d4b4038c7f1f8fbd97283d837fa9af9772
|
||||
URL "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/archive/1076b348ab.zip"
|
||||
URL_HASH SHA512=a46b44e4286d08cffda058e856c47f44c7fed3da55fe9555976eb3907fdcc20ead0b1860b0c38319cda01dbf9b1aa5d4b4038c7f1f8fbd97283d837fa9af9772
|
||||
FIND_PACKAGE_ARGUMENTS "CONFIG"
|
||||
# SYSTEM_PACKAGE ON
|
||||
CUSTOM_CACHE_KEY "1076"
|
||||
)
|
||||
|
||||
set(VulkanMemoryAllocator_SOURCE_DIR "${VulkanMemoryAllocator_SOURCE_DIR}" PARENT_SCOPE)
|
||||
|
@ -378,13 +389,15 @@ endif()
|
|||
|
||||
if (ANDROID)
|
||||
if (ARCHITECTURE_arm64)
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME libadrenotools
|
||||
REPO "bylaws/libadrenotools"
|
||||
SHA 8fae8ce254
|
||||
HASH c74fa855f0edebbf25c9bce40b00966daa2447bfc5e15f0cf1a95f86cbf70fc6b02590707edbde16328a0a2a4fb9a1fc419d2dfc22a4a4150971be91892d4edb
|
||||
URL "https://github.com/bylaws/libadrenotools/archive/8fae8ce254.zip"
|
||||
URL_HASH SHA512=c74fa855f0edebbf25c9bce40b00966daa2447bfc5e15f0cf1a95f86cbf70fc6b02590707edbde16328a0a2a4fb9a1fc419d2dfc22a4a4150971be91892d4edb
|
||||
PATCHES
|
||||
${CMAKE_SOURCE_DIR}/.patch/libadrenotools/0001-linkerns-cpm.patch
|
||||
CUSTOM_CACHE_KEY "8fae"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -409,12 +422,13 @@ if (YUZU_CRASH_DUMPS AND NOT TARGET libbreakpad_client)
|
|||
_CRT_NONSTDC_NO_DEPRECATE
|
||||
)
|
||||
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
CPMAddPackage(
|
||||
NAME breakpad
|
||||
URL "google/breakpad"
|
||||
SHA f80f288803
|
||||
HASH 4a87ee88cea99bd633d52a5b00135a649f1475e3b65db325a6df9c804ab82b054ad7e62419b35f6e22cc5dfbbb569214041d7ad5d10fab10106e700bb5050e1d
|
||||
URL "https://github.com/google/breakpad/archive/f80f288803.zip"
|
||||
URL_HASH SHA512=4a87ee88cea99bd633d52a5b00135a649f1475e3b65db325a6df9c804ab82b054ad7e62419b35f6e22cc5dfbbb569214041d7ad5d10fab10106e700bb5050e1d
|
||||
DOWNLOAD_ONLY YES
|
||||
CUSTOM_CACHE_KEY "f80f"
|
||||
)
|
||||
|
||||
# libbreakpad
|
||||
|
@ -514,11 +528,14 @@ endif()
|
|||
|
||||
# oboe
|
||||
if (ANDROID)
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
CPMAddPackage(
|
||||
NAME oboe
|
||||
REPO "google/oboe"
|
||||
SHA 2bc873e53c
|
||||
HASH 02329058a7f9cf7d5039afaae5ab170d9f42f60f4c01e21eaf4f46073886922b057a9ae30eeac040b3ac182f51b9c1bfe9fe1050a2c9f6ce567a1a9a0ec2c768
|
||||
URL "https://github.com/google/oboe/archive/2bc873e53c.zip"
|
||||
URL_HASH SHA512=02329058a7f9cf7d5039afaae5ab170d9f42f60f4c01e21eaf4f46073886922b057a9ae30eeac040b3ac182f51b9c1bfe9fe1050a2c9f6ce567a1a9a0ec2c768
|
||||
OPTIONS
|
||||
"SPIRV_SKIP_EXECUTABLES ON"
|
||||
CUSTOM_CACHE_KEY "2bc8"
|
||||
)
|
||||
|
||||
add_library(oboe::oboe ALIAS oboe)
|
||||
|
|
15
externals/ffmpeg/CMakeLists.txt
vendored
15
externals/ffmpeg/CMakeLists.txt
vendored
|
@ -19,11 +19,14 @@ if (NOT WIN32 AND NOT ANDROID)
|
|||
message(FATAL_ERROR "Required program `autoconf` not found.")
|
||||
endif()
|
||||
|
||||
AddPackage(
|
||||
include(CPM)
|
||||
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME ffmpeg
|
||||
REPO "FFmpeg/FFmpeg"
|
||||
SHA c2184b65d2
|
||||
HASH 2a89d664119debbb3c006ab1c48d5d7f26e889f4a65ad2e25c8b0503308295123d5a9c5c78bf683aef5ff09acef8c3fc2837f22d3e8c611528b933bf03bcdd97
|
||||
URL "https://github.com/FFmpeg/FFmpeg/archive/c2184b65d2.zip"
|
||||
URL_HASH SHA512=2a89d664119debbb3c006ab1c48d5d7f26e889f4a65ad2e25c8b0503308295123d5a9c5c78bf683aef5ff09acef8c3fc2837f22d3e8c611528b933bf03bcdd97
|
||||
CUSTOM_CACHE_KEY "c218"
|
||||
)
|
||||
|
||||
set(FFmpeg_PREFIX ${ffmpeg_SOURCE_DIR})
|
||||
|
@ -240,7 +243,7 @@ elseif(ANDROID)
|
|||
message(FATAL_ERROR "Unsupported architecture for Android FFmpeg")
|
||||
endif()
|
||||
|
||||
download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "ffmpeg-bundled" FFmpeg_PATH 7.1.1)
|
||||
download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "ffmpeg-bundled" FFmpeg_PATH)
|
||||
set(FFmpeg_FOUND YES)
|
||||
set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE)
|
||||
set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/lib" CACHE PATH "Path to FFmpeg library directory" FORCE)
|
||||
|
@ -265,7 +268,7 @@ elseif(WIN32)
|
|||
# Use yuzu FFmpeg binaries
|
||||
set(FFmpeg_EXT_NAME "ffmpeg-7.1.1")
|
||||
|
||||
download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "ffmpeg-bundled" FFmpeg_PATH 7.1.1)
|
||||
download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "ffmpeg-bundled" FFmpeg_PATH)
|
||||
set(FFmpeg_FOUND YES)
|
||||
set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE)
|
||||
set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg library directory" FORCE)
|
||||
|
|
|
@ -232,5 +232,3 @@ if (ANDROID)
|
|||
add_subdirectory(android/app/src/main/jni)
|
||||
target_include_directories(yuzu-android PRIVATE android/app/src/main)
|
||||
endif()
|
||||
|
||||
include(GenerateDepHashes)
|
||||
|
|
|
@ -169,7 +169,7 @@ android {
|
|||
arguments(
|
||||
"-DENABLE_QT=0", // Don't use QT
|
||||
"-DENABLE_SDL2=0", // Don't use SDL
|
||||
"-DENABLE_WEB_SERVICE=1", // Enable web service
|
||||
"-DENABLE_WEB_SERVICE=ON", // Enable web service
|
||||
"-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work
|
||||
"-DYUZU_USE_BUNDLED_VCPKG=ON",
|
||||
"-DYUZU_USE_BUNDLED_FFMPEG=ON",
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
@ -94,8 +91,7 @@ class AboutFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
binding.buttonDiscord.setOnClickListener { openLink(getString(R.string.discord_link)) }
|
||||
binding.buttonRevolt.setOnClickListener { openLink(getString(R.string.revolt_link)) }
|
||||
binding.buttonDiscord.setOnClickListener { openLink(getString(R.string.support_link)) }
|
||||
binding.buttonWebsite.setOnClickListener { openLink(getString(R.string.website_link)) }
|
||||
binding.buttonGithub.setOnClickListener { openLink(getString(R.string.github_link)) }
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
package org.yuzu.yuzu_emu.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
|
@ -95,7 +94,6 @@ class GamesFragment : Fragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
homeViewModel.setStatusBarShadeVisibility(true)
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<!-- Scaling isn't perfect but I spent like 10 minutes trying to calculate this and I'm tired -->
|
||||
<group
|
||||
android:scaleX="2.987"
|
||||
android:scaleY="2.987"
|
||||
android:translateX="-107.15"
|
||||
android:translateY="-109.35">
|
||||
<path
|
||||
android:pathData="M42.7,71.38C42.7,60.74 42.7,53.76 42.7,44.7L35.91,36.62H57.87C60.48,36.62 62.77,37.09 64.72,38.03C66.68,38.97 68.2,40.32 69.29,42.08C70.37,43.85 70.92,45.97 70.92,48.43C70.92,50.92 70.36,53.02 69.24,54.73C68.13,56.44 66.56,57.73 64.55,58.6C62.55,59.47 60.21,59.91 57.53,59.91H48.47V52.57H55.61C56.73,52.57 57.69,52.44 58.47,52.17C59.28,51.88 59.89,51.44 60.31,50.83C60.75,50.21 60.96,49.42 60.96,48.43C60.96,47.44 60.75,46.63 60.31,46C59.89,45.37 59.28,44.91 58.47,44.61C57.69,44.31 56.73,44.15 55.61,44.15H52.24V71.38H42.7ZM63.3,55.43L72.09,71.38H61.72L53.14,55.43H63.3Z"
|
||||
android:fillColor="#FF005C"/>
|
||||
</group></vector>
|
|
@ -219,17 +219,6 @@
|
|||
app:iconSize="24dp"
|
||||
app:iconPadding="0dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/button_revolt"
|
||||
style="@style/EdenButton.Secondary"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_marginEnd="12dp"
|
||||
app:icon="@drawable/ic_revolt"
|
||||
app:iconGravity="textStart"
|
||||
app:iconSize="24dp"
|
||||
app:iconPadding="0dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/button_website"
|
||||
style="@style/EdenButton.Secondary"
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
style="@style/TextAppearance.Material3.TitleMedium"
|
||||
style="@style/SynthwaveText.Header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
|
@ -101,7 +101,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
style="@style/TextAppearance.Material3.TitleMedium"
|
||||
style="@style/SynthwaveText.Header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
|
@ -213,18 +213,6 @@
|
|||
app:iconGravity="textStart"
|
||||
app:iconPadding="0dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="@style/EdenButton.Secondary"
|
||||
android:id="@+id/button_revolt"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginEnd="8dp"
|
||||
app:icon="@drawable/ic_revolt"
|
||||
app:iconSize="24dp"
|
||||
app:iconGravity="textStart"
|
||||
app:iconPadding="0dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="@style/EdenButton.Secondary"
|
||||
android:id="@+id/button_website"
|
||||
|
|
|
@ -226,64 +226,6 @@
|
|||
<color name="yuzu_inversePrimary_gray">#B7B7B7</color>
|
||||
<color name="yuzu_surfaceTint_gray">#B7B7B7</color>
|
||||
|
||||
<!-- Eden Theme Colors -->
|
||||
|
||||
<!-- Synthwave/Vaporwave Primary Colors -->
|
||||
<color name="eden_primary">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_primary_variant">#E6006B</color> <!-- Darker magenta -->
|
||||
<color name="eden_secondary">#00FFFF</color> <!-- Electric cyan -->
|
||||
<color name="eden_secondary_variant">#00E6E6</color> <!-- Darker cyan -->
|
||||
|
||||
<!-- Background Colors - Deep space black -->
|
||||
<color name="eden_background">#000000</color> <!-- Pure black background -->
|
||||
<color name="eden_surface">#0D0D0D</color> <!-- Card surface -->
|
||||
<color name="eden_surface_variant">#1A1A1A</color> <!-- Elevated surface -->
|
||||
|
||||
<!-- Text Colors - High contrast for readability -->
|
||||
<color name="eden_on_background">#FFFFFF</color> <!-- Pure white text -->
|
||||
<color name="eden_on_surface">#FFFFFF</color> <!-- Pure white text -->
|
||||
<color name="eden_on_primary">#FFFFFF</color> <!-- White on neon -->
|
||||
<color name="eden_on_secondary">#000000</color> <!-- Black on cyan -->
|
||||
|
||||
<!-- Synthwave Status Colors -->
|
||||
<color name="eden_error">#FF0040</color> <!-- Neon red -->
|
||||
<color name="eden_success">#00FF80</color> <!-- Neon green -->
|
||||
<color name="eden_warning">#FFFF00</color> <!-- Neon yellow -->
|
||||
<color name="eden_info">#0080FF</color> <!-- Electric blue -->
|
||||
|
||||
<!-- Synthwave Accent Colors -->
|
||||
<color name="eden_accent_purple">#9D00FF</color> <!-- Electric purple -->
|
||||
<color name="eden_accent_blue">#0080FF</color> <!-- Electric blue -->
|
||||
<color name="eden_accent_orange">#FF8000</color> <!-- Neon orange -->
|
||||
|
||||
<!-- Neon Glow Effects -->
|
||||
<color name="eden_glow_pink">#80FF0080</color> <!-- Magenta glow -->
|
||||
<color name="eden_glow_cyan">#8060D1F6</color> <!-- Cyan glow -->
|
||||
<color name="eden_glow_orange">#80FF8000</color> <!-- Orange glow -->
|
||||
|
||||
<!-- Neon Border Colors -->
|
||||
<color name="eden_border">#7c757f</color> <!-- Subtle border -->
|
||||
<color name="eden_border_light">#948b98</color> <!-- Lighter border -->
|
||||
<color name="eden_border_gradient_start">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_border_gradient_end">#60D1F6</color> <!-- Electric cyan -->
|
||||
|
||||
<!-- Overlay Colors -->
|
||||
<color name="eden_overlay">#CC000000</color>
|
||||
|
||||
<!-- Neon Button Colors -->
|
||||
<color name="eden_button_primary_bg">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_button_secondary_bg">#00000000</color> <!-- Transparent -->
|
||||
<color name="eden_button_secondary_border">#00FFFF</color> <!-- Electric cyan -->
|
||||
|
||||
<!-- Synthwave Card Colors -->
|
||||
<color name="eden_card_background">#0D0D0D</color> <!-- Almost black -->
|
||||
<color name="eden_card_background_elevated">#1A1A1A</color> <!-- Elevated black -->
|
||||
|
||||
<!-- Transparent versions for gradients -->
|
||||
<color name="eden_transparent">#00000000</color>
|
||||
<color name="eden_primary_transparent">#05FF0080</color>
|
||||
<color name="eden_secondary_transparent">#0500FFFF</color>
|
||||
|
||||
<!-- Common Colors Across All Themes -->
|
||||
<color name="yuzu_transparent_black">#80000000</color>
|
||||
<color name="yuzu_outlineVariant">#C6C5D0</color>
|
||||
|
|
84
src/android/app/src/main/res/values/eden_colors.xml
Normal file
84
src/android/app/src/main/res/values/eden_colors.xml
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- Synthwave/Vaporwave Primary Colors -->
|
||||
<color name="eden_primary">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_primary_variant">#E6006B</color> <!-- Darker magenta -->
|
||||
<color name="eden_secondary">#00FFFF</color> <!-- Electric cyan -->
|
||||
<color name="eden_secondary_variant">#00E6E6</color> <!-- Darker cyan -->
|
||||
|
||||
<!-- Background Colors - Deep space black -->
|
||||
<color name="eden_background">#000000</color> <!-- Pure black background -->
|
||||
<color name="eden_surface">#0D0D0D</color> <!-- Card surface -->
|
||||
<color name="eden_surface_variant">#1A1A1A</color> <!-- Elevated surface -->
|
||||
|
||||
<!-- Text Colors - High contrast for readability -->
|
||||
<color name="eden_on_background">#FFFFFF</color> <!-- Pure white text -->
|
||||
<color name="eden_on_surface">#FFFFFF</color> <!-- Pure white text -->
|
||||
<color name="eden_on_primary">#FFFFFF</color> <!-- White on neon -->
|
||||
<color name="eden_on_secondary">#000000</color> <!-- Black on cyan -->
|
||||
|
||||
<!-- Synthwave Accent Colors -->
|
||||
<color name="eden_accent_pink">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_accent_purple">#9D00FF</color> <!-- Electric purple -->
|
||||
<color name="eden_accent_blue">#0080FF</color> <!-- Electric blue -->
|
||||
<color name="eden_accent_orange">#FF8000</color> <!-- Neon orange -->
|
||||
|
||||
<!-- Synthwave Gradient Colors -->
|
||||
<color name="eden_gradient_start">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_gradient_middle">#9D00FF</color> <!-- Electric purple -->
|
||||
<color name="eden_gradient_end">#00FFFF</color> <!-- Electric cyan -->
|
||||
|
||||
<!-- Neon Glow Effects -->
|
||||
<color name="eden_glow_pink">#80FF0080</color> <!-- Magenta glow -->
|
||||
<color name="eden_glow_cyan">#8000FFFF</color> <!-- Cyan glow -->
|
||||
<color name="eden_glow_purple">#809D00FF</color> <!-- Purple glow -->
|
||||
<color name="eden_glow_orange">#80FF8000</color> <!-- Orange glow -->
|
||||
|
||||
<!-- Neon Border Colors -->
|
||||
<color name="eden_border">#7c757f</color> <!-- Subtle border -->
|
||||
<color name="eden_border_light">#948b98</color> <!-- Lighter border -->
|
||||
<color name="eden_border_gradient_start">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_border_gradient_end">#00FFFF</color> <!-- Electric cyan -->
|
||||
|
||||
<!-- Retro Grid Pattern -->
|
||||
<color name="eden_grid_line">#1A1A1A</color> <!-- Grid lines -->
|
||||
<color name="eden_grid_line_accent">#FF0080</color> <!-- Neon grid lines -->
|
||||
<color name="eden_grid_line_cyan">#00FFFF</color> <!-- Cyan grid lines -->
|
||||
|
||||
<!-- Synthwave Status Colors -->
|
||||
<color name="eden_error">#FF0040</color> <!-- Neon red -->
|
||||
<color name="eden_success">#00FF80</color> <!-- Neon green -->
|
||||
<color name="eden_warning">#FFFF00</color> <!-- Neon yellow -->
|
||||
<color name="eden_info">#0080FF</color> <!-- Electric blue -->
|
||||
|
||||
<!-- Overlay Colors -->
|
||||
<color name="eden_overlay_dark">#CC000000</color>
|
||||
<color name="eden_overlay_medium">#80000000</color>
|
||||
<color name="eden_overlay_light">#33000000</color>
|
||||
|
||||
<!-- Neon Button Colors -->
|
||||
<color name="eden_button_primary_bg">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_button_secondary_bg">#00000000</color> <!-- Transparent -->
|
||||
<color name="eden_button_secondary_border">#00FFFF</color> <!-- Electric cyan -->
|
||||
|
||||
<!-- Synthwave Card Colors -->
|
||||
<color name="eden_card_background">#0D0D0D</color> <!-- Almost black -->
|
||||
<color name="eden_card_background_elevated">#1A1A1A</color> <!-- Elevated black -->
|
||||
|
||||
<!-- Retro Navigation Colors -->
|
||||
<color name="eden_nav_background">#000000</color> <!-- Pure black -->
|
||||
<color name="eden_nav_selected">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_nav_unselected">#666666</color> <!-- Gray -->
|
||||
|
||||
<!-- Transparent versions for gradients -->
|
||||
<color name="eden_transparent">#00000000</color>
|
||||
<color name="eden_primary_transparent">#05FF0080</color>
|
||||
<color name="eden_secondary_transparent">#0500FFFF</color>
|
||||
|
||||
<!-- Additional Synthwave Colors -->
|
||||
<color name="eden_scan_line">#33FF0080</color> <!-- Scan line effect -->
|
||||
<color name="eden_hologram">#1A00FFFF</color> <!-- Holographic effect -->
|
||||
<color name="eden_neon_outline">#FFFF0080</color> <!-- Neon outline -->
|
||||
|
||||
</resources>
|
|
@ -440,10 +440,9 @@
|
|||
<string name="user_data_import_success">User data imported successfully</string>
|
||||
<string name="user_data_export_cancelled">Export cancelled</string>
|
||||
<string name="user_data_import_failed_description">Make sure the user data folders are at the root of the zip folder and contain a config file at config/config.ini and try again.</string>
|
||||
<string name="discord_link" translatable="false">https://discord.gg/kXAmGCXBGD</string>
|
||||
<string name="revolt_link" translatable="false">https://rvlt.gg/qKgFEAbH</string>
|
||||
<string name="website_link" translatable="false">https://eden-emu.dev</string>
|
||||
<string name="github_link" translatable="false">https://git.eden-emu.dev/eden-emu</string>
|
||||
<string name="support_link">https://discord.gg/edenemu</string>
|
||||
<string name="website_link">https://eden-emulator.github.io</string>
|
||||
<string name="github_link">https://git.eden-emu.dev/eden-emu</string>
|
||||
|
||||
<!-- General settings strings -->
|
||||
<string name="frame_limit_enable">Limit speed</string>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<item name="android:windowLightStatusBar">false</item>
|
||||
<item name="android:windowLightNavigationBar">false</item>
|
||||
<!-- Other theme attributes -->
|
||||
<item name="android:shadowColor">@color/eden_overlay</item>
|
||||
<item name="android:shadowColor">@color/eden_overlay_dark</item>
|
||||
<item name="sliderStyle">@style/EdenSlider</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
<item name="android:enforceStatusBarContrast">false</item>
|
||||
|
|
|
@ -221,64 +221,6 @@
|
|||
<color name="yuzu_inversePrimary_gray">#BDBDBD</color>
|
||||
<color name="yuzu_surfaceTint_gray">#9E9E9E</color>
|
||||
|
||||
<!-- Eden Theme Colors -->
|
||||
|
||||
<!-- Synthwave/Vaporwave Primary Colors -->
|
||||
<color name="eden_primary">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_primary_variant">#E6006B</color> <!-- Darker magenta -->
|
||||
<color name="eden_secondary">#60D1F6</color> <!-- Electric cyan -->
|
||||
<color name="eden_secondary_variant">#00E6E6</color> <!-- Darker cyan -->
|
||||
|
||||
<!-- Background Colors - White -->
|
||||
<color name="eden_background">#FFFFFF</color> <!-- Pure black background -->
|
||||
<color name="eden_surface">#FFFFFF</color> <!-- Card surface -->
|
||||
<color name="eden_surface_variant">#D3D3D3</color> <!-- Elevated surface -->
|
||||
|
||||
<!-- Text Colors - High contrast for readability -->
|
||||
<color name="eden_on_background">#000000</color> <!-- Pure black text -->
|
||||
<color name="eden_on_surface">#000000</color> <!-- Pure black text -->
|
||||
<color name="eden_on_primary">#FFFFFF</color> <!-- White on neon -->
|
||||
<color name="eden_on_secondary">#C0C0C0</color> <!-- Milky White on cyan -->
|
||||
|
||||
<!-- Synthwave Accent Colors -->
|
||||
<color name="eden_accent_purple">#9D00FF</color> <!-- Electric purple -->
|
||||
<color name="eden_accent_blue">#0080FF</color> <!-- Electric blue -->
|
||||
<color name="eden_accent_orange">#FF8000</color> <!-- Neon orange -->
|
||||
|
||||
<!-- Neon Glow Effects -->
|
||||
<color name="eden_glow_pink">#80FF0080</color> <!-- Magenta glow -->
|
||||
<color name="eden_glow_cyan">#8060D1F6</color> <!-- Cyan glow -->
|
||||
<color name="eden_glow_orange">#80FF8000</color> <!-- Orange glow -->
|
||||
|
||||
<!-- Neon Border Colors -->
|
||||
<color name="eden_border">#7c757f</color> <!-- Subtle border -->
|
||||
<color name="eden_border_light">#948b98</color> <!-- Lighter border -->
|
||||
<color name="eden_border_gradient_start">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_border_gradient_end">#60D1F6</color> <!-- Electric cyan -->
|
||||
|
||||
<!-- Synthwave Status Colors -->
|
||||
<color name="eden_error">#FF0040</color> <!-- Neon red -->
|
||||
<color name="eden_success">#00FF80</color> <!-- Neon green -->
|
||||
<color name="eden_warning">#FFFF00</color> <!-- Neon yellow -->
|
||||
<color name="eden_info">#0080FF</color> <!-- Electric blue -->
|
||||
|
||||
<!-- Overlay Colors -->
|
||||
<color name="eden_overlay">#CCFFFFFF</color>
|
||||
|
||||
<!-- Neon Button Colors -->
|
||||
<color name="eden_button_primary_bg">#FF0080</color> <!-- Neon magenta -->
|
||||
<color name="eden_button_secondary_bg">#00000000</color> <!-- Transparent -->
|
||||
<color name="eden_button_secondary_border">#60D1F6</color> <!-- Electric cyan -->
|
||||
|
||||
<!-- Synthwave Card Colors -->
|
||||
<color name="eden_card_background">#F0F0F0</color> <!-- Almost white -->
|
||||
<color name="eden_card_background_elevated">#D8D8D8</color> <!-- Elevated white -->
|
||||
|
||||
<!-- Transparent versions for gradients -->
|
||||
<color name="eden_transparent">#00000000</color>
|
||||
<color name="eden_primary_transparent">#05FF0080</color>
|
||||
<color name="eden_secondary_transparent">#0500FFFF</color>
|
||||
|
||||
<!-- Common Colors Across All Themes -->
|
||||
<color name="yuzu_outlineVariant">#C6C5D0</color>
|
||||
<color name="yuzu_error">#BA1A1A</color>
|
||||
|
@ -288,8 +230,7 @@
|
|||
<color name="yuzu_shadow">#000000</color>
|
||||
<color name="yuzu_scrim">#000000</color>
|
||||
<color name="yuzu_transparent_black">#80000000</color>
|
||||
|
||||
<!-- Values used in dark mode but here are just white / black values-->
|
||||
<!-- Values used in dark mode but here are jsut white / black values-->
|
||||
<color name="yuzu_onPrimary_blue">#FFFFFF</color>
|
||||
<color name="yuzu_onSecondary_blue">#FFFFFF</color>
|
||||
<color name="yuzu_onTertiary_blue">#FFFFFF</color>
|
||||
|
|
|
@ -159,8 +159,7 @@ add_library(
|
|||
wall_clock.cpp
|
||||
wall_clock.h
|
||||
zstd_compression.cpp
|
||||
zstd_compression.h
|
||||
)
|
||||
zstd_compression.h)
|
||||
|
||||
if(YUZU_ENABLE_PORTABLE)
|
||||
add_compile_definitions(YUZU_ENABLE_PORTABLE)
|
||||
|
|
|
@ -205,8 +205,8 @@ NetPlayStatus AndroidMultiplayer::NetPlayCreateRoom(const std::string &ipaddress
|
|||
|
||||
std::string token;
|
||||
// TODO(alekpop): properly handle the compile definition, it's not working right
|
||||
//#ifdef ENABLE_WEB_SERVICE
|
||||
// LOG_INFO(WebService, "Web Service enabled");
|
||||
#ifdef ENABLE_WEB_SERVICE
|
||||
LOG_INFO(WebService, "Web Service enabled");
|
||||
if (isPublic) {
|
||||
WebService::Client client(Settings::values.web_api_url.GetValue(),
|
||||
Settings::values.eden_username.GetValue(),
|
||||
|
@ -220,9 +220,9 @@ NetPlayStatus AndroidMultiplayer::NetPlayCreateRoom(const std::string &ipaddress
|
|||
LOG_INFO(WebService, "Successfully requested external JWT: size={}", token.size());
|
||||
}
|
||||
}
|
||||
//#else
|
||||
// LOG_INFO(WebService, "Web Service disabled");
|
||||
//#endif
|
||||
#else
|
||||
LOG_ERROR(WebService, "Web Service disabled");
|
||||
#endif
|
||||
|
||||
member->Join(username, ipaddress.c_str(), static_cast<u16>(port), 0, Network::NoPreferredIP,
|
||||
password, token);
|
||||
|
@ -432,12 +432,12 @@ std::vector<std::string> AndroidMultiplayer::NetPlayGetBanList() {
|
|||
std::unique_ptr<Network::VerifyUser::Backend> AndroidMultiplayer::CreateVerifyBackend(bool use_validation) {
|
||||
std::unique_ptr<Network::VerifyUser::Backend> verify_backend;
|
||||
if (use_validation) {
|
||||
//#ifdef ENABLE_WEB_SERVICE
|
||||
#ifdef ENABLE_WEB_SERVICE
|
||||
verify_backend =
|
||||
std::make_unique<WebService::VerifyUserJWT>(Settings::values.web_api_url.GetValue());
|
||||
//#else
|
||||
// verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
|
||||
//#endif
|
||||
#else
|
||||
verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
|
||||
#endif
|
||||
} else {
|
||||
verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
|
||||
}
|
||||
|
|
|
@ -442,16 +442,15 @@ static int shm_open_anon(int flags, mode_t mode) {
|
|||
for (char *fill = start; fill < limit; r /= 8)
|
||||
*fill++ = '0' + (r % 8);
|
||||
int fd = shm_open(name, flags, mode);
|
||||
if (fd != -1)
|
||||
return ([](const char *name, int fd) {
|
||||
if (shm_unlink(name) == -1) {
|
||||
int tmp = errno;
|
||||
close(fd);
|
||||
errno = tmp;
|
||||
return -1;
|
||||
}
|
||||
return fd;
|
||||
})(name, fd);
|
||||
if (fd != -1) {
|
||||
if (shm_unlink(name) == -1) {
|
||||
int tmp = errno;
|
||||
close(fd);
|
||||
errno = tmp;
|
||||
return -1;
|
||||
}
|
||||
return fd;
|
||||
}
|
||||
if (errno != EEXIST)
|
||||
break;
|
||||
}
|
||||
|
@ -464,15 +463,13 @@ static int shm_open_anon(int flags, mode_t mode) {
|
|||
int fd;
|
||||
if ((fd = shm_mkstemp(name)) == -1)
|
||||
return -1;
|
||||
return ([](const char *name, int fd) {
|
||||
if (shm_unlink(name) == -1) {
|
||||
int tmp = errno;
|
||||
close(fd);
|
||||
errno = tmp;
|
||||
return -1;
|
||||
}
|
||||
return fd;
|
||||
})(name, fd);
|
||||
if (shm_unlink(name) == -1) {
|
||||
int tmp = errno;
|
||||
close(fd);
|
||||
errno = tmp;
|
||||
return -1;
|
||||
}
|
||||
return fd;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1192,8 +1192,8 @@ if (MINGW)
|
|||
endif()
|
||||
|
||||
if (ENABLE_WEB_SERVICE)
|
||||
target_compile_definitions(core PRIVATE -DENABLE_WEB_SERVICE)
|
||||
target_link_libraries(core PRIVATE web_service)
|
||||
target_compile_definitions(core PUBLIC -DENABLE_WEB_SERVICE)
|
||||
target_link_libraries(core PUBLIC web_service)
|
||||
endif()
|
||||
|
||||
if (HAS_NCE)
|
||||
|
|
|
@ -391,14 +391,14 @@ void ProfileManager::ParseUserSaveFile() {
|
|||
|
||||
if (!save.IsOpen()) {
|
||||
LOG_WARNING(Service_ACC, "Failed to load profile data from save data... Generating new "
|
||||
"user 'eden' with random UUID.");
|
||||
"user 'yuzu' with random UUID.");
|
||||
return;
|
||||
}
|
||||
|
||||
ProfileDataRaw data;
|
||||
if (!save.ReadObject(data)) {
|
||||
LOG_WARNING(Service_ACC, "profiles.dat is smaller than expected... Generating new user "
|
||||
"'eden' with random UUID.");
|
||||
"'yuzu' with random UUID.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#elif YUZU_UNIX
|
||||
#elif defined(__unix__)
|
||||
#include <arpa/inet.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -77,7 +77,7 @@ SOCKET GetInterruptSocket() {
|
|||
sockaddr TranslateFromSockAddrIn(SockAddrIn input) {
|
||||
sockaddr_in result;
|
||||
|
||||
#if YUZU_UNIX
|
||||
#ifdef __unix__
|
||||
result.sin_len = sizeof(result);
|
||||
#endif
|
||||
|
||||
|
@ -162,7 +162,7 @@ Errno TranslateNativeError(int e, CallType call_type = CallType::Other) {
|
|||
}
|
||||
}
|
||||
|
||||
#elif YUZU_UNIX // ^ _WIN32 v YUZU_UNIX
|
||||
#elif defined(__unix__) // ^ _WIN32 v __unix__
|
||||
|
||||
using SOCKET = int;
|
||||
using WSAPOLLFD = pollfd;
|
||||
|
@ -835,7 +835,7 @@ std::pair<s32, Errno> Socket::Send(std::span<const u8> message, int flags) {
|
|||
ASSERT(flags == 0);
|
||||
|
||||
int native_flags = 0;
|
||||
#if YUZU_UNIX
|
||||
#ifdef __unix__
|
||||
native_flags |= MSG_NOSIGNAL; // do not send us SIGPIPE
|
||||
#endif
|
||||
const auto result = send(fd, reinterpret_cast<const char*>(message.data()),
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
#elif YUZU_UNIX
|
||||
#else
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
|
@ -104,7 +104,7 @@ constexpr IPv4Address TranslateIPv4(in_addr addr) {
|
|||
auto& bytes = addr.S_un.S_un_b;
|
||||
return IPv4Address{bytes.s_b1, bytes.s_b2, bytes.s_b3, bytes.s_b4};
|
||||
}
|
||||
#elif YUZU_UNIX
|
||||
#elif defined(__unix__)
|
||||
constexpr IPv4Address TranslateIPv4(in_addr addr) {
|
||||
const u32 bytes = addr.s_addr;
|
||||
return IPv4Address{static_cast<u8>(bytes), static_cast<u8>(bytes >> 8),
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include "core/internal_network/socket_proxy.h"
|
||||
#include "network/network.h"
|
||||
|
||||
#if YUZU_UNIX
|
||||
#ifdef __unix__
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,7 +9,11 @@
|
|||
#include <utility>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#elif !YUZU_UNIX
|
||||
// windows
|
||||
#elif defined(__unix__)
|
||||
// unix
|
||||
#else
|
||||
// haiku
|
||||
#error "Platform not implemented"
|
||||
#endif
|
||||
|
||||
|
@ -24,7 +28,7 @@ struct ProxyPacket;
|
|||
|
||||
class SocketBase {
|
||||
public:
|
||||
#ifdef YUZU_UNIX
|
||||
#ifdef __unix__
|
||||
using SOCKET = int;
|
||||
static constexpr SOCKET INVALID_SOCKET = -1;
|
||||
static constexpr SOCKET SOCKET_ERROR = -1;
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace Common {
|
||||
|
||||
static const constexpr std::array<const char *, @DEPS_LENGTH@> dep_names = {
|
||||
@DEP_NAMES@
|
||||
};
|
||||
|
||||
static const constexpr std::array<const char *, @DEPS_LENGTH@> dep_hashes = {
|
||||
@DEP_SHAS@
|
||||
};
|
||||
|
||||
static const constexpr std::array<const char *, @DEPS_LENGTH@> dep_urls = {
|
||||
@DEP_URLS@
|
||||
};
|
||||
|
||||
} // namespace Common
|
42
src/dynarmic/externals/CMakeLists.txt
vendored
42
src/dynarmic/externals/CMakeLists.txt
vendored
|
@ -1,4 +1,4 @@
|
|||
include(CPMUtil)
|
||||
include(CPM)
|
||||
|
||||
# Always build externals as static libraries, even when dynarmic is built as shared
|
||||
if (BUILD_SHARED_LIBS)
|
||||
|
@ -22,12 +22,12 @@ set(BUILD_TESTING OFF)
|
|||
if ("riscv" IN_LIST ARCHITECTURE)
|
||||
add_subdirectory(biscuit)
|
||||
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME biscuit
|
||||
VERSION 0.9.1
|
||||
REPO "lioncash/biscuit"
|
||||
SHA 76b0be8dae
|
||||
HASH 47d55ed02d032d6cf3dc107c6c0a9aea686d5f25aefb81d1af91db027b6815bd5add1755505e19d76625feeb17aa2db6cd1668fe0dad2e6a411519bde6ca4489
|
||||
URL "https://github.com/lioncash/biscuit/archive/76b0be8dae.zip"
|
||||
URL_HASH SHA512=47d55ed02d032d6cf3dc107c6c0a9aea686d5f25aefb81d1af91db027b6815bd5add1755505e19d76625feeb17aa2db6cd1668fe0dad2e6a411519bde6ca4489
|
||||
CUSTOM_CACHE_KEY "76b0"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@ -49,14 +49,14 @@ if (NOT TARGET fmt::fmt)
|
|||
endif()
|
||||
|
||||
# mcl
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME mcl
|
||||
VERSION 0.1.12
|
||||
REPO "azahar-emu/mcl"
|
||||
SHA 7b08d83418
|
||||
HASH f943bac39c1879986decad7a442ff4288eaeca4a2907684c7914e115a55ecc43c2782ded85c0835763fe04e40d5c82220ce864423e489e648e408a84f54dc4f3
|
||||
URL "https://github.com/azahar-emu/mcl/archive/7b08d83418.zip"
|
||||
URL_HASH SHA512=f943bac39c1879986decad7a442ff4288eaeca4a2907684c7914e115a55ecc43c2782ded85c0835763fe04e40d5c82220ce864423e489e648e408a84f54dc4f3
|
||||
OPTIONS
|
||||
"MCL_INSTALL OFF"
|
||||
CUSTOM_CACHE_KEY "7b08"
|
||||
)
|
||||
|
||||
# oaknut
|
||||
|
@ -71,14 +71,14 @@ AddPackage(
|
|||
|
||||
# unordered_dense
|
||||
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME unordered_dense
|
||||
REPO "Lizzie841/unordered_dense"
|
||||
SHA e59d30b7b1
|
||||
HASH 71eff7bd9ba4b9226967bacd56a8ff000946f8813167cb5664bb01e96fb79e4e220684d824fe9c59c4d1cc98c606f13aff05b7940a1ed8ab3c95d6974ee34fa0
|
||||
URL "https://github.com/Lizzie841/unordered_dense/archive/e59d30b7b1.zip"
|
||||
URL_HASH SHA512=71eff7bd9ba4b9226967bacd56a8ff000946f8813167cb5664bb01e96fb79e4e220684d824fe9c59c4d1cc98c606f13aff05b7940a1ed8ab3c95d6974ee34fa0
|
||||
FIND_PACKAGE_ARGUMENTS "CONFIG"
|
||||
OPTIONS
|
||||
"UNORDERED_DENSE_INSTALL OFF"
|
||||
CUSTOM_CACHE_KEY "e59d"
|
||||
)
|
||||
|
||||
# xbyak
|
||||
|
@ -93,24 +93,24 @@ AddPackage(
|
|||
# zydis
|
||||
|
||||
if ("x86_64" IN_LIST ARCHITECTURE)
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME Zycore
|
||||
REPO "zyantific/zycore-c"
|
||||
SHA 75a36c45ae
|
||||
HASH 15aa399f39713e042c4345bc3175c82f14dca849fde2a21d4f591f62c43e227b70d868d8bb86beb5f4eb68b1d6bd3792cdd638acf89009e787e3d10ee7401924
|
||||
URL "https://github.com/zyantific/zycore-c/archive/75a36c45ae.zip"
|
||||
URL_HASH SHA512=15aa399f39713e042c4345bc3175c82f14dca849fde2a21d4f591f62c43e227b70d868d8bb86beb5f4eb68b1d6bd3792cdd638acf89009e787e3d10ee7401924
|
||||
CUSTOM_CACHE_KEY "75a3"
|
||||
)
|
||||
|
||||
AddPackage(
|
||||
CPMAddPackage(
|
||||
NAME Zydis
|
||||
VERSION 4
|
||||
REPO "zyantific/zydis"
|
||||
SHA c2d2bab025
|
||||
HASH 7b48f213ff7aab2926f8c9c65195959143bebbfb2b9a25051ffd8b8b0f1baf1670d9739781de674577d955925f91ac89376e16b476a03828c84e2fd765d45020
|
||||
URL "https://github.com/zyantific/zydis/archive/c2d2bab025.zip"
|
||||
URL_HASH SHA512=7b48f213ff7aab2926f8c9c65195959143bebbfb2b9a25051ffd8b8b0f1baf1670d9739781de674577d955925f91ac89376e16b476a03828c84e2fd765d45020
|
||||
OPTIONS
|
||||
"ZYDIS_BUILD_TOOLS OFF"
|
||||
"ZYDIS_BUILD_EXAMPLES OFF"
|
||||
"ZYDIS_BUILD_DOXYGEN OFF"
|
||||
"ZYAN_ZYCORE_PATH ${Zycore_SOURCE_DIR}"
|
||||
"CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON"
|
||||
CUSTOM_CACHE_KEY "c2d2"
|
||||
)
|
||||
endif()
|
||||
|
|
|
@ -14,34 +14,19 @@ template<typename... Ts>
|
|||
assert_terminate_impl(expr_str, msg, fmt::make_format_args(args...));
|
||||
}
|
||||
|
||||
// Temporary until MCL is fully removed
|
||||
#ifndef ASSERT_MSG
|
||||
#define ASSERT_MSG(_a_, ...) \
|
||||
([&]() { \
|
||||
if (!(_a_)) [[unlikely]] { \
|
||||
assert_terminate(#_a_, __VA_ARGS__); \
|
||||
} \
|
||||
}())
|
||||
#endif
|
||||
|
||||
#ifndef ASSERT
|
||||
#define ASSERT(_a_) ASSERT_MSG(_a_, "")
|
||||
#endif
|
||||
#ifndef UNREACHABLE
|
||||
#define UNREACHABLE() ASSERT_MSG(false, "unreachable")
|
||||
#endif
|
||||
#ifdef _DEBUG
|
||||
#ifndef DEBUG_ASSERT
|
||||
#define DEBUG_ASSERT(_a_) ASSERT(_a_)
|
||||
#endif
|
||||
#ifndef DEBUG_ASSERT_MSG
|
||||
#define DEBUG_ASSERT_MSG(_a_, ...) ASSERT_MSG(_a_, __VA_ARGS__)
|
||||
#endif
|
||||
#else // not debug
|
||||
#ifndef DEBUG_ASSERT
|
||||
#define DEBUG_ASSERT(_a_)
|
||||
#endif
|
||||
#ifndef DEBUG_ASSERT_MSG
|
||||
#define DEBUG_ASSERT_MSG(_a_, _desc_, ...)
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
#include "common/settings.h"
|
||||
#include "network/network.h"
|
||||
|
||||
//#ifdef ENABLE_WEB_SERVICE
|
||||
#ifdef ENABLE_WEB_SERVICE
|
||||
#include "web_service/announce_room_json.h"
|
||||
//#endif
|
||||
#endif
|
||||
|
||||
namespace Core {
|
||||
|
||||
|
@ -28,7 +28,7 @@ AnnounceMultiplayerSession::AnnounceMultiplayerSession() {
|
|||
Settings::values.eden_username.GetValue(),
|
||||
Settings::values.eden_token.GetValue());
|
||||
#else
|
||||
backend = std::make_unique<AnnounceMultiplayerRoom::NullBackend>();
|
||||
backend = std::make_unique<AnnounceMultiplayerRoom::NullBackend>();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -155,11 +155,12 @@ bool AnnounceMultiplayerSession::IsRunning() const {
|
|||
|
||||
void AnnounceMultiplayerSession::UpdateCredentials() {
|
||||
ASSERT_MSG(!IsRunning(), "Credentials can only be updated when session is not running");
|
||||
|
||||
#ifdef ENABLE_WEB_SERVICE
|
||||
backend = std::make_unique<WebService::RoomJson>(Settings::values.web_api_url.GetValue(),
|
||||
Settings::values.eden_username.GetValue(),
|
||||
Settings::values.eden_token.GetValue());
|
||||
#else
|
||||
backend = std::make_unique<AnnounceMultiplayerRoom::NullBackend>();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ Id GetMaxThreadId(EmitContext& ctx, Id thread_id, Id clamp, Id segmentation_mask
|
|||
Id SelectValue(EmitContext& ctx, Id in_range, Id value, Id src_thread_id) {
|
||||
return ctx.OpSelect(
|
||||
ctx.U32[1], in_range,
|
||||
ctx.OpGroupNonUniformShuffle(ctx.U32[1], SubgroupScope(ctx), value, src_thread_id), value);
|
||||
ctx.OpGroupNonUniformShuffleXor(ctx.U32[1], SubgroupScope(ctx), value, src_thread_id), value);
|
||||
}
|
||||
|
||||
Id AddPartitionBase(EmitContext& ctx, Id thread_id) {
|
||||
|
|
|
@ -337,10 +337,6 @@ if (VulkanUtilityLibraries_ADDED)
|
|||
target_include_directories(video_core PUBLIC ${VulkanUtilityLibraries_SOURCE_DIR}/include)
|
||||
endif()
|
||||
|
||||
if (VulkanHeaders_ADDED)
|
||||
target_include_directories(video_core PUBLIC ${VulkanHeaders_SOURCE_DIR}/include)
|
||||
endif()
|
||||
|
||||
target_link_libraries(video_core PRIVATE sirit Vulkan::Headers)
|
||||
|
||||
if (ENABLE_NSIGHT_AFTERMATH)
|
||||
|
|
|
@ -24,6 +24,8 @@ using namespace Common::Literals;
|
|||
|
||||
namespace OpenGL {
|
||||
namespace {
|
||||
|
||||
// TODO: Needs to explicitly enable ARB_TESSELLATION_SHADER for GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS
|
||||
constexpr std::array LIMIT_UBOS = {
|
||||
GL_MAX_VERTEX_UNIFORM_BLOCKS, GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS,
|
||||
GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, GL_MAX_GEOMETRY_UNIFORM_BLOCKS,
|
||||
|
@ -62,7 +64,7 @@ bool HasExtension(std::span<const std::string_view> extensions, std::string_view
|
|||
}
|
||||
|
||||
std::array<u32, Shader::MaxStageTypes> BuildMaxUniformBuffers() noexcept {
|
||||
std::array<u32, Shader::MaxStageTypes> max;
|
||||
std::array<u32, Shader::MaxStageTypes> max{};
|
||||
std::ranges::transform(LIMIT_UBOS, max.begin(), &GetInteger<u32>);
|
||||
return max;
|
||||
}
|
||||
|
@ -108,7 +110,7 @@ bool IsASTCSupported() {
|
|||
|
||||
static bool HasSlowSoftwareAstc(std::string_view vendor_name, std::string_view renderer) {
|
||||
// ifdef for Unix reduces string comparisons for non-Windows drivers, and Intel
|
||||
#ifdef YUZU_UNIX
|
||||
#ifdef __unix__
|
||||
// Sorted vaguely by how likely a vendor is to appear
|
||||
if (vendor_name == "AMD") {
|
||||
// RadeonSI
|
||||
|
|
|
@ -60,6 +60,7 @@ size_t StagingBuffers::RequestBuffer(size_t requested_size) {
|
|||
storage_flags | GL_MAP_PERSISTENT_BIT);
|
||||
alloc.map = static_cast<u8*>(glMapNamedBufferRange(alloc.buffer.handle, 0, next_pow2_size,
|
||||
map_flags | GL_MAP_PERSISTENT_BIT));
|
||||
DEBUG_ASSERT(alloc.map != nullptr);
|
||||
alloc.size = next_pow2_size;
|
||||
allocs.emplace_back(std::move(alloc));
|
||||
return allocs.size() - 1;
|
||||
|
|
|
@ -974,6 +974,7 @@ bool Device::GetSuitability(bool requires_swapchain) {
|
|||
// Configure properties.
|
||||
VkPhysicalDeviceVulkan12Features features_1_2{};
|
||||
VkPhysicalDeviceVulkan13Features features_1_3{};
|
||||
VkPhysicalDeviceVulkan14Features features_1_4{};
|
||||
|
||||
// Configure properties.
|
||||
properties.properties = physical.GetProperties();
|
||||
|
@ -1052,10 +1053,13 @@ bool Device::GetSuitability(bool requires_swapchain) {
|
|||
if (instance_version >= VK_API_VERSION_1_2) {
|
||||
features_1_2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
|
||||
features_1_3.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
|
||||
features_1_4.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES;
|
||||
|
||||
features_1_2.pNext = &features_1_3;
|
||||
features_1_3.pNext = &features_1_4;
|
||||
|
||||
*next = &features_1_2;
|
||||
// next = &features_1_4.pNext;
|
||||
}
|
||||
|
||||
// Test all features we know about. If the feature is not available in core at our
|
||||
|
|
|
@ -238,10 +238,6 @@ add_executable(yuzu
|
|||
migration_dialog.h migration_dialog.cpp
|
||||
migration_worker.h
|
||||
migration_worker.cpp
|
||||
|
||||
deps_dialog.cpp
|
||||
deps_dialog.h
|
||||
deps_dialog.ui
|
||||
)
|
||||
|
||||
set_target_properties(yuzu PROPERTIES OUTPUT_NAME "eden")
|
||||
|
@ -404,8 +400,13 @@ target_link_libraries(yuzu PRIVATE Vulkan::Headers)
|
|||
if (NOT WIN32)
|
||||
target_include_directories(yuzu PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if (UNIX AND NOT APPLE)
|
||||
target_link_libraries(yuzu PRIVATE Qt6::DBus Qt6::GuiPrivate)
|
||||
target_link_libraries(yuzu PRIVATE Qt6::DBus)
|
||||
endif()
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
target_link_libraries(yuzu PRIVATE Qt6::GuiPrivate)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(yuzu PRIVATE
|
||||
|
@ -496,6 +497,11 @@ if (YUZU_ROOM)
|
|||
target_link_libraries(yuzu PRIVATE yuzu-room)
|
||||
endif()
|
||||
|
||||
# Explicit linking required
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
||||
target_link_libraries(yuzu PRIVATE X11)
|
||||
endif()
|
||||
|
||||
# Extra deps
|
||||
add_subdirectory(externals)
|
||||
target_link_libraries(yuzu PRIVATE QuaZip::QuaZip)
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>About Eden</string>
|
||||
<string>About eden</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -55,7 +52,7 @@ QtProfileSelectionDialog::QtProfileSelectionDialog(
|
|||
Core::System& system, QWidget* parent,
|
||||
const Core::Frontend::ProfileSelectParameters& parameters)
|
||||
: QDialog(parent), profile_manager{system.GetProfileManager()} {
|
||||
outer_layout = new QVBoxLayout(this);
|
||||
outer_layout = new QVBoxLayout;
|
||||
|
||||
instruction_label = new QLabel();
|
||||
|
||||
|
@ -69,7 +66,7 @@ QtProfileSelectionDialog::QtProfileSelectionDialog(
|
|||
outer_layout->addWidget(scroll_area);
|
||||
outer_layout->addWidget(buttons);
|
||||
|
||||
layout = new QVBoxLayout(scroll_area);
|
||||
layout = new QVBoxLayout;
|
||||
tree_view = new QTreeView;
|
||||
item_model = new QStandardItemModel(tree_view);
|
||||
tree_view->setModel(item_model);
|
||||
|
@ -97,6 +94,8 @@ QtProfileSelectionDialog::QtProfileSelectionDialog(
|
|||
layout->setSpacing(0);
|
||||
layout->addWidget(tree_view);
|
||||
|
||||
scroll_area->setLayout(layout);
|
||||
|
||||
connect(tree_view, &QTreeView::clicked, this, &QtProfileSelectionDialog::SelectUser);
|
||||
connect(tree_view, &QTreeView::doubleClicked, this, &QtProfileSelectionDialog::accept);
|
||||
connect(controller_navigation, &ControllerNavigation::TriggerKeyboardEvent,
|
||||
|
@ -125,6 +124,7 @@ QtProfileSelectionDialog::QtProfileSelectionDialog(
|
|||
for (const auto& item : list_items)
|
||||
item_model->appendRow(item);
|
||||
|
||||
setLayout(outer_layout);
|
||||
SetWindowTitle(parameters);
|
||||
SetDialogPurpose(parameters);
|
||||
resize(550, 400);
|
||||
|
|
|
@ -287,6 +287,7 @@ GRenderWindow::GRenderWindow(GMainWindow* parent, EmuThread* emu_thread_,
|
|||
setAttribute(Qt::WA_AcceptTouchEvents);
|
||||
auto* layout = new QHBoxLayout(this);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
setLayout(layout);
|
||||
input_subsystem->Initialize();
|
||||
this->setMouseTracking(true);
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Eden Configuration</string>
|
||||
<string>eden Configuration</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
|
|
|
@ -295,7 +295,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
|||
api_restore_global_button = widget->restore_button;
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(api_restore_global_button, &QAbstractButton::clicked,
|
||||
api_restore_global_button->connect(api_restore_global_button, &QAbstractButton::clicked,
|
||||
[this](bool) { UpdateAPILayout(); });
|
||||
|
||||
// Detach API's restore button and place it where we want
|
||||
|
@ -327,7 +327,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
|||
restore_button->setEnabled(true);
|
||||
widget->layout()->addWidget(restore_button);
|
||||
|
||||
QObject::connect(restore_button, &QAbstractButton::clicked,
|
||||
restore_button->connect(restore_button, &QAbstractButton::clicked,
|
||||
[restore_button, this](bool) {
|
||||
Settings::values.vsync_mode.SetGlobal(true);
|
||||
PopulateVSyncModeSelection(true);
|
||||
|
@ -340,7 +340,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
|||
UpdateVsyncSetting();
|
||||
restore_button->setVisible(true);
|
||||
};
|
||||
QObject::connect(widget->combobox, QOverload<int>::of(&QComboBox::activated),
|
||||
widget->combobox->connect(widget->combobox, QOverload<int>::of(&QComboBox::activated),
|
||||
[set_non_global]() { set_non_global(); });
|
||||
vsync_restore_global_button = restore_button;
|
||||
}
|
||||
|
@ -379,7 +379,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
|||
Settings::values.bg_red.UsingGlobal(), ui->bg_widget);
|
||||
ui->bg_widget->layout()->addWidget(bg_restore_button);
|
||||
|
||||
QObject::connect(bg_restore_button, &QAbstractButton::clicked,
|
||||
bg_restore_button->connect(bg_restore_button, &QAbstractButton::clicked,
|
||||
[bg_restore_button, this](bool) {
|
||||
const int r = Settings::values.bg_red.GetValue(true);
|
||||
const int g = Settings::values.bg_green.GetValue(true);
|
||||
|
@ -390,7 +390,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
|||
bg_restore_button->setEnabled(false);
|
||||
});
|
||||
|
||||
QObject::connect(ui->bg_button, &QAbstractButton::clicked, [bg_restore_button](bool) {
|
||||
ui->bg_button->connect(ui->bg_button, &QAbstractButton::clicked, [bg_restore_button](bool) {
|
||||
bg_restore_button->setVisible(true);
|
||||
bg_restore_button->setEnabled(true);
|
||||
});
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: 2016 Citra Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -101,8 +98,8 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem,
|
|||
};
|
||||
|
||||
for (std::size_t i = 0; i < player_tabs.size(); ++i) {
|
||||
QHBoxLayout *tab_layout = new QHBoxLayout(player_tabs[i]);
|
||||
tab_layout->addWidget(player_controllers[i]);
|
||||
player_tabs[i]->setLayout(new QHBoxLayout(player_tabs[i]));
|
||||
player_tabs[i]->layout()->addWidget(player_controllers[i]);
|
||||
connect(player_controllers[i], &ConfigureInputPlayer::Connected, [this, i](bool checked) {
|
||||
// Ensures that connecting a controller changes the number of players
|
||||
if (connected_controller_checkboxes[i]->isChecked() != checked) {
|
||||
|
@ -141,9 +138,8 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem,
|
|||
[this](bool is_handheld) { UpdateDockedState(is_handheld); });
|
||||
|
||||
advanced = new ConfigureInputAdvanced(hid_core, this);
|
||||
|
||||
QHBoxLayout* advancedLayout = new QHBoxLayout(ui->tabAdvanced);
|
||||
advancedLayout->addWidget(advanced);
|
||||
ui->tabAdvanced->setLayout(new QHBoxLayout(ui->tabAdvanced));
|
||||
ui->tabAdvanced->layout()->addWidget(advanced);
|
||||
|
||||
connect(advanced, &ConfigureInputAdvanced::CallDebugControllerDialog,
|
||||
[this, input_subsystem, &hid_core, is_powered_on] {
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: 2016 Citra Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <QGridLayout>
|
||||
#include <QInputDialog>
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
|
@ -15,6 +13,7 @@
|
|||
#include "common/assert.h"
|
||||
#include "common/param_package.h"
|
||||
#include "configuration/qt_config.h"
|
||||
#include "frontend_common/config.h"
|
||||
#include "hid_core/frontend/emulated_controller.h"
|
||||
#include "hid_core/hid_core.h"
|
||||
#include "hid_core/hid_types.h"
|
||||
|
|
|
@ -2429,7 +2429,7 @@ void PlayerControlPreview::DrawProJoystick(QPainter& p, const QPointF center, co
|
|||
1.0 - std::sqrt((offset.x() * offset.x()) + (offset.y() * offset.y())) * 0.1f);
|
||||
|
||||
const float rotation =
|
||||
((offset.x() == 0) ? atan(1) * 2 : atan(offset.y() / offset.x())) * (180 / (atan(1) * 4));
|
||||
((offset.x() == 0.f) ? std::atan(1.f) * 2.f : std::atan(offset.y() / offset.x())) * (180.f / (std::atan(1.f) * 4.f));
|
||||
|
||||
p.save();
|
||||
p.translate(offset_center);
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: 2018 Citra Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -22,7 +19,7 @@
|
|||
CalibrationConfigurationDialog::CalibrationConfigurationDialog(QWidget* parent,
|
||||
const std::string& host, u16 port)
|
||||
: QDialog(parent) {
|
||||
layout = new QVBoxLayout(this);
|
||||
layout = new QVBoxLayout;
|
||||
status_label = new QLabel(tr("Communicating with the server..."));
|
||||
cancel_button = new QPushButton(tr("Cancel"));
|
||||
connect(cancel_button, &QPushButton::clicked, this, [this] {
|
||||
|
@ -33,6 +30,7 @@ CalibrationConfigurationDialog::CalibrationConfigurationDialog(QWidget* parent,
|
|||
});
|
||||
layout->addWidget(status_label);
|
||||
layout->addWidget(cancel_button);
|
||||
setLayout(layout);
|
||||
|
||||
using namespace InputCommon::CemuhookUDP;
|
||||
job = std::make_unique<CalibrationConfigurationJob>(
|
||||
|
|
|
@ -418,7 +418,7 @@ bool ConfigureProfileManager::LoadAvatarData() {
|
|||
ConfigureProfileManagerAvatarDialog::ConfigureProfileManagerAvatarDialog(QWidget* parent)
|
||||
: QDialog{parent}, avatar_list{new QListWidget(this)}, bg_color_button{new QPushButton(this)} {
|
||||
auto* main_layout = new QVBoxLayout(this);
|
||||
auto* button_layout = new QHBoxLayout();
|
||||
auto* button_layout = new QHBoxLayout(this);
|
||||
auto* select_button = new QPushButton(tr("Select"), this);
|
||||
auto* cancel_button = new QPushButton(tr("Cancel"), this);
|
||||
auto* bg_color_label = new QLabel(tr("Background Color"), this);
|
||||
|
@ -442,6 +442,7 @@ ConfigureProfileManagerAvatarDialog::ConfigureProfileManagerAvatarDialog(QWidget
|
|||
button_layout->addWidget(select_button);
|
||||
button_layout->addWidget(cancel_button);
|
||||
|
||||
this->setLayout(main_layout);
|
||||
this->setWindowTitle(tr("Select Firmware Avatar"));
|
||||
main_layout->addWidget(avatar_list);
|
||||
main_layout->addLayout(button_layout);
|
||||
|
@ -653,4 +654,4 @@ std::vector<uint8_t> ConfigureProfileManager::DecompressYaz0(const FileSys::Virt
|
|||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
}
|
|
@ -12,7 +12,6 @@
|
|||
#include <QDialog>
|
||||
#include <QList>
|
||||
#include <QWidget>
|
||||
#include "core/file_sys/vfs/vfs_types.h"
|
||||
|
||||
namespace Common {
|
||||
struct UUID;
|
||||
|
|
|
@ -118,7 +118,7 @@ QWidget* Widget::CreateCheckBox(Settings::BasicSetting* bool_setting, const QStr
|
|||
};
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(checkbox, &QCheckBox::clicked, [touch]() { touch(); });
|
||||
checkbox->connect(checkbox, &QCheckBox::clicked, [touch]() { touch(); });
|
||||
}
|
||||
|
||||
return checkbox;
|
||||
|
@ -165,7 +165,7 @@ QWidget* Widget::CreateCombobox(std::function<std::string()>& serializer,
|
|||
};
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(combobox, QOverload<int>::of(&QComboBox::activated),
|
||||
combobox->connect(combobox, QOverload<int>::of(&QComboBox::activated),
|
||||
[touch]() { touch(); });
|
||||
}
|
||||
|
||||
|
@ -223,9 +223,8 @@ QWidget* Widget::CreateRadioGroup(std::function<std::string()>& serializer,
|
|||
};
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
for (const auto& [id, button] : radio_buttons) {
|
||||
QObject::connect(button, &QAbstractButton::clicked, [touch]() { touch(); });
|
||||
}
|
||||
for (const auto& [id, button] : radio_buttons)
|
||||
button->connect(button, &QAbstractButton::clicked, [touch]() { touch(); });
|
||||
}
|
||||
|
||||
return group;
|
||||
|
@ -249,7 +248,7 @@ QWidget* Widget::CreateLineEdit(std::function<std::string()>& serializer,
|
|||
};
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); });
|
||||
line_edit->connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); });
|
||||
}
|
||||
|
||||
return line_edit;
|
||||
|
@ -266,7 +265,7 @@ static void CreateIntSlider(Settings::BasicSetting& setting, bool reversed, floa
|
|||
feedback->setText(use_format.arg(QVariant::fromValue(present).value<QString>()));
|
||||
};
|
||||
|
||||
QObject::connect(slider, &QAbstractSlider::valueChanged, update_feedback);
|
||||
slider->connect(slider, &QAbstractSlider::valueChanged, update_feedback);
|
||||
update_feedback(std::strtol(setting.ToString().c_str(), nullptr, 0));
|
||||
|
||||
slider->setMinimum(std::strtol(setting.MinVal().c_str(), nullptr, 0));
|
||||
|
@ -293,7 +292,7 @@ static void CreateFloatSlider(Settings::BasicSetting& setting, bool reversed, fl
|
|||
feedback->setText(use_format.arg(QVariant::fromValue(present).value<QString>()));
|
||||
};
|
||||
|
||||
QObject::connect(slider, &QAbstractSlider::valueChanged, update_feedback);
|
||||
slider->connect(slider, &QAbstractSlider::valueChanged, update_feedback);
|
||||
update_feedback(std::strtof(setting.ToString().c_str(), nullptr));
|
||||
|
||||
slider->setMinimum(min_val * use_multiplier);
|
||||
|
@ -346,7 +345,7 @@ QWidget* Widget::CreateSlider(bool reversed, float multiplier, const QString& gi
|
|||
slider->setInvertedAppearance(reversed);
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(slider, &QAbstractSlider::actionTriggered, [touch]() { touch(); });
|
||||
slider->connect(slider, &QAbstractSlider::actionTriggered, [touch]() { touch(); });
|
||||
}
|
||||
|
||||
return container;
|
||||
|
@ -376,7 +375,7 @@ QWidget* Widget::CreateSpinBox(const QString& given_suffix,
|
|||
};
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(spinbox, QOverload<int>::of(&QSpinBox::valueChanged), [this, touch]() {
|
||||
spinbox->connect(spinbox, QOverload<int>::of(&QSpinBox::valueChanged), [this, touch]() {
|
||||
if (spinbox->value() != std::strtol(setting.ToStringGlobal().c_str(), nullptr, 0)) {
|
||||
touch();
|
||||
}
|
||||
|
@ -410,7 +409,7 @@ QWidget* Widget::CreateDoubleSpinBox(const QString& given_suffix,
|
|||
};
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(double_spinbox, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
||||
double_spinbox->connect(double_spinbox, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
|
||||
[this, touch]() {
|
||||
if (double_spinbox->value() !=
|
||||
std::strtod(setting.ToStringGlobal().c_str(), nullptr)) {
|
||||
|
@ -453,8 +452,7 @@ QWidget* Widget::CreateHexEdit(std::function<std::string()>& serializer,
|
|||
restore_func = [this, to_hex]() { line_edit->setText(to_hex(RelevantDefault(setting))); };
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
|
||||
QObject::connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); });
|
||||
line_edit->connect(line_edit, &QLineEdit::textChanged, [touch]() { touch(); });
|
||||
}
|
||||
|
||||
return line_edit;
|
||||
|
@ -488,7 +486,7 @@ QWidget* Widget::CreateDateTimeEdit(bool disabled, bool restrict,
|
|||
restore_func = [this, get_clear_val]() { date_time_edit->setDateTime(get_clear_val()); };
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
QObject::connect(date_time_edit, &QDateTimeEdit::editingFinished,
|
||||
date_time_edit->connect(date_time_edit, &QDateTimeEdit::editingFinished,
|
||||
[this, get_clear_val, touch]() {
|
||||
if (date_time_edit->dateTime() != get_clear_val()) {
|
||||
touch();
|
||||
|
@ -665,7 +663,7 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
|
|||
} else {
|
||||
layout->addWidget(restore_button);
|
||||
|
||||
QObject::connect(restore_button, &QAbstractButton::clicked,
|
||||
restore_button->connect(restore_button, &QAbstractButton::clicked,
|
||||
[this, restore_func, checkbox_restore_func](bool) {
|
||||
LOG_DEBUG(Frontend, "Restore global state for \"{}\"",
|
||||
setting.GetLabel());
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: 2015 Citra Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -31,6 +28,7 @@ ControllerDialog::ControllerDialog(Core::HID::HIDCore& hid_core_,
|
|||
QLayout* layout = new QVBoxLayout(this);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
layout->addWidget(widget);
|
||||
setLayout(layout);
|
||||
|
||||
// Configure focus so that widget is focusable and the dialog automatically forwards focus to
|
||||
// it.
|
||||
|
|
|
@ -1,121 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "yuzu/deps_dialog.h"
|
||||
#include <QAbstractTextDocumentLayout>
|
||||
#include <QDesktopServices>
|
||||
#include <QIcon>
|
||||
#include <QPainter>
|
||||
#include <QTableWidget>
|
||||
#include <QTextEdit>
|
||||
#include "dep_hashes.h"
|
||||
#include "ui_deps_dialog.h"
|
||||
#include <fmt/ranges.h>
|
||||
|
||||
DepsDialog::DepsDialog(QWidget* parent)
|
||||
: QDialog(parent)
|
||||
, ui{std::make_unique<Ui::DepsDialog>()}
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
constexpr size_t rows = Common::dep_hashes.size();
|
||||
ui->tableDeps->setRowCount(rows);
|
||||
|
||||
QStringList labels;
|
||||
labels << tr("Dependency") << tr("Version");
|
||||
|
||||
ui->tableDeps->setHorizontalHeaderLabels(labels);
|
||||
ui->tableDeps->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeMode::Stretch);
|
||||
ui->tableDeps->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeMode::Fixed);
|
||||
ui->tableDeps->horizontalHeader()->setMinimumSectionSize(200);
|
||||
|
||||
for (size_t i = 0; i < rows; ++i) {
|
||||
const std::string name = Common::dep_names.at(i);
|
||||
const std::string sha = Common::dep_hashes.at(i);
|
||||
const std::string url = Common::dep_urls.at(i);
|
||||
|
||||
std::string dependency = fmt::format("<a href=\"{}\">{}</a>", url, name);
|
||||
|
||||
QTableWidgetItem *nameItem = new QTableWidgetItem(QString::fromStdString(dependency));
|
||||
QTableWidgetItem *shaItem = new QTableWidgetItem(QString::fromStdString(sha));
|
||||
|
||||
ui->tableDeps->setItem(i, 0, nameItem);
|
||||
ui->tableDeps->setItem(i, 1, shaItem);
|
||||
}
|
||||
|
||||
ui->tableDeps->setItemDelegateForColumn(0, new LinkItemDelegate(this));
|
||||
}
|
||||
|
||||
DepsDialog::~DepsDialog() = default;
|
||||
|
||||
LinkItemDelegate::LinkItemDelegate(QObject *parent)
|
||||
: QStyledItemDelegate(parent)
|
||||
{}
|
||||
|
||||
void LinkItemDelegate::paint(QPainter *painter,
|
||||
const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
auto options = option;
|
||||
initStyleOption(&options, index);
|
||||
|
||||
QTextDocument doc;
|
||||
QString html = index.data(Qt::DisplayRole).toString();
|
||||
doc.setHtml(html);
|
||||
|
||||
options.text.clear();
|
||||
|
||||
painter->save();
|
||||
painter->translate(options.rect.topLeft());
|
||||
doc.drawContents(painter, QRectF(0, 0, options.rect.width(), options.rect.height()));
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
QSize LinkItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
QStyleOptionViewItem options = option;
|
||||
initStyleOption(&options, index);
|
||||
|
||||
QTextDocument doc;
|
||||
doc.setHtml(options.text);
|
||||
doc.setTextWidth(options.rect.width());
|
||||
return QSize(doc.idealWidth(), doc.size().height());
|
||||
}
|
||||
|
||||
bool LinkItemDelegate::editorEvent(QEvent *event,
|
||||
QAbstractItemModel *model,
|
||||
const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index)
|
||||
{
|
||||
if (event->type() == QEvent::MouseButtonRelease) {
|
||||
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
|
||||
if (mouseEvent->button() == Qt::LeftButton) {
|
||||
QString html = index.data(Qt::DisplayRole).toString();
|
||||
QTextDocument doc;
|
||||
doc.setHtml(html);
|
||||
doc.setTextWidth(option.rect.width());
|
||||
|
||||
// this is kinda silly but it werks
|
||||
QAbstractTextDocumentLayout *layout = doc.documentLayout();
|
||||
|
||||
QPoint pos = mouseEvent->pos() - option.rect.topLeft();
|
||||
int charPos = layout->hitTest(pos, Qt::ExactHit);
|
||||
|
||||
if (charPos >= 0) {
|
||||
QTextCursor cursor(&doc);
|
||||
cursor.setPosition(charPos);
|
||||
|
||||
QTextCharFormat format = cursor.charFormat();
|
||||
|
||||
if (format.isAnchor()) {
|
||||
QString href = format.anchorHref();
|
||||
if (!href.isEmpty()) {
|
||||
QDesktopServices::openUrl(QUrl(href));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return QStyledItemDelegate::editorEvent(event, model, option, index);
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QDialog>
|
||||
#include <QStyledItemDelegate>
|
||||
#include <QTableView>
|
||||
#include <memory>
|
||||
|
||||
namespace Ui { class DepsDialog; }
|
||||
|
||||
class DepsDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DepsDialog(QWidget *parent);
|
||||
~DepsDialog() override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<Ui::DepsDialog> ui;
|
||||
};
|
||||
|
||||
class LinkItemDelegate : public QStyledItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit LinkItemDelegate(QObject *parent = 0);
|
||||
|
||||
protected:
|
||||
void paint(QPainter *painter,
|
||||
const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const override;
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
||||
bool editorEvent(QEvent *event,
|
||||
QAbstractItemModel *model,
|
||||
const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) override;
|
||||
};
|
|
@ -1,166 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>DepsDialog</class>
|
||||
<widget class="QDialog" name="DepsDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>701</width>
|
||||
<height>500</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Eden Dependencies</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelLogo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>200</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../../dist/qt_themes/default/default.qrc">:/icons/default/256x256/eden.png</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelEden">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p><span style=" font-size:28pt;">Eden Dependencies</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelInfo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>The projects that make Eden possible</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableWidget" name="tableDeps">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SelectionMode::NoSelection</enum>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column/>
|
||||
<column/>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::StandardButton::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../dist/qt_themes/default/default.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>DepsDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>DepsDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
|
@ -100,7 +100,7 @@ void DiscordImpl::Update() {
|
|||
request.setTransferTimeout(3000);
|
||||
QNetworkReply* reply = manager.head(request);
|
||||
QEventLoop request_event_loop;
|
||||
QObject::connect(reply, &QNetworkReply::finished, &request_event_loop, &QEventLoop::quit);
|
||||
reply->connect(reply, &QNetworkReply::finished, &request_event_loop, &QEventLoop::quit);
|
||||
request_event_loop.exec();
|
||||
UpdateGameStatus(reply->error());
|
||||
|
||||
|
|
12
src/yuzu/externals/CMakeLists.txt
vendored
12
src/yuzu/externals/CMakeLists.txt
vendored
|
@ -2,7 +2,7 @@
|
|||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# cpm
|
||||
include(CPMUtil)
|
||||
include(CPM)
|
||||
|
||||
# Disable tests/tools in all externals supporting the standard option name
|
||||
set(BUILD_TESTING OFF)
|
||||
|
@ -14,11 +14,11 @@ set(BUILD_SHARED_LIBS OFF)
|
|||
set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON)
|
||||
|
||||
# QuaZip
|
||||
AddPackage(
|
||||
set(CPM_USE_LOCAL_PACKAGES ON)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME QuaZip-Qt6
|
||||
VERSION 1.3
|
||||
REPO "crueter/quazip-qt6"
|
||||
SHA f838774d63
|
||||
HASH 9f629a438699801244a106c8df6d5f8f8d19e80df54f530a89403a10c8c4e37a6e95606bbdd307f23636961e8ce34eb37a2186d589a1f227ac9c8e2c678e326e
|
||||
SYSTEM_PACKAGE ON
|
||||
URL "https://github.com/crueter/quazip-qt6/archive/f838774d63.zip"
|
||||
CUSTOM_CACHE_KEY "f838"
|
||||
)
|
||||
|
|
|
@ -96,7 +96,6 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual
|
|||
#include <QStandardPaths>
|
||||
#include <QStatusBar>
|
||||
#include <QString>
|
||||
#include <QStyleHints>
|
||||
#include <QSysInfo>
|
||||
#include <QUrl>
|
||||
#include <QtConcurrent/QtConcurrent>
|
||||
|
@ -160,7 +159,6 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual
|
|||
#include "yuzu/debugger/console.h"
|
||||
#include "yuzu/debugger/controller.h"
|
||||
#include "yuzu/debugger/wait_tree.h"
|
||||
#include "yuzu/deps_dialog.h"
|
||||
#include "yuzu/discord.h"
|
||||
#include "yuzu/game_list.h"
|
||||
#include "yuzu/game_list_p.h"
|
||||
|
@ -174,91 +172,6 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual
|
|||
#include "yuzu/util/clickable_label.h"
|
||||
#include "yuzu/vk_device_info.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <QPlatformSurfaceEvent>
|
||||
#include <dwmapi.h>
|
||||
#include <windows.h>
|
||||
#pragma comment(lib, "Dwmapi.lib")
|
||||
|
||||
static inline void ApplyWindowsTitleBarDarkMode(HWND hwnd, bool enabled) {
|
||||
if (!hwnd)
|
||||
return;
|
||||
BOOL val = enabled ? TRUE : FALSE;
|
||||
// 20 = Win11/21H2+
|
||||
if (SUCCEEDED(DwmSetWindowAttribute(hwnd, 20, &val, sizeof(val))))
|
||||
return;
|
||||
// 19 = pre-21H2
|
||||
DwmSetWindowAttribute(hwnd, 19, &val, sizeof(val));
|
||||
}
|
||||
|
||||
static inline void ApplyDarkToTopLevel(QWidget* w, bool on) {
|
||||
if (!w || !w->isWindow())
|
||||
return;
|
||||
ApplyWindowsTitleBarDarkMode(reinterpret_cast<HWND>(w->winId()), on);
|
||||
}
|
||||
|
||||
namespace {
|
||||
struct TitlebarFilter final : QObject {
|
||||
bool dark;
|
||||
explicit TitlebarFilter(bool is_dark) : QObject(qApp), dark(is_dark) {}
|
||||
|
||||
void setDark(bool is_dark) {
|
||||
dark = is_dark;
|
||||
}
|
||||
|
||||
void onFocusChanged(QWidget*, QWidget* now) {
|
||||
if (now)
|
||||
ApplyDarkToTopLevel(now->window(), dark);
|
||||
}
|
||||
|
||||
bool eventFilter(QObject* obj, QEvent* ev) override {
|
||||
if (auto* w = qobject_cast<QWidget*>(obj)) {
|
||||
switch (ev->type()) {
|
||||
case QEvent::WinIdChange:
|
||||
case QEvent::Show:
|
||||
case QEvent::ShowToParent:
|
||||
case QEvent::Polish:
|
||||
case QEvent::WindowStateChange:
|
||||
case QEvent::ZOrderChange:
|
||||
ApplyDarkToTopLevel(w, dark);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return QObject::eventFilter(obj, ev);
|
||||
}
|
||||
};
|
||||
|
||||
static TitlebarFilter* g_filter = nullptr;
|
||||
static QMetaObject::Connection g_focusConn;
|
||||
|
||||
} // namespace
|
||||
|
||||
static void ApplyGlobalDarkTitlebar(bool is_dark) {
|
||||
if (!g_filter) {
|
||||
g_filter = new TitlebarFilter(is_dark);
|
||||
qApp->installEventFilter(g_filter);
|
||||
g_focusConn = QObject::connect(qApp, &QApplication::focusChanged, g_filter,
|
||||
&TitlebarFilter::onFocusChanged);
|
||||
} else {
|
||||
g_filter->setDark(is_dark);
|
||||
}
|
||||
for (QWidget* w : QApplication::topLevelWidgets())
|
||||
ApplyDarkToTopLevel(w, is_dark);
|
||||
}
|
||||
|
||||
static void RemoveTitlebarFilter() {
|
||||
if (!g_filter)
|
||||
return;
|
||||
qApp->removeEventFilter(g_filter);
|
||||
QObject::disconnect(g_focusConn);
|
||||
g_filter->deleteLater();
|
||||
g_filter = nullptr;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef YUZU_CRASH_DUMPS
|
||||
#include "yuzu/breakpad.h"
|
||||
#endif
|
||||
|
@ -386,16 +299,16 @@ static void OverrideWindowsFont() {
|
|||
}
|
||||
#endif
|
||||
|
||||
inline static bool isDarkMode() {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
||||
const auto scheme = QGuiApplication::styleHints()->colorScheme();
|
||||
return scheme == Qt::ColorScheme::Dark;
|
||||
bool GMainWindow::CheckDarkMode() {
|
||||
#ifdef __unix__
|
||||
const QPalette test_palette(qApp->palette());
|
||||
const QColor text_color = test_palette.color(QPalette::Active, QPalette::Text);
|
||||
const QColor window_color = test_palette.color(QPalette::Active, QPalette::Window);
|
||||
return (text_color.value() > window_color.value());
|
||||
#else
|
||||
const QPalette defaultPalette;
|
||||
const auto text = defaultPalette.color(QPalette::WindowText);
|
||||
const auto window = defaultPalette.color(QPalette::Window);
|
||||
return text.lightness() > window.lightness();
|
||||
#endif // QT_VERSION
|
||||
// TODO: Windows
|
||||
return false;
|
||||
#endif // __unix__
|
||||
}
|
||||
|
||||
GMainWindow::GMainWindow(bool has_broken_vulkan)
|
||||
|
@ -445,6 +358,7 @@ GMainWindow::GMainWindow(bool has_broken_vulkan)
|
|||
statusBar()->hide();
|
||||
|
||||
// Check dark mode before a theme is loaded
|
||||
os_dark_mode = CheckDarkMode();
|
||||
startup_icon_theme = QIcon::themeName();
|
||||
// fallback can only be set once, colorful theme icons are okay on both light/dark
|
||||
QIcon::setFallbackThemeName(QStringLiteral("colorful"));
|
||||
|
@ -537,7 +451,7 @@ GMainWindow::GMainWindow(bool has_broken_vulkan)
|
|||
}
|
||||
return QString{};
|
||||
});
|
||||
QObject::connect(&update_watcher, &QFutureWatcher<QString>::finished, this,
|
||||
update_watcher.connect(&update_watcher, &QFutureWatcher<QString>::finished, this,
|
||||
&GMainWindow::OnEmulatorUpdateAvailable);
|
||||
update_watcher.setFuture(update_future);
|
||||
}
|
||||
|
@ -1764,13 +1678,11 @@ void GMainWindow::ConnectMenuEvents() {
|
|||
connect_menu(ui->action_Log_Folder, &GMainWindow::OnOpenLogFolder);
|
||||
|
||||
connect_menu(ui->action_Discord, &GMainWindow::OnOpenDiscord);
|
||||
connect_menu(ui->action_Revolt, &GMainWindow::OnOpenRevolt);
|
||||
connect_menu(ui->action_Verify_installed_contents, &GMainWindow::OnVerifyInstalledContents);
|
||||
connect_menu(ui->action_Firmware_From_Folder, &GMainWindow::OnInstallFirmware);
|
||||
connect_menu(ui->action_Firmware_From_ZIP, &GMainWindow::OnInstallFirmwareFromZIP);
|
||||
connect_menu(ui->action_Install_Keys, &GMainWindow::OnInstallDecryptionKeys);
|
||||
connect_menu(ui->action_About, &GMainWindow::OnAbout);
|
||||
connect_menu(ui->action_Eden_Dependencies, &GMainWindow::OnEdenDependencies);
|
||||
}
|
||||
|
||||
void GMainWindow::UpdateMenuState() {
|
||||
|
@ -2090,7 +2002,7 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa
|
|||
tr("Error while loading ROM! %1", "%1 signifies a numeric error code.")
|
||||
.arg(QString::fromStdString(error_code));
|
||||
const auto description =
|
||||
tr("%1<br>Please redump your files or ask on Discord/Revolt for help.",
|
||||
tr("%1<br>Please redump your files or ask on Discord for help.",
|
||||
"%1 signifies an error string.")
|
||||
.arg(QString::fromStdString(
|
||||
GetResultStatusString(static_cast<Loader::ResultStatus>(error_id))));
|
||||
|
@ -3744,11 +3656,7 @@ void GMainWindow::OnOpenFAQ() {
|
|||
}
|
||||
|
||||
void GMainWindow::OnOpenDiscord() {
|
||||
OpenURL(QUrl(QStringLiteral("https://discord.gg/HstXbPch7X")));
|
||||
}
|
||||
|
||||
void GMainWindow::OnOpenRevolt() {
|
||||
OpenURL(QUrl(QStringLiteral("https://rvlt.gg/qKgFEAbH")));
|
||||
OpenURL(QUrl(QStringLiteral("https://discord.gg/kXAmGCXBGD")));
|
||||
}
|
||||
|
||||
void GMainWindow::ToggleFullscreen() {
|
||||
|
@ -4584,11 +4492,6 @@ void GMainWindow::OnAbout() {
|
|||
aboutDialog.exec();
|
||||
}
|
||||
|
||||
void GMainWindow::OnEdenDependencies() {
|
||||
DepsDialog depsDialog(this);
|
||||
depsDialog.exec();
|
||||
}
|
||||
|
||||
void GMainWindow::OnToggleFilterBar() {
|
||||
game_list->SetFilterVisible(ui->action_Show_Filter_Bar->isChecked());
|
||||
if (ui->action_Show_Filter_Bar->isChecked()) {
|
||||
|
@ -5475,11 +5378,15 @@ void GMainWindow::UpdateUITheme() {
|
|||
current_theme = default_theme;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
QIcon::setThemeName(current_theme);
|
||||
AdjustLinkColor();
|
||||
#else
|
||||
if (current_theme == QStringLiteral("default") || current_theme == QStringLiteral("colorful")) {
|
||||
QIcon::setThemeName(current_theme == QStringLiteral("colorful") ? current_theme
|
||||
: startup_icon_theme);
|
||||
QIcon::setThemeSearchPaths(QStringList(default_theme_paths));
|
||||
if (isDarkMode()) {
|
||||
if (CheckDarkMode()) {
|
||||
current_theme = QStringLiteral("default_dark");
|
||||
}
|
||||
} else {
|
||||
|
@ -5487,7 +5394,7 @@ void GMainWindow::UpdateUITheme() {
|
|||
QIcon::setThemeSearchPaths(QStringList(QStringLiteral(":/icons")));
|
||||
AdjustLinkColor();
|
||||
}
|
||||
|
||||
#endif
|
||||
if (current_theme != default_theme) {
|
||||
QString theme_uri{QStringLiteral(":%1/style.qss").arg(current_theme)};
|
||||
QFile f(theme_uri);
|
||||
|
@ -5510,11 +5417,6 @@ void GMainWindow::UpdateUITheme() {
|
|||
qApp->setStyleSheet({});
|
||||
setStyleSheet({});
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
RemoveTitlebarFilter();
|
||||
ApplyGlobalDarkTitlebar(UISettings::IsDarkTheme());
|
||||
#endif
|
||||
}
|
||||
|
||||
void GMainWindow::LoadTranslation() {
|
||||
|
@ -5782,7 +5684,7 @@ int main(int argc, char* argv[]) {
|
|||
// After settings have been loaded by GMainWindow, apply the filter
|
||||
main_window.show();
|
||||
|
||||
QObject::connect(&app, &QGuiApplication::applicationStateChanged, &main_window,
|
||||
app.connect(&app, &QGuiApplication::applicationStateChanged, &main_window,
|
||||
&GMainWindow::OnAppFocusStateChanged);
|
||||
|
||||
int result = app.exec();
|
||||
|
|
|
@ -346,8 +346,6 @@ private slots:
|
|||
void OnOpenQuickstartGuide();
|
||||
void OnOpenFAQ();
|
||||
void OnOpenDiscord();
|
||||
void OnOpenRevolt();
|
||||
|
||||
/// Called whenever a user selects a game in the game list widget.
|
||||
void OnGameListLoadFile(QString game_path, u64 program_id);
|
||||
void OnGameListOpenFolder(u64 program_id, GameListOpenTarget target,
|
||||
|
@ -397,7 +395,6 @@ private slots:
|
|||
void OnInstallFirmwareFromZIP();
|
||||
void OnInstallDecryptionKeys();
|
||||
void OnAbout();
|
||||
void OnEdenDependencies();
|
||||
void OnToggleFilterBar();
|
||||
void OnToggleStatusBar();
|
||||
void OnGameListRefresh();
|
||||
|
@ -467,6 +464,7 @@ private:
|
|||
void OpenURL(const QUrl& url);
|
||||
void LoadTranslation();
|
||||
void OpenPerGameConfiguration(u64 title_id, const std::string& file_name);
|
||||
bool CheckDarkMode();
|
||||
bool CheckFirmwarePresence();
|
||||
void SetFirmwareVersion();
|
||||
void ConfigureFilesystemProvider(const std::string& filepath);
|
||||
|
@ -557,6 +555,7 @@ private:
|
|||
QTimer update_input_timer;
|
||||
|
||||
QString startup_icon_theme;
|
||||
bool os_dark_mode = false;
|
||||
|
||||
// FS
|
||||
std::shared_ptr<FileSys::VfsFilesystem> vfs;
|
||||
|
|
|
@ -214,10 +214,7 @@
|
|||
<addaction name="action_Open_FAQ"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_Discord"/>
|
||||
<addaction name="action_Revolt"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_About"/>
|
||||
<addaction name="action_Eden_Dependencies"/>
|
||||
</widget>
|
||||
<addaction name="menu_File"/>
|
||||
<addaction name="menu_Emulation"/>
|
||||
|
@ -562,25 +559,6 @@
|
|||
<string>From ZIP</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Revolt">
|
||||
<property name="text">
|
||||
<string>&Revolt</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Revolt</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string/>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Eden_Dependencies">
|
||||
<property name="text">
|
||||
<string>&Eden Dependencies</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="yuzu.qrc"/>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <cstring>
|
||||
#include <processthreadsapi.h>
|
||||
#include <windows.h>
|
||||
#elif defined(YUZU_UNIX)
|
||||
#else
|
||||
#include <cstring>
|
||||
#include <errno.h>
|
||||
#include <spawn.h>
|
||||
|
@ -56,7 +56,7 @@ bool CheckEnvVars(bool* is_child) {
|
|||
IS_CHILD_ENV_VAR, GetLastError());
|
||||
return true;
|
||||
}
|
||||
#elif defined(YUZU_UNIX)
|
||||
#else
|
||||
const char* startup_check_var = getenv(STARTUP_CHECK_ENV_VAR);
|
||||
if (startup_check_var != nullptr &&
|
||||
std::strncmp(startup_check_var, ENV_VAR_ENABLED_TEXT, 8) == 0) {
|
||||
|
@ -110,7 +110,7 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan, bool perform_vulka
|
|||
STARTUP_CHECK_ENV_VAR, GetLastError());
|
||||
}
|
||||
|
||||
#elif defined(YUZU_UNIX)
|
||||
#else
|
||||
const int env_var_set = setenv(STARTUP_CHECK_ENV_VAR, ENV_VAR_ENABLED_TEXT, 1);
|
||||
if (env_var_set == -1) {
|
||||
const int err = errno;
|
||||
|
@ -175,7 +175,7 @@ bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi, int flags) {
|
|||
|
||||
return true;
|
||||
}
|
||||
#elif defined(YUZU_UNIX)
|
||||
#else
|
||||
pid_t SpawnChild(const char* arg0) {
|
||||
const pid_t pid = fork();
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#elif defined(YUZU_UNIX)
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
|
@ -19,6 +19,6 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan, bool perform_vulka
|
|||
|
||||
#ifdef _WIN32
|
||||
bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi, int flags);
|
||||
#elif defined(YUZU_UNIX)
|
||||
#else
|
||||
pid_t SpawnChild(const char* arg0);
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -24,11 +21,13 @@ void LimitableInputDialog::CreateUI() {
|
|||
text_label_invalid = new QLabel(this);
|
||||
buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
|
||||
|
||||
auto* const layout = new QVBoxLayout(this);
|
||||
auto* const layout = new QVBoxLayout;
|
||||
layout->addWidget(text_label);
|
||||
layout->addWidget(text_entry);
|
||||
layout->addWidget(text_label_invalid);
|
||||
layout->addWidget(buttons);
|
||||
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
void LimitableInputDialog::ConnectEvents() {
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
SUM=`wget -q https://github.com/$1/archive/$2.zip -O - | sha512sum`
|
||||
echo "$SUM" | cut -d " " -f1
|
||||
for i in $@; do
|
||||
SUM=`wget -q $i -O - | sha512sum`
|
||||
echo "$i"
|
||||
echo "URL_HASH SHA512=$SUM" | cut -d " " -f1-2
|
||||
done
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue