From cc221bc0899f3fcbe055b7fe89937f04b1859c08 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 6 Jan 2022 12:06:52 -0500 Subject: [PATCH] v1.1.2: added inset support for notched iPhones in landscape --- .../java/com/watabou/utils/DeviceCompat.java | 9 +++++ .../src/main/java/com/watabou/utils/Rect.java | 4 +++ .../main/java/com/watabou/utils/RectF.java | 4 +++ .../scenes/GameScene.java | 33 ++++++++++++------- .../ui/ActionIndicator.java | 7 ++-- .../ui/AttackIndicator.java | 9 ++--- .../ui/DangerIndicator.java | 4 ++- .../ui/LootIndicator.java | 8 +++-- .../ui/ResumeIndicator.java | 5 +-- .../shatteredpixeldungeon/ui/Tag.java | 6 ++++ 10 files changed, 64 insertions(+), 25 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java b/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java index 5c65aaba4..d985a36ce 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java +++ b/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java @@ -71,4 +71,13 @@ public class DeviceCompat { Gdx.app.log( tag, message ); } + public static RectF getSafeInsets(){ + RectF result = new RectF(); + result.left = Gdx.graphics.getSafeInsetLeft(); + result.top = Gdx.graphics.getSafeInsetTop(); + result.right = Gdx.graphics.getSafeInsetRight(); + result.bottom = Gdx.graphics.getSafeInsetBottom(); + return result; + } + } diff --git a/SPD-classes/src/main/java/com/watabou/utils/Rect.java b/SPD-classes/src/main/java/com/watabou/utils/Rect.java index 429fcd9bc..c2520d474 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/Rect.java +++ b/SPD-classes/src/main/java/com/watabou/utils/Rect.java @@ -148,6 +148,10 @@ public class Rect { return shrink( 1 ); } + public Rect scale( int d ){ + return new Rect( left * d, top * d, right * d, bottom * d ); + } + public ArrayList getPoints() { ArrayList points = new ArrayList<>(); for (int i = left; i <= right; i++) diff --git a/SPD-classes/src/main/java/com/watabou/utils/RectF.java b/SPD-classes/src/main/java/com/watabou/utils/RectF.java index 038955682..26d5a87c9 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/RectF.java +++ b/SPD-classes/src/main/java/com/watabou/utils/RectF.java @@ -143,5 +143,9 @@ public class RectF { public RectF shrink() { return shrink( 1 ); } + + public RectF scale( float d ){ + return new RectF( left * d, top * d, right * d, bottom * d ); + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index fc8061ab4..eda77de90 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -87,6 +87,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.LootIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton; import com.shatteredpixel.shatteredpixeldungeon.ui.ResumeIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.StatusPane; +import com.shatteredpixel.shatteredpixeldungeon.ui.Tag; import com.shatteredpixel.shatteredpixeldungeon.ui.TargetHealthIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.Toast; import com.shatteredpixel.shatteredpixeldungeon.ui.Toolbar; @@ -116,8 +117,10 @@ import com.watabou.noosa.Visual; import com.watabou.noosa.audio.Music; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.particles.Emitter; +import com.watabou.utils.DeviceCompat; import com.watabou.utils.GameMath; import com.watabou.utils.Random; +import com.watabou.utils.RectF; import java.io.IOException; import java.util.ArrayList; @@ -725,38 +728,44 @@ public class GameScene extends PixelScene { if (scene == null) return; - float tagLeft = SPDSettings.flipTags() ? 0 : uiCamera.width - scene.attack.width(); + //primarily for phones displays with notches + //TODO Android never draws into notch atm, perhaps allow it for center notches? + RectF insets = DeviceCompat.getSafeInsets(); + insets = insets.scale(1f / uiCamera.zoom); + + boolean tagsOnLeft = SPDSettings.flipTags(); + float tagWidth = Tag.SIZE + (tagsOnLeft ? insets.left : insets.right); + float tagLeft = tagsOnLeft ? 0 : uiCamera.width - tagWidth; if (SPDSettings.flipTags()) { - scene.log.setRect(scene.attack.width(), scene.toolbar.top()-2, uiCamera.width - scene.attack.width(), 0); + scene.log.setRect(tagWidth, scene.toolbar.top()-2, uiCamera.width - tagWidth - insets.right, 0); } else { - scene.log.setRect(0, scene.toolbar.top()-2, uiCamera.width - scene.attack.width(), 0 ); + scene.log.setRect(insets.left, scene.toolbar.top()-2, uiCamera.width - tagWidth - insets.left, 0); } float pos = scene.toolbar.top(); - //FIXME adjusting this to position even without visibility resulted in deadlocks if (scene.tagAttack){ - scene.attack.setPos( tagLeft, pos - scene.attack.height()); - scene.attack.flip(tagLeft == 0); + scene.attack.setRect( tagLeft, pos - Tag.SIZE, tagWidth, Tag.SIZE ); + scene.attack.flip(tagsOnLeft); pos = scene.attack.top(); } if (scene.tagLoot) { - scene.loot.setPos( tagLeft, pos - scene.loot.height() ); - scene.loot.flip(tagLeft == 0); + scene.loot.setRect( tagLeft, pos - Tag.SIZE, tagWidth, Tag.SIZE ); + scene.loot.flip(tagsOnLeft); pos = scene.loot.top(); } if (scene.tagAction) { - scene.action.setPos( tagLeft, pos - scene.action.height() ); - scene.action.flip(tagLeft == 0); + scene.action.setRect( tagLeft, pos - Tag.SIZE, tagWidth, Tag.SIZE ); + scene.action.flip(tagsOnLeft); pos = scene.action.top(); } if (scene.tagResume) { - scene.resume.setPos(tagLeft, pos - scene.resume.height()); - scene.resume.flip(tagLeft == 0); + scene.resume.setRect( tagLeft, pos - Tag.SIZE, tagWidth, Tag.SIZE ); + scene.resume.flip(tagsOnLeft); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java index 9179ed1b5..87427f3bd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java @@ -39,7 +39,7 @@ public class ActionIndicator extends Tag { instance = this; - setSize( 24, 24 ); + setSize( SIZE, SIZE ); visible = false; } @@ -59,8 +59,9 @@ public class ActionIndicator extends Tag { super.layout(); if (icon != null){ - icon.x = x + (width - icon.width()) / 2; - icon.y = y + (height - icon.height()) / 2; + if (!flipped) icon.x = x + (SIZE - icon.width()) / 2f + 1; + else icon.x = x + width - (SIZE + icon.width()) / 2f - 1; + icon.y = y + (height - icon.height()) / 2f; PixelScene.align(icon); if (!members.contains(icon)) add(icon); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java index c026d7abf..e0b4168bf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java @@ -56,7 +56,7 @@ public class AttackIndicator extends Tag { instance = this; lastTarget = null; - setSize(24, 24); + setSize(SIZE, SIZE); visible(false); enable(false); } @@ -75,10 +75,11 @@ public class AttackIndicator extends Tag { @Override protected synchronized void layout() { super.layout(); - + if (sprite != null) { - sprite.x = x + (width - sprite.width()) / 2 + 1; - sprite.y = y + (height - sprite.height()) / 2; + if (!flipped) sprite.x = x + (SIZE - sprite.width()) / 2f + 1; + else sprite.x = x + width - (SIZE + sprite.width()) / 2f - 1; + sprite.y = y + (height - sprite.height()) / 2f; PixelScene.align(sprite); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java index a92fb3492..d86e643e6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java @@ -40,11 +40,13 @@ public class DangerIndicator extends Tag { private int enemyIndex = 0; private int lastNumber = -1; + + public static int HEIGHT = 16; public DangerIndicator() { super( 0xFF4C4C ); - setSize( 24, 16 ); + setSize( SIZE, HEIGHT ); visible = false; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java index 695681bd7..fe7857ef2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java @@ -37,7 +37,7 @@ public class LootIndicator extends Tag { public LootIndicator() { super( 0x1F75CC ); - setSize( 24, 24 ); + setSize( SIZE, SIZE ); visible = false; } @@ -66,8 +66,10 @@ public class LootIndicator extends Tag { @Override protected void layout() { super.layout(); - - slot.setRect( x + 2, y + 3, width - 3, height - 6 ); + + if (!flipped) slot.setRect( x + 1, y, SIZE, height ); + else slot.setRect( x + (width() - SIZE) - 1, y, SIZE, height ); + } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java index 14b954421..18bf2860b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java @@ -34,7 +34,7 @@ public class ResumeIndicator extends Tag { public ResumeIndicator() { super(0xCDD5C0); - setSize( 24, 24 ); + setSize( SIZE, SIZE ); visible = false; @@ -57,7 +57,8 @@ public class ResumeIndicator extends Tag { protected void layout() { super.layout(); - icon.x = x+1 + (width - icon.width) / 2f; + if (!flipped) icon.x = x + (SIZE - icon.width()) / 2f + 1; + else icon.x = x + width - (SIZE + icon.width()) / 2f - 1; icon.y = y + (height - icon.height) / 2f; PixelScene.align(icon); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java index a00e4398c..184040a9a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java @@ -34,6 +34,10 @@ public class Tag extends Button { protected NinePatch bg; protected float lightness = 0; + + public static int SIZE = 24; + + protected boolean flipped = false; public Tag( int color ) { super(); @@ -68,7 +72,9 @@ public class Tag extends Button { } public void flip(boolean value){ + flipped = value; bg.flipHorizontal(value); + layout(); } @Override