forked from geode-sdk/android-launcher
add option to limit aspect ratio
This commit is contained in:
5 files changed
+60
-9
No files matched your search
@@ -21,6 +21,7 @@ import androidx.core.view.WindowInsetsControllerCompat
|
|||||||
import com.customRobTop.BaseRobTopActivity
|
import com.customRobTop.BaseRobTopActivity
|
||||||
import com.customRobTop.JniToCpp
|
import com.customRobTop.JniToCpp
|
||||||
import com.geode.launcher.utils.Constants
|
import com.geode.launcher.utils.Constants
|
||||||
|
import com.geode.launcher.utils.ConstrainedFrameLayout
|
||||||
import com.geode.launcher.utils.DownloadUtils
|
import com.geode.launcher.utils.DownloadUtils
|
||||||
import com.geode.launcher.utils.GeodeUtils
|
import com.geode.launcher.utils.GeodeUtils
|
||||||
import com.geode.launcher.utils.LaunchUtils
|
import com.geode.launcher.utils.LaunchUtils
|
||||||
@@ -262,10 +263,24 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createView(): FrameLayout {
|
private fun createView(): FrameLayout {
|
||||||
val frameLayoutParams = ViewGroup.LayoutParams(-1, -1)
|
val frameLayoutParams = ViewGroup.LayoutParams(
|
||||||
val frameLayout = FrameLayout(this)
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
|
ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
val frameLayout = ConstrainedFrameLayout(this)
|
||||||
frameLayout.layoutParams = frameLayoutParams
|
frameLayout.layoutParams = frameLayoutParams
|
||||||
val editTextLayoutParams = ViewGroup.LayoutParams(-1, -2)
|
|
||||||
|
val isRestricted = PreferenceUtils.get(this)
|
||||||
|
.getBoolean(PreferenceUtils.Key.LIMIT_ASPECT_RATIO)
|
||||||
|
if (isRestricted) {
|
||||||
|
// despite not being perfectly 16:9, this is what Android calls "16:9"
|
||||||
|
frameLayout.aspectRatio = 1.86f
|
||||||
|
}
|
||||||
|
|
||||||
|
val editTextLayoutParams = ViewGroup.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
|
)
|
||||||
val editText = Cocos2dxEditText(this)
|
val editText = Cocos2dxEditText(this)
|
||||||
editText.layoutParams = editTextLayoutParams
|
editText.layoutParams = editTextLayoutParams
|
||||||
frameLayout.addView(editText)
|
frameLayout.addView(editText)
|
||||||
@@ -276,11 +291,6 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
|
|||||||
frameLayout.addView(this.mGLSurfaceView)
|
frameLayout.addView(this.mGLSurfaceView)
|
||||||
|
|
||||||
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8)
|
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8)
|
||||||
|
|
||||||
if (isAndroidEmulator()) {
|
|
||||||
glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
glSurfaceView.initView()
|
glSurfaceView.initView()
|
||||||
glSurfaceView.setCocos2dxRenderer(Cocos2dxRenderer())
|
glSurfaceView.setCocos2dxRenderer(Cocos2dxRenderer())
|
||||||
|
|
||||||
|
|||||||
@@ -302,6 +302,11 @@ fun SettingsScreen(
|
|||||||
description = context.getString(R.string.preference_load_automatically_description),
|
description = context.getString(R.string.preference_load_automatically_description),
|
||||||
preferenceKey = PreferenceUtils.Key.LOAD_AUTOMATICALLY,
|
preferenceKey = PreferenceUtils.Key.LOAD_AUTOMATICALLY,
|
||||||
)
|
)
|
||||||
|
SettingsCard(
|
||||||
|
title = stringResource(R.string.preference_limit_aspect_ratio_name),
|
||||||
|
description = stringResource(R.string.preference_limit_aspect_ratio_description),
|
||||||
|
preferenceKey = PreferenceUtils.Key.LIMIT_ASPECT_RATIO
|
||||||
|
)
|
||||||
OptionsButton(
|
OptionsButton(
|
||||||
title = stringResource(R.string.preferences_open_file_manager),
|
title = stringResource(R.string.preferences_open_file_manager),
|
||||||
onClick = { onOpenFileManager(context) }
|
onClick = { onOpenFileManager(context) }
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.geode.launcher.utils
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.widget.FrameLayout
|
||||||
|
|
||||||
|
class ConstrainedFrameLayout(context: Context) : FrameLayout(context) {
|
||||||
|
// avoid running the aspect ratio fix when we don't need it
|
||||||
|
var aspectRatio: Float? = null;
|
||||||
|
|
||||||
|
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||||
|
if (aspectRatio != null) {
|
||||||
|
val width = MeasureSpec.getSize(widthMeasureSpec)
|
||||||
|
val height = MeasureSpec.getSize(heightMeasureSpec)
|
||||||
|
if (width == 0 || height == 0) {
|
||||||
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
|
||||||
|
}
|
||||||
|
|
||||||
|
val calculatedWidth = height * (aspectRatio ?: 1.0f);
|
||||||
|
val padding = ((width - calculatedWidth) / 2).toInt()
|
||||||
|
|
||||||
|
// ignore paddings where the screen ends up looking odd
|
||||||
|
if (padding > 0) {
|
||||||
|
setPadding(padding, 0, padding, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onMeasure(
|
||||||
|
widthMeasureSpec,
|
||||||
|
heightMeasureSpec
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -135,7 +135,8 @@ class PreferenceUtils(private val sharedPreferences: SharedPreferences) {
|
|||||||
LAST_DISMISSED_UPDATE,
|
LAST_DISMISSED_UPDATE,
|
||||||
DISMISSED_GJ_UPDATE,
|
DISMISSED_GJ_UPDATE,
|
||||||
LAUNCH_ARGUMENTS,
|
LAUNCH_ARGUMENTS,
|
||||||
IGNORE_LOAD_FAILURE
|
IGNORE_LOAD_FAILURE,
|
||||||
|
LIMIT_ASPECT_RATIO
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun defaultValueForBooleanKey(key: Key): Boolean {
|
private fun defaultValueForBooleanKey(key: Key): Boolean {
|
||||||
@@ -161,6 +162,7 @@ class PreferenceUtils(private val sharedPreferences: SharedPreferences) {
|
|||||||
Key.DISMISSED_GJ_UPDATE -> "PreferenceDismissedGJUpdate"
|
Key.DISMISSED_GJ_UPDATE -> "PreferenceDismissedGJUpdate"
|
||||||
Key.LAUNCH_ARGUMENTS -> "PreferenceLaunchArguments"
|
Key.LAUNCH_ARGUMENTS -> "PreferenceLaunchArguments"
|
||||||
Key.IGNORE_LOAD_FAILURE -> "PreferenceIgnoreLoadFailure"
|
Key.IGNORE_LOAD_FAILURE -> "PreferenceIgnoreLoadFailure"
|
||||||
|
Key.LIMIT_ASPECT_RATIO -> "PreferenceLimitAspectRatio"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,8 @@
|
|||||||
<string name="preference_theme_light">Light</string>
|
<string name="preference_theme_light">Light</string>
|
||||||
<string name="preference_theme_dark">Dark</string>
|
<string name="preference_theme_dark">Dark</string>
|
||||||
<string name="preference_black_background_name">Black background in dark theme</string>
|
<string name="preference_black_background_name">Black background in dark theme</string>
|
||||||
|
<string name="preference_limit_aspect_ratio_name">Limit aspect ratio</string>
|
||||||
|
<string name="preference_limit_aspect_ratio_description">Restricts the game window to a 16:9 ratio.</string>
|
||||||
|
|
||||||
<string name="preference_category_updater">Updates</string>
|
<string name="preference_category_updater">Updates</string>
|
||||||
<string name="preference_update_automatically_name">Enable automatic updates</string>
|
<string name="preference_update_automatically_name">Enable automatic updates</string>
|
||||||
|
|||||||
Reference in new issue
Block a user