You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Misc editor tweaks and polishes:
- Using a bucketized approach to select the editor scale in order to avoid too high values
- Add default app dimensions: used on Android devices with free floating app windows to set the default app frame
- Add ability to launch the Game window in an adjacent frame when in multi window mode
(cherry picked from commit 6f7ec7f723)
This commit is contained in:
committed by
Rémi Verschelde
parent
99fb3205bd
commit
05fc140ee6
@@ -8,6 +8,8 @@ dependencies {
|
||||
implementation libraries.kotlinStdLib
|
||||
implementation libraries.androidxFragment
|
||||
implementation project(":lib")
|
||||
|
||||
implementation "androidx.window:window:1.0.0"
|
||||
}
|
||||
|
||||
android {
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
|
||||
android:process=":GodotProjectManager">
|
||||
|
||||
<layout android:defaultHeight="@dimen/editor_default_window_height"
|
||||
android:defaultWidth="@dimen/editor_default_window_width" />
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
@@ -47,6 +50,8 @@
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="userLandscape"
|
||||
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
|
||||
<layout android:defaultHeight="@dimen/editor_default_window_height"
|
||||
android:defaultWidth="@dimen/editor_default_window_width" />
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
@@ -57,6 +62,8 @@
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="userLandscape"
|
||||
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
|
||||
<layout android:defaultHeight="@dimen/editor_default_window_height"
|
||||
android:defaultWidth="@dimen/editor_default_window_width" />
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
|
||||
@@ -34,10 +34,13 @@ import org.godotengine.godot.FullScreenGodotApp;
|
||||
import org.godotengine.godot.utils.PermissionsUtil;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Debug;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.window.layout.WindowMetrics;
|
||||
import androidx.window.layout.WindowMetricsCalculator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -91,23 +94,47 @@ public class GodotEditor extends FullScreenGodotApp {
|
||||
public void onNewGodotInstanceRequested(String[] args) {
|
||||
// Parse the arguments to figure out which activity to start.
|
||||
Class<?> targetClass = GodotGame.class;
|
||||
// Whether we should launch the new godot instance in an adjacent window
|
||||
// https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
|
||||
boolean launchAdjacent = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && (isInMultiWindowMode() || isLargeScreen());
|
||||
|
||||
for (String arg : args) {
|
||||
if (EDITOR_ARG.equals(arg)) {
|
||||
targetClass = GodotEditor.class;
|
||||
launchAdjacent = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (PROJECT_MANAGER_ARG.equals(arg)) {
|
||||
targetClass = GodotProjectManager.class;
|
||||
launchAdjacent = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Launch a new activity
|
||||
Intent newInstance = new Intent(this, targetClass).putExtra(COMMAND_LINE_PARAMS, args);
|
||||
Intent newInstance = new Intent(this, targetClass)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(COMMAND_LINE_PARAMS, args);
|
||||
if (launchAdjacent) {
|
||||
newInstance.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
|
||||
}
|
||||
startActivity(newInstance);
|
||||
}
|
||||
|
||||
protected boolean isLargeScreen() {
|
||||
WindowMetrics metrics =
|
||||
WindowMetricsCalculator.getOrCreate().computeMaximumWindowMetrics(this);
|
||||
|
||||
// Get the screen's density scale
|
||||
float scale = getResources().getDisplayMetrics().density;
|
||||
|
||||
// Get the minimum window size
|
||||
float minSize = Math.min(metrics.getBounds().width(), metrics.getBounds().height());
|
||||
float minSizeDp = minSize / scale;
|
||||
return minSizeDp >= 840f; // Correspond to the EXPANDED window size class.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRequestedOrientation(int requestedOrientation) {
|
||||
if (!overrideOrientationRequest()) {
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="editor_default_window_height">600dp</dimen>
|
||||
<dimen name="editor_default_window_width">800dp</dimen>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user