mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	qt: Add support for building for iOS. (#6594)
This commit is contained in:
		
							parent
							
								
									d9bf4fd8a2
								
							
						
					
					
						commit
						238a574645
					
				
					 17 changed files with 277 additions and 122 deletions
				
			
		|  | @ -15,24 +15,35 @@ project(citra LANGUAGES C CXX ASM) | ||||||
| 
 | 
 | ||||||
| if (APPLE) | if (APPLE) | ||||||
|     enable_language(OBJC) |     enable_language(OBJC) | ||||||
|  |     if (IOS) | ||||||
|  |         # Enable searching CMAKE_PREFIX_PATH for bundled dependencies. | ||||||
|  |         set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) | ||||||
|  |         set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) | ||||||
|  |         set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) | ||||||
|  |     endif() | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| option(ENABLE_LTO "Enable link time optimization" OFF) | option(ENABLE_LTO "Enable link time optimization" OFF) | ||||||
| 
 | 
 | ||||||
| option(ENABLE_SDL2 "Enable the SDL2 frontend" ON) | option(ENABLE_SDL2 "Enable using SDL2" ON) | ||||||
|  | CMAKE_DEPENDENT_OPTION(ENABLE_SDL2_FRONTEND "Enable the SDL2 frontend" ON "ENABLE_SDL2;NOT ANDROID AND NOT IOS" OFF) | ||||||
| option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF) | option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF) | ||||||
| 
 | 
 | ||||||
| # Set bundled qt as dependent options. | # Set bundled qt as dependent options. | ||||||
| option(ENABLE_QT "Enable the Qt frontend" ON) | option(ENABLE_QT "Enable the Qt frontend" ON) | ||||||
| option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF) | option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF) | ||||||
|  | CMAKE_DEPENDENT_OPTION(ENABLE_QT_UPDATER "Enable built-in updater for the Qt frontend" ON "NOT IOS" OFF) | ||||||
| CMAKE_DEPENDENT_OPTION(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" ON "ENABLE_QT;MSVC OR APPLE" OFF) | CMAKE_DEPENDENT_OPTION(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" ON "ENABLE_QT;MSVC OR APPLE" OFF) | ||||||
| 
 | 
 | ||||||
|  | CMAKE_DEPENDENT_OPTION(ENABLE_TESTS "Enable generating tests executable" ON "NOT IOS" OFF) | ||||||
|  | CMAKE_DEPENDENT_OPTION(ENABLE_DEDICATED_ROOM "Enable generating dedicated room executable" ON "NOT ANDROID AND NOT IOS" OFF) | ||||||
|  | 
 | ||||||
| option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) | option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) | ||||||
| if (MSVC) | if (MSVC) | ||||||
|     set(OPENSSL_DLL_DIR "" CACHE PATH "Location of the Openssl dlls") |     set(OPENSSL_DLL_DIR "" CACHE PATH "Location of the Openssl dlls") | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| option(ENABLE_CUBEB "Enables the cubeb audio backend" ON) | CMAKE_DEPENDENT_OPTION(ENABLE_CUBEB "Enables the cubeb audio backend" ON "NOT IOS" OFF) | ||||||
| option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON) | option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON) | ||||||
| 
 | 
 | ||||||
| CMAKE_DEPENDENT_OPTION(ENABLE_LIBUSB "Enable libusb for GameCube Adapter support" ON "NOT IOS" OFF) | CMAKE_DEPENDENT_OPTION(ENABLE_LIBUSB "Enable libusb for GameCube Adapter support" ON "NOT IOS" OFF) | ||||||
|  | @ -205,8 +216,7 @@ find_package(Threads REQUIRED) | ||||||
| 
 | 
 | ||||||
| if (ENABLE_QT) | if (ENABLE_QT) | ||||||
|     if (CITRA_USE_BUNDLED_QT) |     if (CITRA_USE_BUNDLED_QT) | ||||||
|         download_qt_external(6.5.0 QT_PREFIX) |         download_qt_external(6.5.0) | ||||||
|         list(APPEND CMAKE_PREFIX_PATH ${QT_PREFIX}) |  | ||||||
|     endif() |     endif() | ||||||
| 
 | 
 | ||||||
|     find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia Concurrent) |     find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia Concurrent) | ||||||
|  | @ -290,10 +300,14 @@ if (APPLE) | ||||||
|     find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED) |     find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED) | ||||||
|     message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.") |     message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.") | ||||||
| 
 | 
 | ||||||
|     # Umbrella framework for everything GUI-related |     if (NOT IOS) | ||||||
|     find_library(COCOA_LIBRARY Cocoa REQUIRED) |         # Umbrella framework for everything GUI-related | ||||||
|  |         find_library(COCOA_LIBRARY Cocoa REQUIRED) | ||||||
|  |     endif() | ||||||
|  | 
 | ||||||
