v0.8.0: added window size/fullscreen support to desktop, refactored landscape code

This commit is contained in:
Evan Debenham 2019-10-29 13:04:14 -04:00
parent f038bde5cc
commit b88036da0b
27 changed files with 182 additions and 85 deletions

View File

@ -62,6 +62,10 @@ public class Scene extends Group {
} }
public static boolean landscape(){
return Game.width > Game.height;
}
@Override @Override
public void update() { public void update() {
super.update(); super.update();

View File

@ -21,6 +21,7 @@
package com.watabou.utils; package com.watabou.utils;
import com.badlogic.gdx.Application;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
@ -34,10 +35,14 @@ public class DeviceCompat {
return Gdx.app.getVersion() >= 19; return Gdx.app.getVersion() >= 19;
default: default:
//TODO implement functionality for other platforms here //TODO implement functionality for other platforms here
return false; return true;
} }
} }
public static boolean isDesktop(){
return Gdx.app.getType() == Application.ApplicationType.Desktop;
}
public static boolean legacyDevice(){ public static boolean legacyDevice(){
switch (Gdx.app.getType()){ switch (Gdx.app.getType()){
case Android: case Android:

View File

@ -70,12 +70,10 @@ public class AndroidGame extends AndroidApplication {
SPDSettings.set(instance.getPreferences("ShatteredPixelDungeon")); SPDSettings.set(instance.getPreferences("ShatteredPixelDungeon"));
//set desired orientation (if it exists) before initializing the app. //set desired orientation (if it exists) before initializing the app.
if (SPDSettings.landscapeFromSettings() != null) { if (SPDSettings.landscape() != null) {
if (SPDSettings.landscapeFromSettings()){ AndroidGame.instance.setRequestedOrientation( SPDSettings.landscape() ?
instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE :
} else { ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT );
instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
} }
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

View File

@ -45,11 +45,11 @@ import java.util.regex.Pattern;
public class AndroidPlatformSupport extends PlatformSupport { public class AndroidPlatformSupport extends PlatformSupport {
public void updateDisplaySize(){ public void updateDisplaySize(){
boolean landscape = SPDSettings.landscape(); if (SPDSettings.landscape() != null) {
AndroidGame.instance.setRequestedOrientation( SPDSettings.landscape() ?
AndroidGame.instance.setRequestedOrientation(landscape ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE :
ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT );
ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); }
if (AndroidGame.view.getMeasuredWidth() == 0 || AndroidGame.view.getMeasuredHeight() == 0) if (AndroidGame.view.getMeasuredWidth() == 0 || AndroidGame.view.getMeasuredHeight() == 0)
return; return;
@ -57,7 +57,7 @@ public class AndroidPlatformSupport extends PlatformSupport {
Game.dispWidth = AndroidGame.view.getMeasuredWidth(); Game.dispWidth = AndroidGame.view.getMeasuredWidth();
Game.dispHeight = AndroidGame.view.getMeasuredHeight(); Game.dispHeight = AndroidGame.view.getMeasuredHeight();
if ((Game.dispWidth > Game.dispHeight) != landscape){ if ((Game.dispWidth >= Game.dispHeight) != PixelScene.landscape()){
int tmp = Game.dispWidth; int tmp = Game.dispWidth;
Game.dispWidth = Game.dispHeight; Game.dispWidth = Game.dispHeight;
Game.dispHeight = tmp; Game.dispHeight = tmp;

View File

@ -71,14 +71,14 @@ public class WndAndroidTextInput extends Window {
super(); super();
//need to offset to give space for the soft keyboard //need to offset to give space for the soft keyboard
if (SPDSettings.landscape()) { if (PixelScene.landscape()) {
offset( multiLine ? -45 : -45 ); offset( multiLine ? -45 : -45 );
} else { } else {
offset( multiLine ? -60 : -45 ); offset( multiLine ? -60 : -45 );
} }
final int width; final int width;
if (SPDSettings.landscape() && multiLine){ if (PixelScene.landscape() && multiLine){
width = W_LAND_MULTI; //more editing space for landscape users width = W_LAND_MULTI; //more editing space for landscape users
} else { } else {
width = WIDTH; width = WIDTH;

View File

@ -23,10 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon;
import com.shatteredpixel.shatteredpixeldungeon.messages.Languages; import com.shatteredpixel.shatteredpixeldungeon.messages.Languages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.watabou.noosa.Game; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.watabou.noosa.audio.Music; import com.watabou.noosa.audio.Music;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
import com.watabou.utils.GameSettings; import com.watabou.utils.GameSettings;
import com.watabou.utils.Point;
import java.util.Locale; import java.util.Locale;
@ -69,13 +70,9 @@ public class SPDSettings extends GameSettings {
((ShatteredPixelDungeon)ShatteredPixelDungeon.instance).updateDisplaySize(); ((ShatteredPixelDungeon)ShatteredPixelDungeon.instance).updateDisplaySize();
} }
//FIXME in certain multi-window cases this can disagree with the actual screen size //can return null because we need to directly handle the case of landscape not being set
//there should be an option to check for landscape the setting, and actual screen size // as there are different defaults for different devices
public static boolean landscape() { public static Boolean landscape(){
return getBoolean(KEY_LANDSCAPE, Game.dispWidth > Game.dispHeight);
}
public static Boolean landscapeFromSettings(){
if (contains(KEY_LANDSCAPE)){ if (contains(KEY_LANDSCAPE)){
return getBoolean(KEY_LANDSCAPE, false); return getBoolean(KEY_LANDSCAPE, false);
} else { } else {
@ -154,7 +151,7 @@ public class SPDSettings extends GameSettings {
} }
public static String toolbarMode() { public static String toolbarMode() {
return getString(KEY_BARMODE, !SPDSettings.landscape() ? "SPLIT" : "GROUP"); return getString(KEY_BARMODE, PixelScene.landscape() ? "GROUP" : "SPLIT");
} }
//Game State //Game State
@ -257,4 +254,30 @@ public class SPDSettings extends GameSettings {
(language() == Languages.KOREAN || language() == Languages.CHINESE || language() == Languages.JAPANESE)); (language() == Languages.KOREAN || language() == Languages.CHINESE || language() == Languages.JAPANESE));
} }
//Window management (desktop only atm)
public static final String KEY_WINDOW_WIDTH = "window_width";
public static final String KEY_WINDOW_HEIGHT = "window_height";
public static final String KEY_WINDOW_MAXIMIZED = "window_maximized";
public static void windowResolution( Point p ){
put(KEY_WINDOW_WIDTH, p.x);
put(KEY_WINDOW_HEIGHT, p.y);
}
public static Point windowResolution(){
return new Point(
getInt( KEY_WINDOW_WIDTH, 960 ),
getInt( KEY_WINDOW_HEIGHT, 640 )
);
}
public static void windowMaximized( boolean value ){
put( KEY_WINDOW_MAXIMIZED, value );
}
public static boolean windowMaximized(){
return getBoolean( KEY_WINDOW_MAXIMIZED, false );
}
} }

View File

@ -21,7 +21,6 @@
package com.shatteredpixel.shatteredpixeldungeon.scenes; package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.effects.Flare; import com.shatteredpixel.shatteredpixeldungeon.effects.Flare;
import com.shatteredpixel.shatteredpixeldungeon.ui.Archs; import com.shatteredpixel.shatteredpixeldungeon.ui.Archs;
@ -56,9 +55,9 @@ public class AboutScene extends PixelScene {
public void create() { public void create() {
super.create(); super.create();
final float colWidth = Camera.main.width / (SPDSettings.landscape() ? 2 : 1); final float colWidth = Camera.main.width / (landscape() ? 2 : 1);
final float colTop = (Camera.main.height / 2) - (SPDSettings.landscape() ? 30 : 90); final float colTop = (Camera.main.height / 2) - (landscape() ? 30 : 90);
final float wataOffset = SPDSettings.landscape() ? colWidth : 0; final float wataOffset = landscape() ? colWidth : 0;
Image shpx = Icons.SHPX.get(); Image shpx = Icons.SHPX.get();
shpx.x = (colWidth - shpx.width()) / 2; shpx.x = (colWidth - shpx.width()) / 2;
@ -103,9 +102,7 @@ public class AboutScene extends PixelScene {
Image wata = Icons.WATA.get(); Image wata = Icons.WATA.get();
wata.x = wataOffset + (colWidth - wata.width()) / 2; wata.x = wataOffset + (colWidth - wata.width()) / 2;
wata.y = SPDSettings.landscape() ? wata.y = landscape() ? colTop: shpxlink.top() + wata.height + 20;
colTop:
shpxlink.top() + wata.height + 20;
align(wata); align(wata);
add( wata ); add( wata );

View File

@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Chrome;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
@ -258,7 +257,7 @@ public class AlchemyScene extends PixelScene {
{ {
WndJournal.AlchemyTab t = new WndJournal.AlchemyTab(); WndJournal.AlchemyTab t = new WndJournal.AlchemyTab();
int w, h; int w, h;
if (SPDSettings.landscape()) { if (landscape()) {
w = WndJournal.WIDTH_L; h = WndJournal.HEIGHT_L; w = WndJournal.WIDTH_L; h = WndJournal.HEIGHT_L;
} else { } else {
w = WndJournal.WIDTH_P; h = WndJournal.HEIGHT_P; w = WndJournal.WIDTH_P; h = WndJournal.HEIGHT_P;

View File

@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
@ -83,8 +82,8 @@ public class BadgesScene extends PixelScene {
blankBadges = Math.max(0, blankBadges); blankBadges = Math.max(0, blankBadges);
//guarantees a max of 5 rows in landscape, and 8 in portrait, assuming a max of 40 buttons //guarantees a max of 5 rows in landscape, and 8 in portrait, assuming a max of 40 buttons
int nCols = SPDSettings.landscape() ? 7 : 4; int nCols = landscape() ? 7 : 4;
if (badges.size() + blankBadges > 32 && !SPDSettings.landscape()) nCols++; if (badges.size() + blankBadges > 32 && !landscape()) nCols++;
int nRows = 1 + (blankBadges + badges.size())/nCols; int nRows = 1 + (blankBadges + badges.size())/nCols;

View File

@ -74,7 +74,7 @@ public class PixelScene extends Scene {
GameScene.scene = null; GameScene.scene = null;
float minWidth, minHeight; float minWidth, minHeight;
if (SPDSettings.landscape()) { if (landscape()) {
minWidth = MIN_WIDTH_L; minWidth = MIN_WIDTH_L;
minHeight = MIN_HEIGHT_L; minHeight = MIN_HEIGHT_L;
} else { } else {

View File

@ -24,7 +24,6 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Chrome;
import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress; import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
import com.shatteredpixel.shatteredpixeldungeon.journal.Journal; import com.shatteredpixel.shatteredpixeldungeon.journal.Journal;
@ -80,12 +79,12 @@ public class StartScene extends PixelScene {
ArrayList<GamesInProgress.Info> games = GamesInProgress.checkAll(); ArrayList<GamesInProgress.Info> games = GamesInProgress.checkAll();
int slotGap = SPDSettings.landscape() ? 5 : 10; int slotGap = landscape() ? 5 : 10;
int slotCount = Math.min(GamesInProgress.MAX_SLOTS, games.size()+1); int slotCount = Math.min(GamesInProgress.MAX_SLOTS, games.size()+1);
int slotsHeight = slotCount*SLOT_HEIGHT + (slotCount-1)* slotGap; int slotsHeight = slotCount*SLOT_HEIGHT + (slotCount-1)* slotGap;
float yPos = (h - slotsHeight)/2f; float yPos = (h - slotsHeight)/2f;
if (SPDSettings.landscape()) yPos += 8; if (landscape()) yPos += 8;
for (GamesInProgress.Info game : games) { for (GamesInProgress.Info game : games) {
SaveSlotButton existingGame = new SaveSlotButton(); SaveSlotButton existingGame = new SaveSlotButton();

View File

@ -24,7 +24,6 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Chrome;
import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress; import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.effects.BannerSprites; import com.shatteredpixel.shatteredpixeldungeon.effects.BannerSprites;
import com.shatteredpixel.shatteredpixeldungeon.effects.Fireball; import com.shatteredpixel.shatteredpixeldungeon.effects.Fireball;
@ -69,7 +68,7 @@ public class TitleScene extends PixelScene {
float topRegion = Math.max(title.height, h*0.45f); float topRegion = Math.max(title.height, h*0.45f);
title.x = (w - title.width()) / 2f; title.x = (w - title.width()) / 2f;
if (SPDSettings.landscape()) { if (landscape()) {
title.y = (topRegion - title.height()) / 2f; title.y = (topRegion - title.height()) / 2f;
} else { } else {
title.y = 20 + (topRegion - title.height() - 20) / 2f; title.y = 20 + (topRegion - title.height() - 20) / 2f;
@ -181,11 +180,11 @@ public class TitleScene extends PixelScene {
add(btnAbout); add(btnAbout);
final int BTN_HEIGHT = 21; final int BTN_HEIGHT = 21;
int GAP = (int)(h - topRegion - (SPDSettings.landscape() ? 3 : 4)*BTN_HEIGHT)/3; int GAP = (int)(h - topRegion - (landscape() ? 3 : 4)*BTN_HEIGHT)/3;
GAP /= SPDSettings.landscape() ? 3 : 4; GAP /= landscape() ? 3 : 4;
GAP = Math.max(GAP, 2); GAP = Math.max(GAP, 2);
if (SPDSettings.landscape()) { if (landscape()) {
btnPlay.setRect(title.x-50, topRegion+GAP, ((title.width()+100)/2)-1, BTN_HEIGHT); btnPlay.setRect(title.x-50, topRegion+GAP, ((title.width()+100)/2)-1, BTN_HEIGHT);
align(btnPlay); align(btnPlay);
btnSupport.setRect(btnPlay.right()+2, btnPlay.top(), btnPlay.width(), BTN_HEIGHT); btnSupport.setRect(btnPlay.right()+2, btnPlay.top(), btnPlay.width(), BTN_HEIGHT);

View File

@ -68,7 +68,7 @@ public class WelcomeScene extends PixelScene {
float topRegion = Math.max(title.height, h*0.45f); float topRegion = Math.max(title.height, h*0.45f);
title.x = (w - title.width()) / 2f; title.x = (w - title.width()) / 2f;
if (SPDSettings.landscape()) { if (landscape()) {
title.y = (topRegion - title.height()) / 2f; title.y = (topRegion - title.height()) / 2f;
} else { } else {
title.y = 20 + (topRegion - title.height() - 20) / 2f; title.y = 20 + (topRegion - title.height() - 20) / 2f;

View File

@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem; import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem;
@ -131,7 +130,7 @@ public class WndBag extends WndTabbed {
lastMode = mode; lastMode = mode;
lastBag = bag; lastBag = bag;
nCols = SPDSettings.landscape() ? COLS_L : COLS_P; nCols = PixelScene.landscape() ? COLS_L : COLS_P;
nRows = (int)Math.ceil((Belongings.BACKPACK_SIZE + 4) / (float)nCols); nRows = (int)Math.ceil((Belongings.BACKPACK_SIZE + 4) / (float)nCols);
int slotsWidth = SLOT_WIDTH * nCols + SLOT_MARGIN * (nCols - 1); int slotsWidth = SLOT_WIDTH * nCols + SLOT_MARGIN * (nCols - 1);

View File

@ -22,7 +22,6 @@
package com.shatteredpixel.shatteredpixeldungeon.windows; package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.journal.Document; import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
@ -54,8 +53,8 @@ public class WndDocument extends Window {
public WndDocument( Document doc ){ public WndDocument( Document doc ){
int w = SPDSettings.landscape() ? WIDTH_L : WIDTH_P; int w = PixelScene.landscape() ? WIDTH_L : WIDTH_P;
int h = SPDSettings.landscape() ? HEIGHT_L : HEIGHT_P; int h = PixelScene.landscape() ? HEIGHT_L : HEIGHT_P;
resize(w, h); resize(w, h);

View File

@ -21,7 +21,6 @@
package com.shatteredpixel.shatteredpixeldungeon.windows; package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
@ -57,7 +56,7 @@ public class WndInfoItem extends Window {
private void fillFields( Heap heap ) { private void fillFields( Heap heap ) {
int width = SPDSettings.landscape() ? WIDTH_L : WIDTH_P; int width = PixelScene.landscape() ? WIDTH_L : WIDTH_P;
IconTitle titlebar = new IconTitle( heap ); IconTitle titlebar = new IconTitle( heap );
titlebar.color( TITLE_COLOR ); titlebar.color( TITLE_COLOR );
@ -81,7 +80,7 @@ public class WndInfoItem extends Window {
color = ItemSlot.DEGRADED; color = ItemSlot.DEGRADED;
} }
int width = SPDSettings.landscape() ? WIDTH_L : WIDTH_P; int width = PixelScene.landscape() ? WIDTH_L : WIDTH_P;
IconTitle titlebar = new IconTitle( item ); IconTitle titlebar = new IconTitle( item );
titlebar.color( color ); titlebar.color( color );

View File

@ -22,7 +22,6 @@
package com.shatteredpixel.shatteredpixeldungeon.windows; package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
@ -65,7 +64,7 @@ public class WndItem extends Window {
info.maxWidth(width); info.maxWidth(width);
//info box can go out of the screen on landscape, so widen it //info box can go out of the screen on landscape, so widen it
while (SPDSettings.landscape() while (PixelScene.landscape()
&& info.height() > 100 && info.height() > 100
&& width < WIDTH_MAX){ && width < WIDTH_MAX){
width += 20; width += 20;

View File

@ -22,7 +22,6 @@
package com.shatteredpixel.shatteredpixeldungeon.windows; package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
@ -71,8 +70,8 @@ public class WndJournal extends WndTabbed {
public WndJournal(){ public WndJournal(){
int width = SPDSettings.landscape() ? WIDTH_L : WIDTH_P; int width = PixelScene.landscape() ? WIDTH_L : WIDTH_P;
int height = SPDSettings.landscape() ? HEIGHT_L : HEIGHT_P; int height = PixelScene.landscape() ? HEIGHT_L : HEIGHT_P;
resize(width, height); resize(width, height);
@ -342,7 +341,7 @@ public class WndJournal extends WndTabbed {
protected void layout() { protected void layout() {
super.layout(); super.layout();
if (SPDSettings.landscape()){ if (PixelScene.landscape()){
float buttonWidth = width()/pageButtons.length; float buttonWidth = width()/pageButtons.length;
for (int i = 0; i < NUM_BUTTONS; i++) { for (int i = 0; i < NUM_BUTTONS; i++) {
pageButtons[i].setRect(i*buttonWidth, 0, buttonWidth, ITEM_HEIGHT); pageButtons[i].setRect(i*buttonWidth, 0, buttonWidth, ITEM_HEIGHT);

View File

@ -94,18 +94,18 @@ public class WndLangs extends Window {
} }
} }
btn.setSize(BTN_WIDTH, BTN_HEIGHT); btn.setSize(BTN_WIDTH, BTN_HEIGHT);
if (SPDSettings.landscape() && i % 2 == 1){ if (PixelScene.landscape() && i % 2 == 1){
btn.setPos(BTN_WIDTH+1, y-(BTN_HEIGHT + 1)); btn.setPos(BTN_WIDTH+1, y-(BTN_HEIGHT + 1));
} else { } else {
btn.setPos(0, y); btn.setPos(0, y);
y += BTN_HEIGHT; y += BTN_HEIGHT;
if (SPDSettings.landscape()) y++; if (PixelScene.landscape()) y++;
} }
add(btn); add(btn);
} }
y = Math.max(MIN_HEIGHT, y); y = Math.max(MIN_HEIGHT, y);
resize(SPDSettings.landscape() ? WIDTH_L : WIDTH_P, y); resize(PixelScene.landscape() ? WIDTH_L : WIDTH_P, y);
int textLeft = width - 65; int textLeft = width - 65;
int textWidth = width - textLeft; int textWidth = width - textLeft;
@ -155,7 +155,7 @@ public class WndLangs extends Window {
String[] translators = currLang.translators(); String[] translators = currLang.translators();
boolean wide = false; boolean wide = false;
if (SPDSettings.landscape() && (reviewers.length + translators.length) > 10){ if (PixelScene.landscape() && (reviewers.length + translators.length) > 10){
wide = true; wide = true;
} }

View File

@ -21,7 +21,6 @@
package com.shatteredpixel.shatteredpixeldungeon.windows; package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
@ -37,7 +36,7 @@ public class WndMessage extends Window {
super(); super();
RenderedTextBlock info = PixelScene.renderTextBlock( text, 6 ); RenderedTextBlock info = PixelScene.renderTextBlock( text, 6 );
info.maxWidth((SPDSettings.landscape() ? WIDTH_L : WIDTH_P) - MARGIN * 2); info.maxWidth((PixelScene.landscape() ? WIDTH_L : WIDTH_P) - MARGIN * 2);
info.setPos(MARGIN, MARGIN); info.setPos(MARGIN, MARGIN);
add( info ); add( info );

View File

@ -21,7 +21,6 @@
package com.shatteredpixel.shatteredpixeldungeon.windows; package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
@ -38,7 +37,7 @@ public class WndOptions extends Window {
public WndOptions( String title, String message, String... options ) { public WndOptions( String title, String message, String... options ) {
super(); super();
int width = SPDSettings.landscape() ? WIDTH_L : WIDTH_P; int width = PixelScene.landscape() ? WIDTH_L : WIDTH_P;
RenderedTextBlock tfTitle = PixelScene.renderTextBlock( title, 9 ); RenderedTextBlock tfTitle = PixelScene.renderTextBlock( title, 9 );
tfTitle.hardlight( TITLE_COLOR ); tfTitle.hardlight( TITLE_COLOR );

View File

@ -37,6 +37,7 @@ import com.watabou.noosa.Group;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
import com.watabou.utils.DeviceCompat; import com.watabou.utils.DeviceCompat;
//TODO seeing as a fair bit of this is platform-dependant, might be better to have a per-platform wndsettings
public class WndSettings extends WndTabbed { public class WndSettings extends WndTabbed {
private static final int WIDTH = 112; private static final int WIDTH = 112;
@ -154,18 +155,18 @@ public class WndSettings extends WndTabbed {
add(chkSaver); add(chkSaver);
} }
RedButton btnOrientation = new RedButton( SPDSettings.landscape() ? //TODO need to disable this in some situations. (desktop, android splitscreen)
RedButton btnOrientation = new RedButton( PixelScene.landscape() ?
Messages.get(this, "portrait") Messages.get(this, "portrait")
: Messages.get(this, "landscape") ) { : Messages.get(this, "landscape") ) {
@Override @Override
protected void onClick() { protected void onClick() {
SPDSettings.landscape(!SPDSettings.landscape()); SPDSettings.landscape(!PixelScene.landscape());
} }
}; };
btnOrientation.setRect(0, chkSaver.bottom() + GAP_TINY, WIDTH, BTN_HEIGHT); btnOrientation.setRect(0, chkSaver.bottom() + GAP_TINY, WIDTH, BTN_HEIGHT);
add( btnOrientation ); add( btnOrientation );
OptionSlider brightness = new OptionSlider(Messages.get(this, "brightness"), OptionSlider brightness = new OptionSlider(Messages.get(this, "brightness"),
Messages.get(this, "dark"), Messages.get(this, "bright"), -2, 2) { Messages.get(this, "dark"), Messages.get(this, "bright"), -2, 2) {
@Override @Override
@ -267,17 +268,20 @@ public class WndSettings extends WndTabbed {
slots.setRect(0, chkFlipTags.bottom() + GAP_TINY, WIDTH, SLIDER_HEIGHT); slots.setRect(0, chkFlipTags.bottom() + GAP_TINY, WIDTH, SLIDER_HEIGHT);
add(slots); add(slots);
CheckBox chkImmersive = new CheckBox( Messages.get(this, "nav_bar") ) { CheckBox chkFullscreen = new CheckBox( Messages.get(this, "nav_bar") ) {
@Override @Override
protected void onClick() { protected void onClick() {
super.onClick(); super.onClick();
SPDSettings.fullscreen(checked()); SPDSettings.fullscreen(checked());
} }
}; };
chkImmersive.setRect( 0, slots.bottom() + GAP_SML, WIDTH, BTN_HEIGHT ); chkFullscreen.setRect( 0, slots.bottom() + GAP_SML, WIDTH, BTN_HEIGHT );
chkImmersive.checked(SPDSettings.fullscreen()); chkFullscreen.checked(SPDSettings.fullscreen());
chkImmersive.enable(DeviceCompat.supportsFullScreen()); if (DeviceCompat.isDesktop()){
add(chkImmersive); chkFullscreen.text( "Fullscreen" );
}
chkFullscreen.enable(DeviceCompat.supportsFullScreen());
add(chkFullscreen);
CheckBox chkFont = new CheckBox(Messages.get(this, "system_font")){ CheckBox chkFont = new CheckBox(Messages.get(this, "system_font")){
@Override @Override
@ -296,7 +300,7 @@ public class WndSettings extends WndTabbed {
}); });
} }
}; };
chkFont.setRect(0, chkImmersive.bottom() + GAP_TINY, WIDTH, BTN_HEIGHT); chkFont.setRect(0, chkFullscreen.bottom() + GAP_TINY, WIDTH, BTN_HEIGHT);
chkFont.checked(SPDSettings.systemFont()); chkFont.checked(SPDSettings.systemFont());
add(chkFont); add(chkFont);
} }

View File

@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Chrome;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
@ -67,7 +66,7 @@ public class WndStory extends Window {
super( 0, 0, Chrome.get( Chrome.Type.SCROLL ) ); super( 0, 0, Chrome.get( Chrome.Type.SCROLL ) );
tf = PixelScene.renderTextBlock( text, 6 ); tf = PixelScene.renderTextBlock( text, 6 );
tf.maxWidth(SPDSettings.landscape() ? tf.maxWidth(PixelScene.landscape() ?
WIDTH_L - MARGIN * 2: WIDTH_L - MARGIN * 2:
WIDTH_P - MARGIN *2); WIDTH_P - MARGIN *2);
tf.invert(); tf.invert();

View File

@ -21,7 +21,6 @@
package com.shatteredpixel.shatteredpixeldungeon.windows; package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
@ -44,7 +43,7 @@ public class WndTitledMessage extends Window {
super(); super();
int width = SPDSettings.landscape() ? WIDTH_L : WIDTH_P; int width = PixelScene.landscape() ? WIDTH_L : WIDTH_P;
titlebar.setRect( 0, 0, width, 0 ); titlebar.setRect( 0, 0, width, 0 );
add(titlebar); add(titlebar);

View File

@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.utils.FileUtils; import com.watabou.utils.FileUtils;
import com.watabou.utils.Point;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
@ -94,8 +95,14 @@ public class DesktopLauncher {
SPDSettings.set( new Lwjgl3Preferences( "pd-prefs", basePath) ); SPDSettings.set( new Lwjgl3Preferences( "pd-prefs", basePath) );
FileUtils.setDefaultFileProperties( Files.FileType.External, basePath ); FileUtils.setDefaultFileProperties( Files.FileType.External, basePath );
config.setWindowSizeLimits( 800, 450, -1, -1 ); config.setWindowSizeLimits( 960, 640, -1, -1 );
config.setWindowedMode( 1920, 1080 ); Point p = SPDSettings.windowResolution();
config.setWindowedMode( p.x, p.y );
config.setAutoIconify( true );
//we set fullscreen/maximized in the listener as doing it through the config seems to be buggy
DesktopWindowListener listener = new DesktopWindowListener();
config.setWindowListener( listener );
new Lwjgl3Application(new ShatteredPixelDungeon(new DesktopPlatformSupport()), config); new Lwjgl3Application(new ShatteredPixelDungeon(new DesktopPlatformSupport()), config);
} }

View File

@ -26,8 +26,10 @@ import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.PixmapPacker; import com.badlogic.gdx.graphics.g2d.PixmapPacker;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.utils.PlatformSupport; import com.watabou.utils.PlatformSupport;
import com.watabou.utils.Point;
import java.util.HashMap; import java.util.HashMap;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -36,12 +38,24 @@ public class DesktopPlatformSupport extends PlatformSupport {
@Override @Override
public void updateDisplaySize() { public void updateDisplaySize() {
if (!SPDSettings.fullscreen()) {
SPDSettings.windowResolution( new Point( Game.width, Game.height ) );
}
} }
@Override @Override
public void updateSystemUI() { public void updateSystemUI() {
Gdx.app.postRunnable( new Runnable() {
@Override
public void run () {
if (SPDSettings.fullscreen()){
Gdx.graphics.setFullscreenMode( Gdx.graphics.getDisplayMode() );
} else {
Point p = SPDSettings.windowResolution();
Gdx.graphics.setWindowedMode( p.x, p.y );
}
}
} );
} }
@Override @Override

View File

@ -0,0 +1,58 @@
/*
* Pixel Dungeon
* Copyright (C) 2012-2015 Oleg Dolya
*
* Shattered Pixel Dungeon
* Copyright (C) 2014-2019 Evan Debenham
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.shatteredpixel.shatteredpixeldungeon.desktop;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3WindowListener;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
public class DesktopWindowListener implements Lwjgl3WindowListener {
@Override
public void created ( Lwjgl3Window lwjgl3Window ) {
if (SPDSettings.fullscreen()){
lwjgl3Window.postRunnable( new Runnable() {
@Override
public void run () {
Gdx.graphics.setFullscreenMode( Gdx.graphics.getDisplayMode() );
}
} );
}
if (SPDSettings.windowMaximized()) {
lwjgl3Window.maximizeWindow();
}
}
@Override
public void maximized ( boolean b ) {
SPDSettings.windowMaximized( b );
}
@Override
public void iconified ( boolean b ) { }
public void focusLost () { }
public void focusGained () { }
public boolean closeRequested () { return true; }
public void filesDropped ( String[] strings ) { }
public void refreshRequested () { }
}