early-access version 4138
This commit is contained in:
parent
2113b169c0
commit
603970064d
@ -1,7 +1,7 @@
|
|||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 4137.
|
This is the source code for early-access 4138.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
@ -24,7 +24,9 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
|
|||||||
THEME_MODE("theme_mode"),
|
THEME_MODE("theme_mode"),
|
||||||
OVERLAY_SCALE("control_scale"),
|
OVERLAY_SCALE("control_scale"),
|
||||||
OVERLAY_OPACITY("control_opacity"),
|
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)
|
override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal)
|
||||||
|
|
||||||
|
@ -93,4 +93,15 @@ object Settings {
|
|||||||
entries.firstOrNull { it.int == int } ?: Unspecified
|
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
|
R.array.rendererScalingFilterValues
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
put(
|
||||||
|
SliderSetting(
|
||||||
|
IntSetting.FSR_SHARPENING_SLIDER,
|
||||||
|
R.string.fsr_sharpness,
|
||||||
|
R.string.fsr_sharpness_description,
|
||||||
|
0,
|
||||||
|
100,
|
||||||
|
"%"
|
||||||
|
)
|
||||||
|
)
|
||||||
put(
|
put(
|
||||||
SingleChoiceSetting(
|
SingleChoiceSetting(
|
||||||
IntSetting.RENDERER_ANTI_ALIASING,
|
IntSetting.RENDERER_ANTI_ALIASING,
|
||||||
@ -215,6 +225,15 @@ abstract class SettingsItem(
|
|||||||
R.array.rendererAspectRatioValues
|
R.array.rendererAspectRatioValues
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
put(
|
||||||
|
SingleChoiceSetting(
|
||||||
|
IntSetting.VERTICAL_ALIGNMENT,
|
||||||
|
R.string.vertical_alignment,
|
||||||
|
0,
|
||||||
|
R.array.verticalAlignmentEntries,
|
||||||
|
R.array.verticalAlignmentValues
|
||||||
|
)
|
||||||
|
)
|
||||||
put(
|
put(
|
||||||
SwitchSetting(
|
SwitchSetting(
|
||||||
BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
|
BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
|
||||||
|
@ -143,10 +143,12 @@ class SettingsFragmentPresenter(
|
|||||||
add(IntSetting.RENDERER_RESOLUTION.key)
|
add(IntSetting.RENDERER_RESOLUTION.key)
|
||||||
add(IntSetting.RENDERER_VSYNC.key)
|
add(IntSetting.RENDERER_VSYNC.key)
|
||||||
add(IntSetting.RENDERER_SCALING_FILTER.key)
|
add(IntSetting.RENDERER_SCALING_FILTER.key)
|
||||||
|
add(IntSetting.FSR_SHARPENING_SLIDER.key)
|
||||||
add(IntSetting.RENDERER_ANTI_ALIASING.key)
|
add(IntSetting.RENDERER_ANTI_ALIASING.key)
|
||||||
add(IntSetting.MAX_ANISOTROPY.key)
|
add(IntSetting.MAX_ANISOTROPY.key)
|
||||||
add(IntSetting.RENDERER_SCREEN_LAYOUT.key)
|
add(IntSetting.RENDERER_SCREEN_LAYOUT.key)
|
||||||
add(IntSetting.RENDERER_ASPECT_RATIO.key)
|
add(IntSetting.RENDERER_ASPECT_RATIO.key)
|
||||||
|
add(IntSetting.VERTICAL_ALIGNMENT.key)
|
||||||
add(BooleanSetting.PICTURE_IN_PICTURE.key)
|
add(BooleanSetting.PICTURE_IN_PICTURE.key)
|
||||||
add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
|
add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
|
||||||
add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
|
add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
|
||||||
|
@ -104,7 +104,10 @@ class AddonsFragment : Fragment() {
|
|||||||
requireActivity(),
|
requireActivity(),
|
||||||
titleId = R.string.addon_notice,
|
titleId = R.string.addon_notice,
|
||||||
descriptionId = R.string.addon_notice_description,
|
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)
|
).show(parentFragmentManager, MessageDialogFragment.TAG)
|
||||||
addonViewModel.showModNoticeDialog(false)
|
addonViewModel.showModNoticeDialog(false)
|
||||||
}
|
}
|
||||||
@ -119,7 +122,8 @@ class AddonsFragment : Fragment() {
|
|||||||
requireActivity(),
|
requireActivity(),
|
||||||
titleId = R.string.confirm_uninstall,
|
titleId = R.string.confirm_uninstall,
|
||||||
descriptionId = R.string.confirm_uninstall_description,
|
descriptionId = R.string.confirm_uninstall_description,
|
||||||
positiveAction = { addonViewModel.onDeleteAddon(it) }
|
positiveAction = { addonViewModel.onDeleteAddon(it) },
|
||||||
|
negativeAction = {}
|
||||||
).show(parentFragmentManager, MessageDialogFragment.TAG)
|
).show(parentFragmentManager, MessageDialogFragment.TAG)
|
||||||
addonViewModel.setAddonToDelete(null)
|
addonViewModel.setAddonToDelete(null)
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,9 @@ import android.os.Handler
|
|||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
|
import android.util.Rational
|
||||||
import android.view.*
|
import android.view.*
|
||||||
|
import android.widget.FrameLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
@ -24,6 +26,7 @@ import androidx.core.content.res.ResourcesCompat
|
|||||||
import androidx.core.graphics.Insets
|
import androidx.core.graphics.Insets
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.core.view.updatePadding
|
import androidx.core.view.updatePadding
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
import androidx.drawerlayout.widget.DrawerLayout
|
||||||
import androidx.drawerlayout.widget.DrawerLayout.DrawerListener
|
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.IntSetting
|
||||||
import org.yuzu.yuzu_emu.features.settings.model.Settings
|
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.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.features.settings.utils.SettingsFile
|
||||||
import org.yuzu.yuzu_emu.model.DriverViewModel
|
import org.yuzu.yuzu_emu.model.DriverViewModel
|
||||||
import org.yuzu.yuzu_emu.model.Game
|
import org.yuzu.yuzu_emu.model.Game
|
||||||
@ -617,7 +621,46 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateScreenLayout() {
|
private fun updateScreenLayout() {
|
||||||
|
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.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()
|
emulationActivity?.buildPictureInPictureParams()
|
||||||
updateOrientation()
|
updateOrientation()
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,9 @@ class MessageDialogFragment : DialogFragment() {
|
|||||||
} else if (positiveButtonString.isNotEmpty()) {
|
} else if (positiveButtonString.isNotEmpty()) {
|
||||||
positiveButtonString
|
positiveButtonString
|
||||||
} else if (messageDialogViewModel.positiveAction != null) {
|
} else if (messageDialogViewModel.positiveAction != null) {
|
||||||
getString(R.string.close)
|
|
||||||
} else {
|
|
||||||
getString(android.R.string.ok)
|
getString(android.R.string.ok)
|
||||||
|
} else {
|
||||||
|
getString(R.string.close)
|
||||||
}
|
}
|
||||||
|
|
||||||
val negativeButtonId = requireArguments().getInt(NEGATIVE_BUTTON_TITLE_ID)
|
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.
|
* @param positiveButtonTitleId String resource ID that will be used for the positive button.
|
||||||
* [positiveButtonTitleString] used if 0.
|
* [positiveButtonTitleString] used if 0.
|
||||||
* @param positiveButtonTitleString String that will be used for the positive button.
|
* @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.
|
* is not null.
|
||||||
* @param positiveAction Lambda to run when the positive button is clicked.
|
* @param positiveAction Lambda to run when the positive button is clicked.
|
||||||
* @param showNegativeButton Normally the negative button isn't shown if there is no
|
* @param showNegativeButton Normally the negative button isn't shown if there is no
|
||||||
|
@ -38,6 +38,13 @@ struct Values {
|
|||||||
Settings::Specialization::Default,
|
Settings::Specialization::Default,
|
||||||
true,
|
true,
|
||||||
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::SwitchableSetting<std::string, false> driver_path{linkage, "", "driver_path",
|
||||||
Settings::Category::GpuDriver};
|
Settings::Category::GpuDriver};
|
||||||
|
@ -292,4 +292,15 @@
|
|||||||
<item>5</item>
|
<item>5</item>
|
||||||
</integer-array>
|
</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>
|
</resources>
|
||||||
|
@ -226,6 +226,8 @@
|
|||||||
<string name="renderer_screen_layout">Orientation</string>
|
<string name="renderer_screen_layout">Orientation</string>
|
||||||
<string name="renderer_aspect_ratio">Aspect ratio</string>
|
<string name="renderer_aspect_ratio">Aspect ratio</string>
|
||||||
<string name="renderer_scaling_filter">Window adapting filter</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_anti_aliasing">Anti-aliasing method</string>
|
||||||
<string name="renderer_force_max_clock">Force maximum clocks (Adreno only)</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>
|
<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="mute">Mute</string>
|
||||||
<string name="unmute">Unmute</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 -->
|
<!-- Licenses screen strings -->
|
||||||
<string name="licenses">Licenses</string>
|
<string name="licenses">Licenses</string>
|
||||||
<string name="license_fidelityfx_fsr" translatable="false">FidelityFX-FSR</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(
|
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");
|
LOG_DEBUG(Service_SET, "called");
|
||||||
|
|
||||||
const std::size_t max_amount = std::min(POST_4_0_0_MAX_ENTRIES, language_codes.size());
|
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 GetRegionCode(Out<SystemRegionCode> out_region_code);
|
||||||
|
|
||||||
Result GetAvailableLanguageCodes2(
|
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);
|
Result GetAvailableLanguageCodeCount2(Out<s32> out_count);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user