|     find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED) |     find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED) | ||||||
|     set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${MOLTENVK_LIBRARY}) |     find_library(IOSURFACE_LIBRARY IOSurface REQUIRED) | ||||||
|  |     set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY} ${MOLTENVK_LIBRARY}) | ||||||
| elseif (WIN32) | elseif (WIN32) | ||||||
|     set(PLATFORM_LIBRARIES winmm ws2_32) |     set(PLATFORM_LIBRARIES winmm ws2_32) | ||||||
|     if (MINGW) |     if (MINGW) | ||||||
|  |  | ||||||
|  | @ -36,10 +36,11 @@ endfunction() | ||||||
| # Params: | # Params: | ||||||
| #   target: Qt dependency to install. Specify a version number to download Qt, or "tools_(name)" for a specific build tool. | #   target: Qt dependency to install. Specify a version number to download Qt, or "tools_(name)" for a specific build tool. | ||||||
| #   prefix_var: Name of a variable which will be set with the path to the extracted contents. | #   prefix_var: Name of a variable which will be set with the path to the extracted contents. | ||||||
| function(download_qt_external target prefix_var) | function(download_qt_external target) | ||||||
|     # Determine installation parameters for OS, architecture, and compiler |     # Determine installation parameters for OS, architecture, and compiler | ||||||
|     if (WIN32) |     if (WIN32) | ||||||
|         set(host "windows") |         set(host "windows") | ||||||
|  |         set(type "desktop") | ||||||
|         if (MINGW) |         if (MINGW) | ||||||
|             set(arch_path "mingw81") |             set(arch_path "mingw81") | ||||||
|         elseif ((MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1940) AND "x86_64" IN_LIST ARCHITECTURE) |         elseif ((MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1940) AND "x86_64" IN_LIST ARCHITECTURE) | ||||||
|  | @ -56,10 +57,19 @@ function(download_qt_external target prefix_var) | ||||||
|         set(arch "win64_${arch_path}") |         set(arch "win64_${arch_path}") | ||||||
|     elseif (APPLE) |     elseif (APPLE) | ||||||
|         set(host "mac") |         set(host "mac") | ||||||
|         set(arch "clang_64") |         if (IOS) | ||||||
|         set(arch_path "macos") |             set(type "ios") | ||||||
|  |             set(arch "ios") | ||||||
|  |             set(arch_path "ios") | ||||||
|  |             set(host_arch_path "macos") | ||||||
|  |         else() | ||||||
|  |             set(type "desktop") | ||||||
|  |             set(arch "clang_64") | ||||||
|  |             set(arch_path "macos") | ||||||
|  |         endif() | ||||||
|     else() |     else() | ||||||
|         set(host "linux") |         set(host "linux") | ||||||
|  |         set(type "desktop") | ||||||
|         set(arch "gcc_64") |         set(arch "gcc_64") | ||||||
|         set(arch_path "linux") |         set(arch_path "linux") | ||||||
|     endif() |     endif() | ||||||
|  | @ -72,7 +82,11 @@ function(download_qt_external target prefix_var) | ||||||
|         set(install_args install-tool --outputdir ${base_path} ${host} desktop ${target}) |         set(install_args install-tool --outputdir ${base_path} ${host} desktop ${target}) | ||||||
|     else() |     else() | ||||||
|         set(prefix "${base_path}/${target}/${arch_path}") |         set(prefix "${base_path}/${target}/${arch_path}") | ||||||
|         set(install_args install-qt --outputdir ${base_path} ${host} desktop ${target} ${arch} -m qtmultimedia) |         if (host_arch_path) | ||||||
|  |             set(host_flag "--autodesktop") | ||||||
|  |             set(host_prefix "${base_path}/${target}/${host_arch_path}") | ||||||
|  |         endif() | ||||||
|  |         set(install_args install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch} ${host_flag} -m qtmultimedia) | ||||||
|     endif() |     endif() | ||||||
| 
 | 
 | ||||||
|     if (NOT EXISTS "${prefix}") |     if (NOT EXISTS "${prefix}") | ||||||
|  | @ -97,7 +111,15 @@ function(download_qt_external target prefix_var) | ||||||
|     endif() |     endif() | ||||||
| 
 | 
 | ||||||
|     message(STATUS "Using downloaded Qt binaries at ${prefix}") |     message(STATUS "Using downloaded Qt binaries at ${prefix}") | ||||||
|     set(${prefix_var} "${prefix}" PARENT_SCOPE) | 
 | ||||||
|  |     # Add the Qt prefix path so CMake can locate it. | ||||||
|  |     list(APPEND CMAKE_PREFIX_PATH "${prefix}") | ||||||
|  |     set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) | ||||||
|  | 
 | ||||||
|  |     if (DEFINED host_prefix) | ||||||
|  |         message(STATUS "Using downloaded host Qt binaries at ${host_prefix}") | ||||||
|  |         set(QT_HOST_PATH "${host_prefix}" CACHE STRING "") | ||||||
|  |     endif() | ||||||
| endfunction() | endfunction() | ||||||
| 
 | 
 | ||||||
| function(download_moltenvk) | function(download_moltenvk) | ||||||
|  |  | ||||||
							
								
								
									
										54
									
								
								CMakeModules/GenerateBuildInfo.cmake
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								CMakeModules/GenerateBuildInfo.cmake
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | ||||||
|  | # Gets a UTC timstamp and sets the provided variable to it | ||||||
|  | function(get_timestamp _var) | ||||||
|  |     string(TIMESTAMP timestamp UTC) | ||||||
|  |     set(${_var} "${timestamp}" PARENT_SCOPE) | ||||||
|  | endfunction() | ||||||
|  | 
 | ||||||
|  | list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/externals/cmake-modules") | ||||||
|  | 
 | ||||||
|  | # Find the package here with the known path so that the GetGit commands can find it as well | ||||||
|  | find_package(Git QUIET PATHS "${GIT_EXECUTABLE}") | ||||||
|  | 
 | ||||||
|  | # generate git/build information | ||||||
|  | include(GetGitRevisionDescription) | ||||||
|  | get_git_head_revision(GIT_REF_SPEC GIT_REV) | ||||||
|  | string(SUBSTRING "${GIT_REV}" 0 7 GIT_SHORT_REV) | ||||||
|  | git_describe(GIT_DESC --always --long --dirty) | ||||||
|  | git_branch_name(GIT_BRANCH) | ||||||
|  | get_timestamp(BUILD_DATE) | ||||||
|  | 
 | ||||||
|  | # Generate cpp with Git revision from template | ||||||
|  | # Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well | ||||||
|  | set(REPO_NAME "") | ||||||
|  | set(BUILD_VERSION "0") | ||||||
|  | set(BUILD_FULLNAME "${GIT_SHORT_REV}") | ||||||
|  | if (DEFINED ENV{CI}) | ||||||
|  |     if (DEFINED ENV{GITHUB_ACTIONS}) | ||||||
|  |         set(BUILD_REPOSITORY $ENV{GITHUB_REPOSITORY}) | ||||||
|  |         set(BUILD_TAG $ENV{GITHUB_REF_NAME}) | ||||||
|  |     endif() | ||||||
|  | 
 | ||||||
