make about dialog a bit taller for full message on more systems
for direct_connect.ui hedging bets here, there is a text field for port
number that possibly shouldn't be translated, marking as such, but also
adding a translation note for the event that it makes sense to translate
the placeholder text to something other than the default multiplayer
direct connect port.
* Controller bugfixes in profile select, closes#8265
2 fixes for using a controller in profile select dialog.
Pressing 'B' cancels the launch of the game
Using controller to select a profile now correctly sets the index to use for the launch
* Added brackets to if statements as requested.
yuzu's default theme doesn't specify everything, which is fine for
windows, but in linux anything unspecified is set to the users theme.
Symptoms of this are that a linux user with a dark theme won't think
to change the theme to a dark theme when first using yuzu
Idea here is to try and support arbitrary themes on linux.
preliminary work on a "default_dark" theme, used only as overlay
for any themes that are measured to be dark mode.
Other work done:
FreeDesktop standard icon names:
plus -> list-add
delete refresh, we use view-refresh
remove duplicated icons for qdarkstyle_midnight_blue
referencing icon aliases in the qrc files is the way to go
Note:
Dynamic style changing doesn't appear to work with AppImage
When windows is told to display Standard digits as suzhou, it is showing
incorrect information in yuzu, file sizes and the CPU speed limiter are
effected by this. See #8698 for some screenshots.
Setting number format to Chinese (Simplified, Hong Kong SAR) is one
way to see this issue in action.
Fixes#8698
Turns out that for Qt to properly handle plurals in English a
translation needs to be provided, otherwise the user is left with
messages such as "Building: 2 shader(s)"
Plurals for other all other languages are handled on transifex.
I wrote the README.md to just refer to it as a translation
collaboration site just in case we ever switch.
These translations being out of date won't pose any technical problems
so I believe it is fine to handle them manually on a "best effort"
basis.
The files are generated into the source directory so that the
relative filenames are correct. The generated file is added to
.gitignore
[REUSE] is a specification that aims at making file copyright
information consistent, so that it can be both human and machine
readable. It basically requires that all files have a header containing
copyright and licensing information. When this isn't possible, like
when dealing with binary assets, generated files or embedded third-party
dependencies, it is permitted to insert copyright information in the
`.reuse/dep5` file.
Oh, and it also requires that all the licenses used in the project are
present in the `LICENSES` folder, that's why the diff is so huge.
This can be done automatically with `reuse download --all`.
The `reuse` tool also contains a handy subcommand that analyzes the
project and tells whether or not the project is (still) compliant,
`reuse lint`.
Following REUSE has a few advantages over the current approach:
- Copyright information is easy to access for users / downstream
- Files like `dist/license.md` do not need to exist anymore, as
`.reuse/dep5` is used instead
- `reuse lint` makes it easy to ensure that copyright information of
files like binary assets / images is always accurate and up to date
To add copyright information of files that didn't have it I looked up
who committed what and when, for each file. As yuzu contributors do not
have to sign a CLA or similar I couldn't assume that copyright ownership
was of the "yuzu Emulator Project", so I used the name and/or email of
the commit author instead.
[REUSE]: https://reuse.software
Follow-up to 01cf05bc75
There was a bug where, when using the numeric keyboard, moving between buttons resulted in an infinite loop, resulting in a stuck state.
This was due to prev_button being the only one enabled in that row or column, causing the condition in the while loop to always be true.
To fix this, detect whether we have returned to that initial row/column and break out of the loop.
- Avoids new GCC 12 warnings when Type is of form std::optional<T>
- Makes more sense this way, because ranged is not a property which would change over time
Button inputs were broken as button was assumed to be the bit position of NpadButton prior to the input rewrite. Since this was changed to use NpadButton directly, we should count the number of trailing zeros to determine the bit position.
The latest git version of GCC has issues with my diamond inheritance
shenanigans. Since that's now two compilers that don't like it I thought
it'd be best to just axe all of it and just have the two templates like
before.
This rolls the features of BasicRangedSetting into BasicSetting, and
likewise RangedSetting into Setting. It also renames them from
BasicSetting and Setting to Setting and SwitchableSetting respectively.
Now longer name corresponds to more complex thing.
In testing future versions of Qt I forgot to compile with `YUZU_USE_QT_WEB_ENGINE`, so with that flag enabled there are two issues that cropped up.
1. yuzu currently uses setRequestInterceptor, added in Qt 5.6, deprecated in 5.13 with this explaination at https://doc.qt.io/qt-5/qwebengineprofile-obsolete.html
Interceptors installed with this method will call QWebEngineUrlRequestInterceptor::interceptRequest on the I/O thread. Therefore the user has to provide thread-safe interaction with the other user classes. For a duration of this call ui thread is blocked. Use setUrlRequestInterceptor instead.
2. QWebEngineSettings::globalSettings() pointer no longer exists in later versions of Qt
From what I can tell, QtNXWebEngineView doesn't need to set these globally,
when we make changes to settings(), QtWebEngineView::page() creates the page
object if it doesn't exist yet. I don't see the page object being destroyed
or otherwise replaced, except via destroying the QtNXWebEngineView object.
The globalSettings() make sense if Pages or Views objects are being
created outside of yuzu's control.
To test this I've compared what BrowseNX and Odyssey's Action guide do in mainline 1049 and this PR.
For now we're going to go up the chain to QWebEngineProfile::defaultProfile()->settings()
This is the "Double-click to add a new folder to the game list" message
that shows up when users first launch yuzu and is most likely never seen
again. Previously this message was not re-translated.
Idea works as follows, while going fullscreen we compare the current window geometry with
available screens and ask for an intersection rectangle, we go fullscreen where most of
the window is located
GuessCurrentScreen could also potentially be used to see which screen
the window is on for dynamic DPI handling
For people not used to the Yuzu UI it's not always clear if the emulated
console is docked or not. The other items update their text when clicked,
this PR brings the DOCK button in line with this.
DOCK -> DOCKED or HANDHELD
Sometimes when yuzu crashes, it restarts with the games list in fullscreen,
which would be fine, except there isn't an easy way to exit this.
It also doesn't occur often enough for qt-config.ini files to be in good supply.
UILayout\geometry value in qt-config.ini is the culprit,
at least for the one provided.
Proposed fix is to simply check isFullScreen when yuzu is starting up,
and take it out of full screen immediately
This does a few things in order to make the default setting Vulkan
workable.
- When yuzu boots, it just opens the Vulkan library.
- If it works, all good and we continue with Vulkan as the default.
- If something breaks, a new file in the config directory will be left
behind (this is deleted normally).
- If Vulkan is not working, has_broken_vulkan is set to true.
- The first time this happens, a warning is displayed to notify the
user.
- This forces use of OpenGL, and Vulkan cannot be selected.
- The Shader Backend selector is made accessible for use in custom
configurations.
- To disable has_broken_vulkan, the user needs to press a button in
Graphics Configuration to manually run the Vulkan device
enumeration.
Two reasons for this:
1. Out of 7 connections, 6 are in ConfigureMotionTouch::ConnectEvents,
this is the outlier.
2. Qt6 doesn't moc the connection properly