forked from etc/pineapple-src
early-access version 2866
This commit is contained in:
parent
9533f7c018
commit
87834084de
10 changed files with 134 additions and 17 deletions
|
@ -83,6 +83,11 @@ endif()
|
||||||
configure_file(${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.qrc
|
configure_file(${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.qrc
|
||||||
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
|
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
|
||||||
COPYONLY)
|
COPYONLY)
|
||||||
|
if (EXISTS ${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.json)
|
||||||
|
configure_file("${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.json"
|
||||||
|
"${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json"
|
||||||
|
COPYONLY)
|
||||||
|
endif()
|
||||||
if (ENABLE_COMPATIBILITY_LIST_DOWNLOAD AND NOT EXISTS ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)
|
if (ENABLE_COMPATIBILITY_LIST_DOWNLOAD AND NOT EXISTS ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)
|
||||||
message(STATUS "Downloading compatibility list for yuzu...")
|
message(STATUS "Downloading compatibility list for yuzu...")
|
||||||
file(DOWNLOAD
|
file(DOWNLOAD
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 2865.
|
This is the source code for early-access 2866.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
|
5
dist/english_plurals/README.md
vendored
Executable file
5
dist/english_plurals/README.md
vendored
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
With CMake flag GENERATE_QT_TRANSLATION a build/src/yuzu/plurals/en.ts is created from the source
|
||||||
|
|
||||||
|
Having the plurals look nice isn't critical, so this has been done manually.
|
||||||
|
|
||||||
|
The en.ts in this directory is taken from a build, edited in Qt Linguist and then committed.
|
67
dist/english_plurals/en.ts
vendored
Executable file
67
dist/english_plurals/en.ts
vendored
Executable file
|
@ -0,0 +1,67 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="en_US" sourcelanguage="en_US">
|
||||||
|
<context>
|
||||||
|
<name>GMainWindow</name>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2322"/>
|
||||||
|
<source>%n file(s) remaining</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file remaining</numerusform>
|
||||||
|
<numerusform>%n files remaining</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2377"/>
|
||||||
|
<source>%n file(s) were newly installed
|
||||||
|
</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file was newly installed
|
||||||
|
</numerusform>
|
||||||
|
<numerusform>%n files were newly installed
|
||||||
|
</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2380"/>
|
||||||
|
<source>%n file(s) were overwritten
|
||||||
|
</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file was overwritten
|
||||||
|
</numerusform>
|
||||||
|
<numerusform>%n were overwritten
|
||||||
|
</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="2382"/>
|
||||||
|
<source>%n file(s) failed to install
|
||||||
|
</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%n file failed to install
|
||||||
|
</numerusform>
|
||||||
|
<numerusform>%n files failed to install
|
||||||
|
</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/main.cpp" line="3264"/>
|
||||||
|
<source>Building: %n shader(s)</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>Building: %n shader</numerusform>
|
||||||
|
<numerusform>Building: %n shaders</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>GameListSearchField</name>
|
||||||
|
<message numerus="yes">
|
||||||
|
<location filename="../../src/yuzu/game_list.cpp" line="87"/>
|
||||||
|
<source>%1 of %n result(s)</source>
|
||||||
|
<translation>
|
||||||
|
<numerusform>%1 of %n result</numerusform>
|
||||||
|
<numerusform>%1 of %n results</numerusform>
|
||||||
|
</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
|
@ -99,8 +99,10 @@ void EmulatedController::ReloadFromSettings() {
|
||||||
// Other or debug controller should always be a pro controller
|
// Other or debug controller should always be a pro controller
|
||||||
if (npad_id_type != NpadIdType::Other) {
|
if (npad_id_type != NpadIdType::Other) {
|
||||||
SetNpadStyleIndex(MapSettingsTypeToNPad(player.controller_type));
|
SetNpadStyleIndex(MapSettingsTypeToNPad(player.controller_type));
|
||||||
|
original_npad_type = npad_type;
|
||||||
} else {
|
} else {
|
||||||
SetNpadStyleIndex(NpadStyleIndex::ProController);
|
SetNpadStyleIndex(NpadStyleIndex::ProController);
|
||||||
|
original_npad_type = npad_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.connected) {
|
if (player.connected) {
|
||||||
|
@ -352,6 +354,7 @@ void EmulatedController::DisableConfiguration() {
|
||||||
Disconnect();
|
Disconnect();
|
||||||
}
|
}
|
||||||
SetNpadStyleIndex(tmp_npad_type);
|
SetNpadStyleIndex(tmp_npad_type);
|
||||||
|
original_npad_type = tmp_npad_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply temporary connected status to the real controller
|
// Apply temporary connected status to the real controller
|
||||||
|
@ -999,13 +1002,27 @@ void EmulatedController::SetSupportedNpadStyleTag(NpadStyleTag supported_styles)
|
||||||
if (!is_connected) {
|
if (!is_connected) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Attempt to reconnect with the original type
|
||||||
|
if (npad_type != original_npad_type) {
|
||||||
|
Disconnect();
|
||||||
|
const auto current_npad_type = npad_type;
|
||||||
|
SetNpadStyleIndex(original_npad_type);
|
||||||
|
if (IsControllerSupported()) {
|
||||||
|
Connect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SetNpadStyleIndex(current_npad_type);
|
||||||
|
Connect();
|
||||||
|
}
|
||||||
|
|
||||||
if (IsControllerSupported()) {
|
if (IsControllerSupported()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Disconnect();
|
Disconnect();
|
||||||
|
|
||||||
// Fallback fullkey controllers to Pro controllers
|
// Fallback Fullkey controllers to Pro controllers
|
||||||
if (IsControllerFullkey() && supported_style_tag.fullkey) {
|
if (IsControllerFullkey() && supported_style_tag.fullkey) {
|
||||||
LOG_WARNING(Service_HID, "Reconnecting controller type {} as Pro controller", npad_type);
|
LOG_WARNING(Service_HID, "Reconnecting controller type {} as Pro controller", npad_type);
|
||||||
SetNpadStyleIndex(NpadStyleIndex::ProController);
|
SetNpadStyleIndex(NpadStyleIndex::ProController);
|
||||||
|
@ -1013,6 +1030,22 @@ void EmulatedController::SetSupportedNpadStyleTag(NpadStyleTag supported_styles)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fallback Dual joycon controllers to Pro controllers
|
||||||
|
if (npad_type == NpadStyleIndex::JoyconDual && supported_style_tag.fullkey) {
|
||||||
|
LOG_WARNING(Service_HID, "Reconnecting controller type {} as Pro controller", npad_type);
|
||||||
|
SetNpadStyleIndex(NpadStyleIndex::ProController);
|
||||||
|
Connect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback Pro controllers to Dual joycon
|
||||||
|
if (npad_type == NpadStyleIndex::ProController && supported_style_tag.joycon_dual) {
|
||||||
|
LOG_WARNING(Service_HID, "Reconnecting controller type {} as Dual Joycons", npad_type);
|
||||||
|
SetNpadStyleIndex(NpadStyleIndex::JoyconDual);
|
||||||
|
Connect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LOG_ERROR(Service_HID, "Controller type {} is not supported. Disconnecting controller",
|
LOG_ERROR(Service_HID, "Controller type {} is not supported. Disconnecting controller",
|
||||||
npad_type);
|
npad_type);
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,6 +433,7 @@ private:
|
||||||
|
|
||||||
const NpadIdType npad_id_type;
|
const NpadIdType npad_id_type;
|
||||||
NpadStyleIndex npad_type{NpadStyleIndex::None};
|
NpadStyleIndex npad_type{NpadStyleIndex::None};
|
||||||
|
NpadStyleIndex original_npad_type{NpadStyleIndex::None};
|
||||||
NpadStyleTag supported_style_tag{NpadStyleSet::All};
|
NpadStyleTag supported_style_tag{NpadStyleSet::All};
|
||||||
bool is_connected{false};
|
bool is_connected{false};
|
||||||
bool is_configuring{false};
|
bool is_configuring{false};
|
||||||
|
|
|
@ -87,12 +87,8 @@ u32 GetBytesPerPixel(const Tegra::FramebufferConfig& framebuffer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) {
|
std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) {
|
||||||
// TODO(Rodrigo): Read this from HLE
|
return static_cast<std::size_t>(framebuffer.stride) *
|
||||||
constexpr u32 block_height_log2 = 4;
|
static_cast<std::size_t>(framebuffer.height) * GetBytesPerPixel(framebuffer);
|
||||||
const u32 bytes_per_pixel = GetBytesPerPixel(framebuffer);
|
|
||||||
const u64 size_bytes{Tegra::Texture::CalculateSize(
|
|
||||||
true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)};
|
|
||||||
return size_bytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) {
|
VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) {
|
||||||
|
@ -173,10 +169,12 @@ VkSemaphore BlitScreen::Draw(const Tegra::FramebufferConfig& framebuffer,
|
||||||
// TODO(Rodrigo): Read this from HLE
|
// TODO(Rodrigo): Read this from HLE
|
||||||
constexpr u32 block_height_log2 = 4;
|
constexpr u32 block_height_log2 = 4;
|
||||||
const u32 bytes_per_pixel = GetBytesPerPixel(framebuffer);
|
const u32 bytes_per_pixel = GetBytesPerPixel(framebuffer);
|
||||||
const u64 size_bytes{GetSizeInBytes(framebuffer)};
|
const u64 linear_size{GetSizeInBytes(framebuffer)};
|
||||||
|
const u64 tiled_size{Tegra::Texture::CalculateSize(true, bytes_per_pixel,
|
||||||
|
framebuffer.stride, framebuffer.height,
|
||||||
|
1, block_height_log2, 0)};
|
||||||
Tegra::Texture::UnswizzleTexture(
|
Tegra::Texture::UnswizzleTexture(
|
||||||
mapped_span.subspan(image_offset, size_bytes), std::span(host_ptr, size_bytes),
|
mapped_span.subspan(image_offset, linear_size), std::span(host_ptr, tiled_size),
|
||||||
bytes_per_pixel, framebuffer.width, framebuffer.height, 1, block_height_log2, 0);
|
bytes_per_pixel, framebuffer.width, framebuffer.height, 1, block_height_log2, 0);
|
||||||
|
|
||||||
const VkBufferImageCopy copy{
|
const VkBufferImageCopy copy{
|
||||||
|
|
|
@ -221,6 +221,9 @@ if (ENABLE_QT_TRANSLATION)
|
||||||
# Update source TS file if enabled
|
# Update source TS file if enabled
|
||||||
if (GENERATE_QT_TRANSLATION)
|
if (GENERATE_QT_TRANSLATION)
|
||||||
get_target_property(SRCS yuzu SOURCES)
|
get_target_property(SRCS yuzu SOURCES)
|
||||||
|
# these calls to qt_create_translation also creates a rule to generate en.qm which conflicts with providing english plurals
|
||||||
|
# so we have to set a OUTPUT_LOCATION so that we don't have multiple rules to generate en.qm
|
||||||
|
set_source_files_properties(${YUZU_QT_LANGUAGES}/en.ts PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
|
||||||
qt_create_translation(QM_FILES
|
qt_create_translation(QM_FILES
|
||||||
${SRCS}
|
${SRCS}
|
||||||
${UIS}
|
${UIS}
|
||||||
|
@ -229,7 +232,13 @@ if (ENABLE_QT_TRANSLATION)
|
||||||
-source-language en_US
|
-source-language en_US
|
||||||
-target-language en_US
|
-target-language en_US
|
||||||
)
|
)
|
||||||
add_custom_target(translation ALL DEPENDS ${YUZU_QT_LANGUAGES}/en.ts)
|
|
||||||
|
# Generate plurals into dist/english_plurals/generated_en.ts so it can be used to revise dist/english_plurals/en.ts
|
||||||
|
set(GENERATED_PLURALS_FILE ${PROJECT_SOURCE_DIR}/dist/english_plurals/generated_en.ts)
|
||||||
|
set_source_files_properties(${GENERATED_PLURALS_FILE} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/plurals")
|
||||||
|
qt_create_translation(QM_FILES ${SRCS} ${UIS} ${GENERATED_PLURALS_FILE} OPTIONS -pluralonly -source-language en_US -target-language en_US)
|
||||||
|
|
||||||
|
add_custom_target(translation ALL DEPENDS ${YUZU_QT_LANGUAGES}/en.ts ${GENERATED_PLURALS_FILE})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Find all TS files except en.ts
|
# Find all TS files except en.ts
|
||||||
|
@ -239,6 +248,9 @@ if (ENABLE_QT_TRANSLATION)
|
||||||
# Compile TS files to QM files
|
# Compile TS files to QM files
|
||||||
qt_add_translation(LANGUAGES_QM ${LANGUAGES_TS})
|
qt_add_translation(LANGUAGES_QM ${LANGUAGES_TS})
|
||||||
|
|
||||||
|
# Compile english plurals TS file to en.qm
|
||||||
|
qt_add_translation(LANGUAGES_QM ${PROJECT_SOURCE_DIR}/dist/english_plurals/en.ts)
|
||||||
|
|
||||||
# Build a QRC file from the QM file list
|
# Build a QRC file from the QM file list
|
||||||
set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc)
|
set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc)
|
||||||
file(WRITE ${LANGUAGES_QRC} "<RCC><qresource prefix=\"languages\">\n")
|
file(WRITE ${LANGUAGES_QRC} "<RCC><qresource prefix=\"languages\">\n")
|
||||||
|
|
|
@ -219,6 +219,7 @@ void ConfigureUi::InitializeLanguageComboBox() {
|
||||||
for (const auto& lang : languages) {
|
for (const auto& lang : languages) {
|
||||||
if (QString::fromLatin1(lang.id) == QStringLiteral("en")) {
|
if (QString::fromLatin1(lang.id) == QStringLiteral("en")) {
|
||||||
ui->language_combobox->addItem(lang.name, QStringLiteral("en"));
|
ui->language_combobox->addItem(lang.name, QStringLiteral("en"));
|
||||||
|
language_files.removeOne(QStringLiteral("en.qm"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < language_files.size(); ++i) {
|
for (int i = 0; i < language_files.size(); ++i) {
|
||||||
|
|
|
@ -3977,11 +3977,6 @@ void GMainWindow::UpdateUITheme() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::LoadTranslation() {
|
void GMainWindow::LoadTranslation() {
|
||||||
// If the selected language is English, no need to install any translation
|
|
||||||
if (UISettings::values.language == QStringLiteral("en")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool loaded;
|
bool loaded;
|
||||||
|
|
||||||
if (UISettings::values.language.isEmpty()) {
|
if (UISettings::values.language.isEmpty()) {
|
||||||
|
|
Loading…
Reference in a new issue