|  |     # regex capture the string nightly or canary into CMAKE_MATCH_1 | ||||||
|  |     string(REGEX MATCH "citra-emu/citra-?(.*)" OUTVAR ${BUILD_REPOSITORY}) | ||||||
|  |     if ("${CMAKE_MATCH_COUNT}" GREATER 0) | ||||||
|  |         # capitalize the first letter of each word in the repo name. | ||||||
|  |         string(REPLACE "-" ";" REPO_NAME_LIST ${CMAKE_MATCH_1}) | ||||||
|  |         foreach(WORD ${REPO_NAME_LIST}) | ||||||
|  |             string(SUBSTRING ${WORD} 0 1 FIRST_LETTER) | ||||||
|  |             string(SUBSTRING ${WORD} 1 -1 REMAINDER) | ||||||
|  |             string(TOUPPER ${FIRST_LETTER} FIRST_LETTER) | ||||||
|  |             set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER}") | ||||||
|  |         endforeach() | ||||||
|  |         string(REGEX MATCH "${CMAKE_MATCH_1}-([0-9]+)" OUTVAR ${BUILD_TAG}) | ||||||
|  |         if (${CMAKE_MATCH_COUNT} GREATER 0) | ||||||
|  |             set(BUILD_VERSION ${CMAKE_MATCH_1}) | ||||||
|  |         endif() | ||||||
|  |         if (BUILD_VERSION) | ||||||
|  |             # This leaves a trailing space on the last word, but we actually want that | ||||||
|  |             # because of how it's styled in the title bar. | ||||||
|  |             set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ") | ||||||
|  |         else() | ||||||
|  |             set(BUILD_FULLNAME "") | ||||||
|  |         endif() | ||||||
|  |     endif() | ||||||
|  | endif() | ||||||
|  | @ -1,55 +1,5 @@ | ||||||
| # Gets a UTC timstamp and sets the provided variable to it | list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/CMakeModules") | ||||||
| function(get_timestamp _var) | include(GenerateBuildInfo) | ||||||
|     string(TIMESTAMP timestamp UTC) |  | ||||||
|     set(${_var} "${timestamp}" PARENT_SCOPE) |  | ||||||
| endfunction() |  | ||||||
| 
 |  | ||||||
| list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/externals/cmake-modules") |  | ||||||
| 
 |  | ||||||
| # Find the package here with the known path so that the GetGit commands can find it as well |  | ||||||
| find_package(Git QUIET PATHS "${GIT_EXECUTABLE}") |  | ||||||
| 
 |  | ||||||
| # generate git/build information |  | ||||||
| include(GetGitRevisionDescription) |  | ||||||
| get_git_head_revision(GIT_REF_SPEC GIT_REV) |  | ||||||
| git_describe(GIT_DESC --always --long --dirty) |  | ||||||
| git_branch_name(GIT_BRANCH) |  | ||||||
| get_timestamp(BUILD_DATE) |  | ||||||
| 
 |  | ||||||
| # Generate cpp with Git revision from template |  | ||||||
| # Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well |  | ||||||
| set(REPO_NAME "") |  | ||||||
| set(BUILD_VERSION "0") |  | ||||||
| if (DEFINED ENV{CI}) |  | ||||||
|   if (DEFINED ENV{GITHUB_ACTIONS}) |  | ||||||
|     set(BUILD_REPOSITORY $ENV{GITHUB_REPOSITORY}) |  | ||||||
|     set(BUILD_TAG $ENV{GITHUB_REF_NAME}) |  | ||||||
|   endif() |  | ||||||
| 
 |  | ||||||
|   # regex capture the string nightly or canary into CMAKE_MATCH_1 |  | ||||||
|   string(REGEX MATCH "citra-emu/citra-?(.*)" OUTVAR ${BUILD_REPOSITORY}) |  | ||||||
|   if ("${CMAKE_MATCH_COUNT}" GREATER 0) |  | ||||||
|     # capitalize the first letter of each word in the repo name. |  | ||||||
|     string(REPLACE "-" ";" REPO_NAME_LIST ${CMAKE_MATCH_1}) |  | ||||||
|     foreach(WORD ${REPO_NAME_LIST}) |  | ||||||
|       string(SUBSTRING ${WORD} 0 1 FIRST_LETTER) |  | ||||||
|       string(SUBSTRING ${WORD} 1 -1 REMAINDER) |  | ||||||
|       string(TOUPPER ${FIRST_LETTER} FIRST_LETTER) |  | ||||||
|       set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER}") |  | ||||||
|     endforeach() |  | ||||||
|     string(REGEX MATCH "${CMAKE_MATCH_1}-([0-9]+)" OUTVAR ${BUILD_TAG}) |  | ||||||
|     if (${CMAKE_MATCH_COUNT} GREATER 0) |  | ||||||
|       set(BUILD_VERSION ${CMAKE_MATCH_1}) |  | ||||||
|     endif() |  | ||||||
|     if (BUILD_VERSION) |  | ||||||
|       # This leaves a trailing space on the last word, but we actually want that |  | ||||||
|       # because of how it's styled in the title bar. |  | ||||||
|       set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ") |  | ||||||
|     else() |  | ||||||
|       set(BUILD_FULLNAME "") |  | ||||||
|     endif() |  | ||||||
|   endif() |  | ||||||
| endif() |  | ||||||
| 
 | 
 | ||||||
