early-access version 4138
This commit is contained in:
parent
2113b169c0
commit
603970064d
@ -1,7 +1,7 @@
|
||||
yuzu emulator early access
|
||||
=============
|
||||
|
||||
This is the source code for early-access 4137.
|
||||
This is the source code for early-access 4138.
|
||||
|
||||
## Legal Notice
|
||||
|
||||
|
@ -24,7 +24,9 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
|
||||
THEME_MODE("theme_mode"),
|
||||
OVERLAY_SCALE("control_scale"),
|
||||
OVERLAY_OPACITY("control_opacity"),
|
||||
LOCK_DRAWER("lock_drawer");
|
||||
LOCK_DRAWER("lock_drawer"),
|
||||
VERTICAL_ALIGNMENT("vertical_alignment"),
|
||||
FSR_SHARPENING_SLIDER("fsr_sharpening_slider");
|
||||
|
||||
override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal)
|
||||
|
||||
|
@ -93,4 +93,15 @@ object Settings {
|
||||
entries.firstOrNull { it.int == int } ?: Unspecified
|
||||
}
|
||||
}
|
||||
|
||||
enum class EmulationVerticalAlignment(val int: Int) {
|
||||
Top(1),
|
||||
Center(0),
|
||||
Bottom(2);
|
||||
|
||||
companion object {
|
||||
fun from(int: Int): EmulationVerticalAlignment =
|
||||
entries.firstOrNull { it.int == int } ?: Center
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -188,6 +188,16 @@ abstract class SettingsItem(
|
||||
R.array.rendererScalingFilterValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SliderSetting(
|
||||
IntSetting.FSR_SHARPENING_SLIDER,
|
||||
R.string.fsr_sharpness,
|
||||
R.string.fsr_sharpness_description,
|
||||
0,
|
||||
100,
|
||||
"%"
|
||||
)
|
||||
)
|
||||
put(
|
||||
SingleChoiceSetting(
|
||||
IntSetting.RENDERER_ANTI_ALIASING,
|
||||
@ -215,6 +225,15 @@ abstract class SettingsItem(
|
||||
R.array.rendererAspectRatioValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SingleChoiceSetting(
|
||||
IntSetting.VERTICAL_ALIGNMENT,
|
||||
R.string.vertical_alignment,
|
||||
0,
|
||||
R.array.verticalAlignmentEntries,
|
||||
R.array.verticalAlignmentValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
|
||||
|
@ -143,10 +143,12 @@ class SettingsFragmentPresenter(
|
||||
add(IntSetting.RENDERER_RESOLUTION.key)
|
||||
add(IntSetting.RENDERER_VSYNC.key)
|
||||
add(IntSetting.RENDERER_SCALING_FILTER.key)
|
||||
add(IntSetting.FSR_SHARPENING_SLIDER.key)
|
||||
add(IntSetting.RENDERER_ANTI_ALIASING.key)
|
||||
add(IntSetting.MAX_ANISOTROPY.key)
|
||||
add(IntSetting.RENDERER_SCREEN_LAYOUT.key)
|
||||
add(IntSetting.RENDERER_ASPECT_RATIO.key)
|
||||
add(IntSetting.VERTICAL_ALIGNMENT.key)
|
||||
add(BooleanSetting.PICTURE_IN_PICTURE.key)
|
||||
add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
|
||||
add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
|
||||
|
@ -104,7 +104,10 @@ class AddonsFragment : Fragment() {
|
||||
requireActivity(),
|
||||
titleId = R.string.addon_notice,
|
||||
descriptionId = R.string.addon_notice_description,
|
||||
positiveAction = { addonViewModel.showModInstallPicker(true) }
|
||||
dismissible = false,
|
||||
positiveAction = { addonViewModel.showModInstallPicker(true) },
|
||||
negativeAction = {},
|
||||
negativeButtonTitleId = R.string.close
|
||||
).show(parentFragmentManager, MessageDialogFragment.TAG)
|
||||
addonViewModel.showModNoticeDialog(false)
|
||||
}
|
||||
@ -119,7 +122,8 @@ class AddonsFragment : Fragment() {
|
||||
requireActivity(),
|
||||
titleId = R.string.confirm_uninstall,
|
||||
descriptionId = R.string.confirm_uninstall_description,
|
||||
positiveAction = { addonViewModel.onDeleteAddon(it) }
|
||||
positiveAction = { addonViewModel.onDeleteAddon(it) },
|
||||
negativeAction = {}
|
||||
).show(parentFragmentManager, MessageDialogFragment.TAG)
|
||||
addonViewModel.setAddonToDelete(null)
|
||||
}
|
||||
|
@ -15,7 +15,9 @@ import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.PowerManager
|
||||
import android.os.SystemClock
|
||||
import android.util.Rational
|
||||
import android.view.*
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
@ -24,6 +26,7 @@ import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.core.graphics.Insets
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.drawerlayout.widget.DrawerLayout.DrawerListener
|
||||
@ -52,6 +55,7 @@ import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
|
||||
import org.yuzu.yuzu_emu.features.settings.model.IntSetting
|
||||
import org.yuzu.yuzu_emu.features.settings.model.Settings
|
||||
import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationOrientation
|
||||
import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationVerticalAlignment
|
||||
import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
|
||||
import org.yuzu.yuzu_emu.model.DriverViewModel
|
||||
import org.yuzu.yuzu_emu.model.Game
|
||||
@ -617,7 +621,46 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
||||
}
|
||||
|
||||
private fun updateScreenLayout() {
|
||||
binding.surfaceEmulation.setAspectRatio(null)
|
||||
val verticalAlignment =
|
||||
EmulationVerticalAlignment.from(IntSetting.VERTICAL_ALIGNMENT.getInt())
|
||||
val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.getInt()) {
|
||||
0 -> Rational(16, 9)
|
||||
1 -> Rational(4, 3)
|
||||
2 -> Rational(21, 9)
|
||||
3 -> Rational(16, 10)
|
||||
else -> null // Best fit
|
||||
}
|
||||
when (verticalAlignment) {
|
||||
EmulationVerticalAlignment.Top -> {
|
||||
binding.surfaceEmulation.setAspectRatio(aspectRatio)
|
||||
val params = FrameLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
params.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
|
||||
binding.surfaceEmulation.layoutParams = params
|
||||
}
|
||||
|
||||
EmulationVerticalAlignment.Center -> {
|
||||
binding.surfaceEmulation.setAspectRatio(null)
|
||||
binding.surfaceEmulation.updateLayoutParams {
|
||||
width = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
}
|
||||
}
|
||||
|
||||
EmulationVerticalAlignment.Bottom -> {
|
||||
binding.surfaceEmulation.setAspectRatio(aspectRatio)
|
||||
val params =
|
||||
FrameLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
params.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
|
||||
binding.surfaceEmulation.layoutParams = params
|
||||
}
|
||||
}
|
||||
emulationState.updateSurface()
|
||||
emulationActivity?.buildPictureInPictureParams()
|
||||
updateOrientation()
|
||||
}
|
||||
|
@ -42,9 +42,9 @@ class MessageDialogFragment : DialogFragment() {
|
||||
} else if (positiveButtonString.isNotEmpty()) {
|
||||
positiveButtonString
|
||||
} else if (messageDialogViewModel.positiveAction != null) {
|
||||
getString(R.string.close)
|
||||
} else {
|
||||
getString(android.R.string.ok)
|
||||
} else {
|
||||
getString(R.string.close)
|
||||
}
|
||||
|
||||
val negativeButtonId = requireArguments().getInt(NEGATIVE_BUTTON_TITLE_ID)
|
||||
@ -131,7 +131,7 @@ class MessageDialogFragment : DialogFragment() {
|
||||
* @param positiveButtonTitleId String resource ID that will be used for the positive button.
|
||||
* [positiveButtonTitleString] used if 0.
|
||||
* @param positiveButtonTitleString String that will be used for the positive button.
|
||||
* android.R.string.ok used if empty. android.R.string.close will be used if [positiveAction]
|
||||
* android.R.string.close used if empty. android.R.string.ok will be used if [positiveAction]
|
||||
* is not null.
|
||||
* @param positiveAction Lambda to run when the positive button is clicked.
|
||||
* @param showNegativeButton Normally the negative button isn't shown if there is no
|
||||
|
@ -38,6 +38,13 @@ struct Values {
|
||||
Settings::Specialization::Default,
|
||||
true,
|
||||
true};
|
||||
Settings::Setting<s32> vertical_alignment{linkage,
|
||||
0,
|
||||
"vertical_alignment",
|
||||
Settings::Category::Android,
|
||||
Settings::Specialization::Default,
|
||||
true,
|
||||
true};
|
||||
|
||||
Settings::SwitchableSetting<std::string, false> driver_path{linkage, "", "driver_path",
|
||||
Settings::Category::GpuDriver};
|
||||
|
@ -292,4 +292,15 @@
|
||||
<item>5</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="verticalAlignmentEntries">
|
||||
<item>@string/top</item>
|
||||
<item>@string/center</item>
|
||||
<item>@string/bottom</item>
|
||||
</string-array>
|
||||
<integer-array name="verticalAlignmentValues">
|
||||
<item>1</item>
|
||||
<item>0</item>
|
||||
<item>2</item>
|
||||
</integer-array>
|
||||
|
||||
</resources>
|
||||
|
@ -226,6 +226,8 @@
|
||||
<string name="renderer_screen_layout">Orientation</string>
|
||||
<string name="renderer_aspect_ratio">Aspect ratio</string>
|
||||
<string name="renderer_scaling_filter">Window adapting filter</string>
|
||||
<string name="fsr_sharpness">FSR sharpness</string>
|
||||
<string name="fsr_sharpness_description">Determines how sharpened the image will look while using FSR\'s dynamic contrast</string>
|
||||
<string name="renderer_anti_aliasing">Anti-aliasing method</string>
|
||||
<string name="renderer_force_max_clock">Force maximum clocks (Adreno only)</string>
|
||||
<string name="renderer_force_max_clock_description">Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).</string>
|
||||
@ -558,6 +560,12 @@
|
||||
<string name="mute">Mute</string>
|
||||
<string name="unmute">Unmute</string>
|
||||
|
||||
<!-- Emulation vertical alignment -->
|
||||
<string name="vertical_alignment">Vertical alignment</string>
|
||||
<string name="top">Top</string>
|
||||
<string name="center">Center</string>
|
||||
<string name="bottom">Bottom</string>
|
||||
|
||||
<!-- Licenses screen strings -->
|
||||
<string name="licenses">Licenses</string>
|
||||
<string name="license_fidelityfx_fsr" translatable="false">FidelityFX-FSR</string>
|
||||
|
@ -155,7 +155,7 @@ Result ISettingsServer::GetRegionCode(Out<SystemRegionCode> out_region_code) {
|
||||
}
|
||||
|
||||
Result ISettingsServer::GetAvailableLanguageCodes2(
|
||||
Out<s32> out_count, OutArray<LanguageCode, BufferAttr_HipcPointer> language_codes) {
|
||||
Out<s32> out_count, OutArray<LanguageCode, BufferAttr_HipcMapAlias> language_codes) {
|
||||
LOG_DEBUG(Service_SET, "called");
|
||||
|
||||
const std::size_t max_amount = std::min(POST_4_0_0_MAX_ENTRIES, language_codes.size());
|
||||
|
@ -34,7 +34,7 @@ private:
|
||||
Result GetRegionCode(Out<SystemRegionCode> out_region_code);
|
||||
|
||||
Result GetAvailableLanguageCodes2(
|
||||
Out<s32> out_count, OutArray<LanguageCode, BufferAttr_HipcPointer> language_codes);
|
||||
Out<s32> out_count, OutArray<LanguageCode, BufferAttr_HipcMapAlias> language_codes);
|
||||
|
||||
Result GetAvailableLanguageCodeCount2(Out<s32> out_count);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user