diff --git a/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt index 816194a9a..5d314985c 100644 --- a/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt +++ b/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2023 yuzu Emulator Project +// SPDX-FileCopyrightText: 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later package org.citron.citron_emu.activities @@ -312,6 +313,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { 1 -> Rational(4, 3) 2 -> Rational(21, 9) 3 -> Rational(16, 10) + 4 -> Rational(32, 9) else -> null // Best fit } return this.apply { aspectRatio?.let { setAspectRatio(it) } } diff --git a/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt index 7999ae0d0..7e97ce77a 100644 --- a/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2023 yuzu Emulator Project +// SPDX-FileCopyrightText: 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later package org.citron.citron_emu.fragments @@ -577,6 +578,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { 1 -> Rational(4, 3) 2 -> Rational(21, 9) 3 -> Rational(16, 10) + 4 -> Rational(32, 9) else -> null // Best fit } when (verticalAlignment) { diff --git a/src/citron/configuration/shared_translation.cpp b/src/citron/configuration/shared_translation.cpp index bc918a380..8a4786966 100644 --- a/src/citron/configuration/shared_translation.cpp +++ b/src/citron/configuration/shared_translation.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include "citron/configuration/shared_translation.h" @@ -56,18 +57,18 @@ std::unique_ptr InitializeTranslations(QWidget* parent) { // Core INSERT( Settings, use_multi_core, tr("Multicore CPU Emulation"), - tr("This option increases CPU emulation thread use from 1 to the Switch’s maximum of 4.\n" - "This is mainly a debug option and shouldn’t be disabled.")); + tr("This option increases CPU emulation thread use from 1 to the Switch's maximum of 4.\n" + "This is mainly a debug option and shouldn't be disabled.")); INSERT( Settings, memory_layout_mode, tr("Memory Layout"), tr("Increases the amount of emulated RAM from the stock 4GB of the retail Switch to the " - "developer kit's 8/6GB.\nIt’s doesn’t improve stability or performance and is intended " + "developer kit's 8/6GB.\nIt's doesn't improve stability or performance and is intended " "to let big texture mods fit in emulated RAM.\nEnabling it will increase memory " "use. It is not recommended to enable unless a specific game with a texture mod needs " "it.")); INSERT(Settings, use_speed_limit, QStringLiteral(), QStringLiteral()); INSERT(Settings, speed_limit, tr("Limit Speed Percent"), - tr("Controls the game's maximum rendering speed, but it’s up to each game if it runs " + tr("Controls the game's maximum rendering speed, but it's up to each game if it runs " "faster or not.\n200% for a 30 FPS game is 60 FPS, and for a " "60 FPS game it will be 120 FPS.\nDisabling it means unlocking the framerate to the " "maximum your PC can reach.")); @@ -125,7 +126,7 @@ std::unique_ptr InitializeTranslations(QWidget* parent) { "Options lower than 1X can cause rendering issues.")); INSERT(Settings, scaling_filter, tr("Window Adapting Filter:"), QStringLiteral()); INSERT(Settings, fsr_sharpening_slider, tr("FSR Sharpness:"), - tr("Determines how sharpened the image will look while using FSR’s dynamic contrast.")); + tr("Determines how sharpened the image will look while using FSR's dynamic contrast.")); INSERT(Settings, anti_aliasing, tr("Anti-Aliasing Method:"), tr("The anti-aliasing method to use.\nSMAA offers the best quality.\nFXAA has a " "lower performance impact and can produce a better and more stable picture under " @@ -188,7 +189,7 @@ std::unique_ptr InitializeTranslations(QWidget* parent) { tr("Runs work in the background while waiting for graphics commands to keep the GPU from " "lowering its clock speed.")); INSERT(Settings, max_anisotropy, tr("Anisotropic Filtering:"), - tr("Controls the quality of texture rendering at oblique angles.\nIt’s a light setting " + tr("Controls the quality of texture rendering at oblique angles.\nIt's a light setting " "and safe to set at 16x on most GPUs.")); INSERT(Settings, gpu_accuracy, tr("Accuracy Level:"), tr("GPU emulation accuracy.\nMost games render fine with Normal, but High is still " @@ -406,6 +407,7 @@ std::unique_ptr ComboboxEnumeration(QWidget* parent) { PAIR(AspectRatio, R4_3, tr("Force 4:3")), PAIR(AspectRatio, R21_9, tr("Force 21:9")), PAIR(AspectRatio, R16_10, tr("Force 16:10")), + PAIR(AspectRatio, R32_9, tr("Force 32:9")), PAIR(AspectRatio, Stretch, tr("Stretch to Window")), }}); translations->insert({Settings::EnumMetadata::Index(), diff --git a/src/citron/uisettings.cpp b/src/citron/uisettings.cpp index 8168d8b12..2ac580d0d 100644 --- a/src/citron/uisettings.cpp +++ b/src/citron/uisettings.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2016 Citra Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -47,6 +48,8 @@ u32 CalculateWidth(u32 height, Settings::AspectRatio ratio) { return height * 21 / 9; case Settings::AspectRatio::R16_10: return height * 16 / 10; + case Settings::AspectRatio::R32_9: + return height * 32 / 9; case Settings::AspectRatio::R16_9: case Settings::AspectRatio::Stretch: // TODO: Move this function wherever appropriate to implement Stretched aspect diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index 6e247e930..cf35618fe 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -149,7 +150,7 @@ ENUM(ScalingFilter, NearestNeighbor, Bilinear, Bicubic, Gaussian, ScaleForce, Fs ENUM(AntiAliasing, None, Fxaa, Smaa, MaxEnum); -ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, Stretch); +ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, R32_9, Stretch); ENUM(ConsoleMode, Handheld, Docked); diff --git a/src/core/frontend/framebuffer_layout.cpp b/src/core/frontend/framebuffer_layout.cpp index 2590b20da..db7ee9190 100644 --- a/src/core/frontend/framebuffer_layout.cpp +++ b/src/core/frontend/framebuffer_layout.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -70,6 +71,8 @@ float EmulationAspectRatio(AspectRatio aspect, float window_aspect_ratio) { return 9.0f / 21.0f; case AspectRatio::R16_10: return 10.0f / 16.0f; + case AspectRatio::R32_9: + return 9.0f / 32.0f; case AspectRatio::StretchToWindow: return window_aspect_ratio; default: diff --git a/src/core/frontend/framebuffer_layout.h b/src/core/frontend/framebuffer_layout.h index 94683b30f..f85318f65 100644 --- a/src/core/frontend/framebuffer_layout.h +++ b/src/core/frontend/framebuffer_layout.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -28,6 +29,7 @@ enum class AspectRatio { R4_3, R21_9, R16_10, + R32_9, StretchToWindow, };