| # The variable SRC_DIR must be passed into the script (since it uses the current build directory for all values of CMAKE_*_DIR) | # The variable SRC_DIR must be passed into the script (since it uses the current build directory for all values of CMAKE_*_DIR) | ||||||
| set(VIDEO_CORE "${SRC_DIR}/src/video_core") | set(VIDEO_CORE "${SRC_DIR}/src/video_core") | ||||||
|  |  | ||||||
|  | @ -2,45 +2,49 @@ | ||||||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||||
| <plist version="1.0"> | <plist version="1.0"> | ||||||
| <dict> | <dict> | ||||||
|     <key>CFBundleDevelopmentRegion</key> |     <!-- Templated data --> | ||||||
|     <string>English</string> |  | ||||||
|     <key>CFBundleExecutable</key> |  | ||||||
|     <string>${EXECUTABLE_NAME}</string> |  | ||||||
|     <key>CFBundleGetInfoString</key> |  | ||||||
|     <string></string> |  | ||||||
|     <key>CFBundleIconFile</key> |  | ||||||
|     <string>citra.icns</string> |  | ||||||
|     <key>CFBundleIdentifier</key> |  | ||||||
|     <string>com.citra-emu.citra</string> |  | ||||||
|     <key>CFBundleInfoDictionaryVersion</key> |  | ||||||
|     <string>6.0</string> |  | ||||||
|     <key>CFBundleLongVersionString</key> |  | ||||||
|     <string></string> |  | ||||||
|     <key>CFBundleName</key> |     <key>CFBundleName</key> | ||||||
|     <string>Citra</string> |     <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string> | ||||||
|     <key>CFBundlePackageType</key> |     <key>CFBundleIdentifier</key> | ||||||
|     <string>APPL</string> |     <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string> | ||||||
|     <key>CFBundleShortVersionString</key> |  | ||||||
|     <string></string> |  | ||||||
|     <key>CFBundleSignature</key> |  | ||||||
|     <string>????</string> |  | ||||||
|     <key>CFBundleVersion</key> |     <key>CFBundleVersion</key> | ||||||
|     <string></string> |     <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string> | ||||||
|     <key>CSResourcesFileMapped</key> |     <key>CFBundleShortVersionString</key> | ||||||
|     <true/> |     <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string> | ||||||
|     <key>LSRequiresCarbon</key> |     <key>CFBundleLongVersionString</key> | ||||||
|     <true/> |     <string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string> | ||||||
|  |     <key>CFBundleExecutable</key> | ||||||
|  |     <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string> | ||||||
|  |     <key>CFBundleIconFile</key> | ||||||
|  |     <string>${MACOSX_BUNDLE_ICON_FILE}</string> | ||||||
|  |     <key>CFBundleGetInfoString</key> | ||||||
|  |     <string>${MACOSX_BUNDLE_INFO_STRING}</string> | ||||||
|     <key>NSHumanReadableCopyright</key> |     <key>NSHumanReadableCopyright</key> | ||||||
|     <string></string> |     <string>${MACOSX_BUNDLE_COPYRIGHT}</string> | ||||||
|     <key>NSPrincipalClass</key> |     <!-- Fixed --> | ||||||
|     <string>NSApplication</string> |     <key>LSApplicationCategoryType</key> | ||||||
|     <key>NSHighResolutionCapable</key> |     <string>public.app-category.games</string> | ||||||
|     <string>True</string> |  | ||||||
|     <key>NSCameraUsageDescription</key> |     <key>NSCameraUsageDescription</key> | ||||||
|     <string>This app requires camera access to emulate the 3DS's cameras.</string> |     <string>This app requires camera access to emulate the 3DS's cameras.</string> | ||||||
|     <key>NSMicrophoneUsageDescription</key> |     <key>NSMicrophoneUsageDescription</key> | ||||||
|     <string>This app requires microphone access to emulate the 3DS's microphone.</string> |     <string>This app requires microphone access to emulate the 3DS's microphone.</string> | ||||||
|     <key>LSApplicationCategoryType</key> |     <key>CFBundleInfoDictionaryVersion</key> | ||||||
|     <string>public.app-category.games</string> |     <string>6.0</string> | ||||||
|  |     <key>CFBundlePackageType</key> | ||||||
|  |     <string>APPL</string> | ||||||
|  |     <key>CFBundleDevelopmentRegion</key> | ||||||
|  |     <string>English</string> | ||||||
|  |     <key>CFBundleSignature</key> | ||||||
|  |     <string>????</string> | ||||||
|  |     <key>CSResourcesFileMapped</key> | ||||||
|  |     <true/> | ||||||
|  |     <key>LSSupportsOpeningDocumentsInPlace</key> | ||||||
|  |     <true/> | ||||||
|  |     <key>NSHighResolutionCapable</key> | ||||||
|  |     <string>True</string> | ||||||
|  |     <key>UIFileSharingEnabled</key> | ||||||
|  |     <true/> | ||||||
|  |     <key>UILaunchStoryboardName</key> | ||||||
|  |     <string>LaunchScreen</string> | ||||||
| </dict> | </dict> | ||||||
| </plist> | </plist> | ||||||
							
								
								
									
										42
									
								
								dist/apple/LaunchScreen.storyboard
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								dist/apple/LaunchScreen.storyboard
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="Y6W-OH-hqX"> | ||||||
|  |     <dependencies> | ||||||
|  |         <deployment identifier="iOS"/> | ||||||
|  |         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/> | ||||||
|  |     </dependencies> | ||||||
|  |     <scenes> | ||||||
|  |         <!--View Controller--> | ||||||
|  |         <scene sceneID="s0d-6b-0kx"> | ||||||
|  |             <objects> | ||||||
|  |                 <viewController id="Y6W-OH-hqX" sceneMemberID="viewController"> | ||||||
|  |                     <view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc"> | ||||||
|  |                         <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> | ||||||
|  |                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||||||
|  |                         <subviews> | ||||||
|  |                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch_logo.png" translatesAutoresizingMaskIntoConstraints="NO" id="yrZ-hu-Uge"> | ||||||
|  |                                 <rect key="frame" x="-59.666666666666657" y="306" width="512.33333333333337" height="240"/> | ||||||
|  |                                 <constraints> | ||||||
|  |                                     <constraint firstAttribute="height" constant="240" id="VhL-hA-Bwr"/> | ||||||
|  |                                 </constraints> | ||||||
|  |                             </imageView> | ||||||
|  |                         </subviews> | ||||||
|  |                         <viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/> | ||||||
|  |                         <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||||||
|  |                         <constraints> | ||||||
|  |                             <constraint firstItem="yrZ-hu-Uge" firstAttribute="centerX" secondItem="5EZ-qb-Rvc" secondAttribute="centerX" id="1y3-Mx-a65"/> | ||||||
|  |                             <constraint firstItem="yrZ-hu-Uge" firstAttribute="centerY" secondItem="5EZ-qb-Rvc" secondAttribute="centerY" id="vNO-xV-EPD"/> | ||||||
|  |                         </constraints> | ||||||
|  |                     </view> | ||||||
|  |                 </viewController> | ||||||
|  |                 <placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> | ||||||
|  |             </objects> | ||||||
|  |             <point key="canvasLocation" x="219" y="18"/> | ||||||
|  |         </scene> | ||||||
|  |     </scenes> | ||||||
|  |     <resources> | ||||||
|  |         <image name="launch_logo.png" width="512" height="512"/> | ||||||
|  |         <systemColor name="systemBackgroundColor"> | ||||||
|  |             <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||||||
|  |         </systemColor> | ||||||
|  |     </resources> | ||||||
|  | </document> | ||||||
							
								
								
									
										0
									
								
								dist/citra.icns → dist/apple/citra.icns
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										0
									
								
								dist/citra.icns → dist/apple/citra.icns
									
										
									
									
										vendored
									
									
								
							
							
								
								
									
										
											BIN
										
									
								
								dist/apple/launch_logo.png
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dist/apple/launch_logo.png
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 88 KiB | 
							
								
								
									
										1
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							|  | @ -148,6 +148,7 @@ target_include_directories(enet INTERFACE ./enet/include) | ||||||
| # Cubeb | # Cubeb | ||||||
| if (ENABLE_CUBEB) | if (ENABLE_CUBEB) | ||||||
|     set(BUILD_TESTS OFF CACHE BOOL "") |     set(BUILD_TESTS OFF CACHE BOOL "") | ||||||
|  |     set(BUILD_TOOLS OFF CACHE BOOL "") | ||||||
|     add_subdirectory(cubeb EXCLUDE_FROM_ALL) |     add_subdirectory(cubeb EXCLUDE_FROM_ALL) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								externals/libressl
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								externals/libressl
									
										
									
									
										vendored
									
									
								
							|  | @ -1 +1 @@ | ||||||
| Subproject commit 8929f818fd748fd31a34fec7c04558399e13014a | Subproject commit dcf9a84aba598f827f65d946d31c3c93af62790a | ||||||
|  | @ -143,9 +143,12 @@ add_subdirectory(video_core) | ||||||
| add_subdirectory(audio_core) | add_subdirectory(audio_core) | ||||||
| add_subdirectory(network) | add_subdirectory(network) | ||||||
| add_subdirectory(input_common) | add_subdirectory(input_common) | ||||||
| add_subdirectory(tests) |  | ||||||
| 
 | 
 | ||||||
| if (ENABLE_SDL2) | if (ENABLE_TESTS) | ||||||
|  |     add_subdirectory(tests) | ||||||
|  | endif() | ||||||
|  | 
 | ||||||
|  | if (ENABLE_SDL2 AND ENABLE_SDL2_FRONTEND) | ||||||
|     add_subdirectory(citra) |     add_subdirectory(citra) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  | @ -153,11 +156,13 @@ if (ENABLE_QT) | ||||||
|     add_subdirectory(citra_qt) |     add_subdirectory(citra_qt) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  | if (ENABLE_DEDICATED_ROOM) | ||||||
|  |     add_subdirectory(dedicated_room) | ||||||
|  | endif() | ||||||
|  | 
 | ||||||
| if (ANDROID) | if (ANDROID) | ||||||
|     add_subdirectory(android/app/src/main/jni) |     add_subdirectory(android/app/src/main/jni) | ||||||
|     target_include_directories(citra-android PRIVATE android/app/src/main) |     target_include_directories(citra-android PRIVATE android/app/src/main) | ||||||
| else() |  | ||||||
|     add_subdirectory(dedicated_room) |  | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| if (ENABLE_WEB_SERVICE) | if (ENABLE_WEB_SERVICE) | ||||||
|  |  | ||||||
|  | @ -8,7 +8,6 @@ if (POLICY CMP0071) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| add_executable(citra-qt | add_executable(citra-qt | ||||||
|     Info.plist |  | ||||||
|     aboutdialog.cpp |     aboutdialog.cpp | ||||||
|     aboutdialog.h |     aboutdialog.h | ||||||
|     aboutdialog.ui |     aboutdialog.ui | ||||||
|  | @ -169,9 +168,6 @@ add_executable(citra-qt | ||||||
|     uisettings.h |     uisettings.h | ||||||
|     qt_image_interface.cpp |     qt_image_interface.cpp | ||||||
|     qt_image_interface.h |     qt_image_interface.h | ||||||
|     updater/updater.cpp |  | ||||||
|     updater/updater.h |  | ||||||
|     updater/updater_p.h |  | ||||||
|     util/clickable_label.cpp |     util/clickable_label.cpp | ||||||
|     util/clickable_label.h |     util/clickable_label.h | ||||||
|     util/sequence_dialog/sequence_dialog.cpp |     util/sequence_dialog/sequence_dialog.cpp | ||||||
|  | @ -202,6 +198,15 @@ file(GLOB COMPAT_LIST | ||||||
| file(GLOB_RECURSE ICONS ${PROJECT_SOURCE_DIR}/dist/icons/*) | file(GLOB_RECURSE ICONS ${PROJECT_SOURCE_DIR}/dist/icons/*) | ||||||
| file(GLOB_RECURSE THEMES ${PROJECT_SOURCE_DIR}/dist/qt_themes/*) | file(GLOB_RECURSE THEMES ${PROJECT_SOURCE_DIR}/dist/qt_themes/*) | ||||||
| 
 | 
 | ||||||
|  | if (ENABLE_QT_UPDATER) | ||||||
|  |     target_sources(citra-qt PRIVATE | ||||||
|  |         updater/updater.cpp | ||||||
|  |         updater/updater.h | ||||||
|  |         updater/updater_p.h | ||||||
|  |     ) | ||||||
|  |     target_compile_definitions(citra-qt PUBLIC ENABLE_QT_UPDATER) | ||||||
|  | endif() | ||||||
|  | 
 | ||||||
| if (ENABLE_QT_TRANSLATION) | if (ENABLE_QT_TRANSLATION) | ||||||
|     set(CITRA_QT_LANGUAGES "${PROJECT_SOURCE_DIR}/dist/languages" CACHE PATH "Path to the translation bundle for the Qt frontend") |     set(CITRA_QT_LANGUAGES "${PROJECT_SOURCE_DIR}/dist/languages" CACHE PATH "Path to the translation bundle for the Qt frontend") | ||||||
|     option(GENERATE_QT_TRANSLATION "Generate en.ts as the translation source file" OFF) |     option(GENERATE_QT_TRANSLATION "Generate en.ts as the translation source file" OFF) | ||||||
|  | @ -248,17 +253,43 @@ target_sources(citra-qt | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| if (APPLE) | if (APPLE) | ||||||
|     set(MACOSX_ICON "../../dist/citra.icns") |     set(DIST_DIR "../../dist/apple") | ||||||
|     set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) |     set(APPLE_RESOURCES | ||||||
|  |         "${DIST_DIR}/citra.icns" | ||||||
|  |         "${DIST_DIR}/LaunchScreen.storyboard" | ||||||
|  |         "${DIST_DIR}/launch_logo.png" | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|     target_sources(citra-qt PRIVATE |     target_sources(citra-qt PRIVATE | ||||||
|         ${MACOSX_ICON} |         ${APPLE_RESOURCES} | ||||||
|         macos_authorization.h |         macos_authorization.h | ||||||
|         macos_authorization.mm |         macos_authorization.mm | ||||||
|     ) |     ) | ||||||
|  | 
 | ||||||
|  |     # Define app bundle metadata. | ||||||
|  |     include(GenerateBuildInfo) | ||||||
|     set_target_properties(citra-qt PROPERTIES |     set_target_properties(citra-qt PROPERTIES | ||||||
|         MACOSX_BUNDLE TRUE |         MACOSX_BUNDLE TRUE | ||||||
|         MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist |         MACOSX_BUNDLE_INFO_PLIST "${DIST_DIR}/Info.plist.in" | ||||||
|  |         MACOSX_BUNDLE_BUNDLE_NAME "Citra" | ||||||
|  |         MACOSX_BUNDLE_GUI_IDENTIFIER "com.citra-emu.citra" | ||||||
|  |         MACOSX_BUNDLE_BUNDLE_VERSION "${BUILD_VERSION}" | ||||||
|  |         MACOSX_BUNDLE_SHORT_VERSION_STRING "${BUILD_FULLNAME}" | ||||||
|  |         MACOSX_BUNDLE_LONG_VERSION_STRING "${BUILD_FULLNAME}" | ||||||
|  |         MACOSX_BUNDLE_ICON_FILE "citra.icns" | ||||||
|  |         RESOURCE "${APPLE_RESOURCES}" | ||||||
|     ) |     ) | ||||||
|  | 
 | ||||||
|  |     if (IOS) | ||||||
|  |         set_target_properties(citra-qt PROPERTIES | ||||||
|  |             # Have Xcode copy and sign MoltenVK into app bundle. | ||||||
|  |             XCODE_EMBED_FRAMEWORKS "${MOLTENVK_LIBRARY}" | ||||||
|  |             XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY YES | ||||||
|  |             XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks" | ||||||
|  |             # Support iPhone and iPad. | ||||||
|  |             XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" | ||||||
|  |         ) | ||||||
|  |     endif() | ||||||
| elseif(WIN32) | elseif(WIN32) | ||||||
|     # compile as a win32 gui application instead of a console application |     # compile as a win32 gui application instead of a console application | ||||||
|     target_link_libraries(citra-qt PRIVATE Qt6::EntryPointImplementation) |     target_link_libraries(citra-qt PRIVATE Qt6::EntryPointImplementation) | ||||||
|  |  | ||||||
|  | @ -364,7 +364,7 @@ static Frontend::WindowSystemType GetWindowSystemType() { | ||||||
|         return Frontend::WindowSystemType::X11; |         return Frontend::WindowSystemType::X11; | ||||||
|     else if (platform_name == QStringLiteral("wayland")) |     else if (platform_name == QStringLiteral("wayland")) | ||||||
|         return Frontend::WindowSystemType::Wayland; |         return Frontend::WindowSystemType::Wayland; | ||||||
|     else if (platform_name == QStringLiteral("cocoa")) |     else if (platform_name == QStringLiteral("cocoa") || platform_name == QStringLiteral("ios")) | ||||||
|         return Frontend::WindowSystemType::MacOS; |         return Frontend::WindowSystemType::MacOS; | ||||||
| 
 | 
 | ||||||
|     LOG_CRITICAL(Frontend, "Unknown Qt platform!"); |     LOG_CRITICAL(Frontend, "Unknown Qt platform!"); | ||||||
|  |  | ||||||
|  | @ -223,7 +223,12 @@ GMainWindow::GMainWindow(Core::System& system_) | ||||||
|     InitializeRecentFileMenuActions(); |     InitializeRecentFileMenuActions(); | ||||||
|     InitializeSaveStateMenuActions(); |     InitializeSaveStateMenuActions(); | ||||||
|     InitializeHotkeys(); |     InitializeHotkeys(); | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
|     ShowUpdaterWidgets(); |     ShowUpdaterWidgets(); | ||||||
|  | #else | ||||||
|  |     ui->action_Check_For_Updates->setVisible(false); | ||||||
|  |     ui->action_Open_Maintenance_Tool->setVisible(false); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|     SetDefaultUIGeometry(); |     SetDefaultUIGeometry(); | ||||||
|     RestoreUIState(); |     RestoreUIState(); | ||||||
|  | @ -268,9 +273,11 @@ GMainWindow::GMainWindow(Core::System& system_) | ||||||
|     connect(&mouse_hide_timer, &QTimer::timeout, this, &GMainWindow::HideMouseCursor); |     connect(&mouse_hide_timer, &QTimer::timeout, this, &GMainWindow::HideMouseCursor); | ||||||
|     connect(ui->menubar, &QMenuBar::hovered, this, &GMainWindow::OnMouseActivity); |     connect(ui->menubar, &QMenuBar::hovered, this, &GMainWindow::OnMouseActivity); | ||||||
| 
 | 
 | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
|     if (UISettings::values.check_for_update_on_start) { |     if (UISettings::values.check_for_update_on_start) { | ||||||
|         CheckForUpdates(); |         CheckForUpdates(); | ||||||
|     } |     } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|     QStringList args = QApplication::arguments(); |     QStringList args = QApplication::arguments(); | ||||||
|     if (args.length() >= 2) { |     if (args.length() >= 2) { | ||||||
|  | @ -322,9 +329,11 @@ void GMainWindow::InitializeWidgets() { | ||||||
|                                              ui->action_Show_Room); |                                              ui->action_Show_Room); | ||||||
|     multiplayer_state->setVisible(false); |     multiplayer_state->setVisible(false); | ||||||
| 
 | 
 | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
|     // Setup updater
 |     // Setup updater
 | ||||||
|     updater = new Updater(this); |     updater = new Updater(this); | ||||||
|     UISettings::values.updater_found = updater->HasUpdater(); |     UISettings::values.updater_found = updater->HasUpdater(); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|     UpdateBootHomeMenuState(); |     UpdateBootHomeMenuState(); | ||||||
| 
 | 
 | ||||||
|  | @ -655,13 +664,6 @@ void GMainWindow::InitializeHotkeys() { | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GMainWindow::ShowUpdaterWidgets() { |  | ||||||
|     ui->action_Check_For_Updates->setVisible(UISettings::values.updater_found); |  | ||||||
|     ui->action_Open_Maintenance_Tool->setVisible(UISettings::values.updater_found); |  | ||||||
| 
 |  | ||||||
|     connect(updater, &Updater::CheckUpdatesDone, this, &GMainWindow::OnUpdateFound); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void GMainWindow::SetDefaultUIGeometry() { | void GMainWindow::SetDefaultUIGeometry() { | ||||||
|     // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half
 |     // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half
 | ||||||
|     const QRect screenRect = screen()->geometry(); |     const QRect screenRect = screen()->geometry(); | ||||||
|  | @ -851,8 +853,11 @@ void GMainWindow::ConnectMenuEvents() { | ||||||
|         QDesktopServices::openUrl(QUrl(QStringLiteral("https://citra-emu.org/wiki/faq/"))); |         QDesktopServices::openUrl(QUrl(QStringLiteral("https://citra-emu.org/wiki/faq/"))); | ||||||
|     }); |     }); | ||||||
|     connect_menu(ui->action_About, &GMainWindow::OnMenuAboutCitra); |     connect_menu(ui->action_About, &GMainWindow::OnMenuAboutCitra); | ||||||
|  | 
 | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
|     connect_menu(ui->action_Check_For_Updates, &GMainWindow::OnCheckForUpdates); |     connect_menu(ui->action_Check_For_Updates, &GMainWindow::OnCheckForUpdates); | ||||||
|     connect_menu(ui->action_Open_Maintenance_Tool, &GMainWindow::OnOpenUpdater); |     connect_menu(ui->action_Open_Maintenance_Tool, &GMainWindow::OnOpenUpdater); | ||||||
|  | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GMainWindow::UpdateMenuState() { | void GMainWindow::UpdateMenuState() { | ||||||
|  | @ -904,6 +909,7 @@ void GMainWindow::OnDisplayTitleBars(bool show) { | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
| void GMainWindow::OnCheckForUpdates() { | void GMainWindow::OnCheckForUpdates() { | ||||||
|     explicit_update_check = true; |     explicit_update_check = true; | ||||||
|     CheckForUpdates(); |     CheckForUpdates(); | ||||||
|  | @ -970,6 +976,14 @@ void GMainWindow::OnOpenUpdater() { | ||||||
|     updater->LaunchUI(); |     updater->LaunchUI(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void GMainWindow::ShowUpdaterWidgets() { | ||||||
|  |     ui->action_Check_For_Updates->setVisible(UISettings::values.updater_found); | ||||||
|  |     ui->action_Open_Maintenance_Tool->setVisible(UISettings::values.updater_found); | ||||||
|  | 
 | ||||||
|  |     connect(updater, &Updater::CheckUpdatesDone, this, &GMainWindow::OnUpdateFound); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #if defined(__unix__) && !defined(__APPLE__) | #if defined(__unix__) && !defined(__APPLE__) | ||||||
| static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) { | static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) { | ||||||
|     if (!QDBusConnection::sessionBus().isConnected()) { |     if (!QDBusConnection::sessionBus().isConnected()) { | ||||||
|  | @ -1327,9 +1341,11 @@ void GMainWindow::ShutdownGame() { | ||||||
| 
 | 
 | ||||||
|     emulation_running = false; |     emulation_running = false; | ||||||
| 
 | 
 | ||||||
|  | #if ENABLE_QT_UDPATER | ||||||
|     if (defer_update_prompt) { |     if (defer_update_prompt) { | ||||||
|         ShowUpdatePrompt(); |         ShowUpdatePrompt(); | ||||||
|     } |     } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|     game_title.clear(); |     game_title.clear(); | ||||||
|     UpdateWindowTitle(); |     UpdateWindowTitle(); | ||||||
|  |  | ||||||
|  | @ -46,7 +46,9 @@ class QProgressBar; | ||||||
| class QPushButton; | class QPushButton; | ||||||
| class QSlider; | class QSlider; | ||||||
| class RegistersWidget; | class RegistersWidget; | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
| class Updater; | class Updater; | ||||||
|  | #endif | ||||||
| class WaitTreeWidget; | class WaitTreeWidget; | ||||||
| 
 | 
 | ||||||
| namespace Camera { | namespace Camera { | ||||||
|  | @ -146,12 +148,15 @@ private: | ||||||
|     void ShutdownGame(); |     void ShutdownGame(); | ||||||
| 
 | 
 | ||||||
|     void ShowTelemetryCallout(); |     void ShowTelemetryCallout(); | ||||||
|  |     void SetDiscordEnabled(bool state); | ||||||
|  |     void LoadAmiibo(const QString& filename); | ||||||
|  | 
 | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
|     void ShowUpdaterWidgets(); |     void ShowUpdaterWidgets(); | ||||||
|     void ShowUpdatePrompt(); |     void ShowUpdatePrompt(); | ||||||
|     void ShowNoUpdatePrompt(); |     void ShowNoUpdatePrompt(); | ||||||
|     void CheckForUpdates(); |     void CheckForUpdates(); | ||||||
|     void SetDiscordEnabled(bool state); | #endif | ||||||
|     void LoadAmiibo(const QString& filename); |  | ||||||
| 
 | 
 | ||||||
|     /**
 |     /**
 | ||||||
|      * Stores the filename in the recently loaded files list. |      * Stores the filename in the recently loaded files list. | ||||||
|  | @ -244,9 +249,13 @@ private slots: | ||||||
|     void OnCoreError(Core::System::ResultStatus, std::string); |     void OnCoreError(Core::System::ResultStatus, std::string); | ||||||
|     /// Called whenever a user selects Help->About Citra
 |     /// Called whenever a user selects Help->About Citra
 | ||||||
|     void OnMenuAboutCitra(); |     void OnMenuAboutCitra(); | ||||||
|  | 
 | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
|     void OnUpdateFound(bool found, bool error); |     void OnUpdateFound(bool found, bool error); | ||||||
|     void OnCheckForUpdates(); |     void OnCheckForUpdates(); | ||||||
|     void OnOpenUpdater(); |     void OnOpenUpdater(); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|     void OnLanguageChanged(const QString& locale); |     void OnLanguageChanged(const QString& locale); | ||||||
|     void OnMouseActivity(); |     void OnMouseActivity(); | ||||||
| 
 | 
 | ||||||
|  | @ -326,7 +335,9 @@ private: | ||||||
|     IPCRecorderWidget* ipcRecorderWidget; |     IPCRecorderWidget* ipcRecorderWidget; | ||||||
|     LLEServiceModulesWidget* lleServiceModulesWidget; |     LLEServiceModulesWidget* lleServiceModulesWidget; | ||||||
|     WaitTreeWidget* waitTreeWidget; |     WaitTreeWidget* waitTreeWidget; | ||||||
|  | #if ENABLE_QT_UPDATER | ||||||
|     Updater* updater; |     Updater* updater; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|     bool explicit_update_check = false; |     bool explicit_update_check = false; | ||||||
|     bool defer_update_prompt = false; |     bool defer_update_prompt = false; | ||||||
|  |  | ||||||
|  | @ -21,7 +21,12 @@ | ||||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||||
| #define EMU_DATA_DIR "Citra" | #define EMU_DATA_DIR "Citra" | ||||||
| #elif defined(__APPLE__) | #elif defined(__APPLE__) | ||||||
| #define MACOS_EMU_DATA_DIR "Library" DIR_SEP "Application Support" DIR_SEP "Citra" | #include <TargetConditionals.h> | ||||||
|  | #if TARGET_OS_IPHONE | ||||||
|  | #define APPLE_EMU_DATA_DIR "Documents" DIR_SEP "Citra" | ||||||
|  | #else | ||||||
|  | #define APPLE_EMU_DATA_DIR "Library" DIR_SEP "Application Support" DIR_SEP "Citra" | ||||||
|  | #endif | ||||||
| // For compatibility with XDG paths.
 | // For compatibility with XDG paths.
 | ||||||
| #define EMU_DATA_DIR "citra-emu" | #define EMU_DATA_DIR "citra-emu" | ||||||
| #else | #else | ||||||
|  |  | ||||||
|  | @ -786,7 +786,7 @@ void SetUserPath(const std::string& path) { | ||||||
|             // paths.
 |             // paths.
 | ||||||
|             if (!FileUtil::Exists(data_dir) && !FileUtil::Exists(config_dir) && |             if (!FileUtil::Exists(data_dir) && !FileUtil::Exists(config_dir) && | ||||||
|                 !FileUtil::Exists(cache_dir)) { |                 !FileUtil::Exists(cache_dir)) { | ||||||
|                 data_dir = GetHomeDirectory() + DIR_SEP MACOS_EMU_DATA_DIR DIR_SEP; |                 data_dir = GetHomeDirectory() + DIR_SEP APPLE_EMU_DATA_DIR DIR_SEP; | ||||||
|                 config_dir = data_dir + CONFIG_DIR DIR_SEP; |                 config_dir = data_dir + CONFIG_DIR DIR_SEP; | ||||||
|                 cache_dir = data_dir + CACHE_DIR DIR_SEP; |                 cache_dir = data_dir + CACHE_DIR DIR_SEP; | ||||||
|             } |             } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue