Add UI edge padding setting (#11741)
* feat(ui): added edge padding support and translations * Bundles: added uiEdgePadding translations * add Jovinull in contributors * refactor(ui): extract updateMargins and apply padding to longest axis * refactor(settings): use Intc and call updateMargins directly
This commit is contained in:
@@ -1280,6 +1280,8 @@ setting.fpscap.none = None
|
|||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = UI Scaling
|
setting.uiscale.name = UI Scaling
|
||||||
setting.uiscale.description = Restart required to apply changes.
|
setting.uiscale.description = Restart required to apply changes.
|
||||||
|
setting.uiEdgePadding.name = UI Edge Padding
|
||||||
|
setting.uiEdgePadding.description = Adds padding to the edges of the UI. Useful for displays with rounded corners or notches.
|
||||||
setting.swapdiagonal.name = Always Diagonal Placement
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.screenshake.name = Screen Shake
|
setting.screenshake.name = Screen Shake
|
||||||
setting.bloomintensity.name = Bloom Intensity
|
setting.bloomintensity.name = Bloom Intensity
|
||||||
|
|||||||
@@ -1279,8 +1279,10 @@ setting.fpscap.name = Límite de FPS
|
|||||||
setting.fpscap.none = No
|
setting.fpscap.none = No
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = Escala de interfaz
|
setting.uiscale.name = Escala de interfaz
|
||||||
setting.uiscale.description = Es necesario reiniciar para aplicar los cambios.
|
setting.uiscale.description = Se requiere reiniciar para aplicar los cambios.
|
||||||
setting.swapdiagonal.name = Construir siempre en diagonal
|
setting.uiEdgePadding.name = Espaciado de bordes de UI
|
||||||
|
setting.uiEdgePadding.description = Añade espaciado a los bordes de la UI. Útil para pantallas con esquinas redondeadas o muescas.
|
||||||
|
setting.swapdiagonal.name = Colocación siempre diagonal
|
||||||
setting.screenshake.name = Vibración de pantalla
|
setting.screenshake.name = Vibración de pantalla
|
||||||
setting.bloomintensity.name = Intensidad de desenfoque de Bloom
|
setting.bloomintensity.name = Intensidad de desenfoque de Bloom
|
||||||
setting.bloomblur.name = Difuminado de puntos de luz (Bloom)
|
setting.bloomblur.name = Difuminado de puntos de luz (Bloom)
|
||||||
|
|||||||
@@ -1279,8 +1279,10 @@ setting.fpscap.name = FPS Máximo
|
|||||||
setting.fpscap.none = Nenhum
|
setting.fpscap.none = Nenhum
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = Escala da\ninterface[lightgray] (reinicialização requerida)[]
|
setting.uiscale.name = Escala da\ninterface[lightgray] (reinicialização requerida)[]
|
||||||
setting.uiscale.description = Reinicialização necessária para aplicar as alterações.
|
setting.uiscale.description = É necessário reiniciar para aplicar as mudanças.
|
||||||
setting.swapdiagonal.name = Sempre colocação diagonal
|
setting.uiEdgePadding.name = Espaçamento de bordas da UI
|
||||||
|
setting.uiEdgePadding.description = Adiciona espaçamento às bordas da UI. Útil para telas com cantos arredondados ou entalhes (notches).
|
||||||
|
setting.swapdiagonal.name = Colocação sempre diagonal
|
||||||
setting.screenshake.name = Vibração da Tela
|
setting.screenshake.name = Vibração da Tela
|
||||||
setting.bloomintensity.name = Itensidade do Bloom
|
setting.bloomintensity.name = Itensidade do Bloom
|
||||||
setting.bloomblur.name = Desfoque do Bloom
|
setting.bloomblur.name = Desfoque do Bloom
|
||||||
|
|||||||
@@ -1279,8 +1279,10 @@ setting.fpscap.name = Limite de FPS
|
|||||||
setting.fpscap.none = Nenhum
|
setting.fpscap.none = Nenhum
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = Escala da IU[lightgray] (reinicío requerida)[]
|
setting.uiscale.name = Escala da IU[lightgray] (reinicío requerida)[]
|
||||||
setting.uiscale.description = Reinicío necessário para aplicar as alterações.
|
setting.uiscale.description = É necessário reiniciar para aplicar as mudanças.
|
||||||
setting.swapdiagonal.name = Colocação Diagonal Sempre
|
setting.uiEdgePadding.name = Espaçamento de bordas da UI
|
||||||
|
setting.uiEdgePadding.description = Adiciona espaçamento às bordas da UI. Útil para telas com cantos arredondados ou entalhes (notches).
|
||||||
|
setting.swapdiagonal.name = Colocação sempre diagonal
|
||||||
setting.screenshake.name = Vibração do Ecrã
|
setting.screenshake.name = Vibração do Ecrã
|
||||||
setting.bloomintensity.name = Intensidade do Bloom
|
setting.bloomintensity.name = Intensidade do Bloom
|
||||||
setting.bloomblur.name = Bloom Blur
|
setting.bloomblur.name = Bloom Blur
|
||||||
|
|||||||
@@ -117,11 +117,7 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
Core.scene = new Scene();
|
Core.scene = new Scene();
|
||||||
Core.input.addProcessor(Core.scene);
|
Core.input.addProcessor(Core.scene);
|
||||||
|
|
||||||
int[] insets = Core.graphics.getSafeInsets();
|
updateMargins();
|
||||||
Core.scene.marginLeft = insets[0];
|
|
||||||
Core.scene.marginRight = insets[1];
|
|
||||||
Core.scene.marginTop = insets[2];
|
|
||||||
Core.scene.marginBottom = insets[3];
|
|
||||||
|
|
||||||
Tex.load();
|
Tex.load();
|
||||||
Icon.load();
|
Icon.load();
|
||||||
@@ -248,16 +244,31 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
new FadeInFragment().build(group);
|
new FadeInFragment().build(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/** Updates scene margins based on safe insets and custom edge padding setting. */
|
||||||
public void resize(int width, int height){
|
public void updateMargins(){
|
||||||
if(Core.scene == null) return;
|
|
||||||
|
|
||||||
int[] insets = Core.graphics.getSafeInsets();
|
int[] insets = Core.graphics.getSafeInsets();
|
||||||
|
int customPadding = (int)Scl.scl(Core.settings.getInt("uiEdgePadding", 0));
|
||||||
|
|
||||||
Core.scene.marginLeft = insets[0];
|
Core.scene.marginLeft = insets[0];
|
||||||
Core.scene.marginRight = insets[1];
|
Core.scene.marginRight = insets[1];
|
||||||
Core.scene.marginTop = insets[2];
|
Core.scene.marginTop = insets[2];
|
||||||
Core.scene.marginBottom = insets[3];
|
Core.scene.marginBottom = insets[3];
|
||||||
|
|
||||||
|
if(Core.graphics.getHeight() > Core.graphics.getWidth()){
|
||||||
|
Core.scene.marginTop += customPadding;
|
||||||
|
Core.scene.marginBottom += customPadding;
|
||||||
|
}else{
|
||||||
|
Core.scene.marginLeft += customPadding;
|
||||||
|
Core.scene.marginRight += customPadding;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resize(int width, int height){
|
||||||
|
if(Core.scene == null) return;
|
||||||
|
|
||||||
|
updateMargins();
|
||||||
|
|
||||||
Core.scene.resize(width, height);
|
Core.scene.resize(width, height);
|
||||||
Events.fire(new ResizeEvent());
|
Events.fire(new ResizeEvent());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,11 +54,16 @@ public class SettingsMenuDialog extends BaseDialog{
|
|||||||
rebuildMenu();
|
rebuildMenu();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
int[] lastRebuildSize = {Core.graphics.getWidth(), Core.graphics.getHeight()};
|
||||||
onResize(() -> {
|
onResize(() -> {
|
||||||
graphics.rebuild();
|
if(lastRebuildSize[0] != Core.graphics.getWidth() || lastRebuildSize[1] != Core.graphics.getHeight()){
|
||||||
sound.rebuild();
|
graphics.rebuild();
|
||||||
game.rebuild();
|
sound.rebuild();
|
||||||
updateScrollFocus();
|
game.rebuild();
|
||||||
|
updateScrollFocus();
|
||||||
|
lastRebuildSize[0] = Core.graphics.getWidth();
|
||||||
|
lastRebuildSize[1] = Core.graphics.getHeight();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
cont.clearChildren();
|
cont.clearChildren();
|
||||||
@@ -374,6 +379,13 @@ public class SettingsMenuDialog extends BaseDialog{
|
|||||||
game.checkPref("console", false);
|
game.checkPref("console", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
graphics.sliderPref("uiEdgePadding", 0, 0, 100, s -> s + "px", s -> {
|
||||||
|
if(ui != null){
|
||||||
|
ui.updateMargins();
|
||||||
|
Core.scene.resize(Core.graphics.getWidth(), Core.graphics.getHeight());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
int[] lastUiScale = {settings.getInt("uiscale", 100)};
|
int[] lastUiScale = {settings.getInt("uiscale", 100)};
|
||||||
|
|
||||||
graphics.sliderPref("uiscale", 100, 25, 300, 5, s -> {
|
graphics.sliderPref("uiscale", 100, 25, 300, 5, s -> {
|
||||||
@@ -674,8 +686,16 @@ public class SettingsMenuDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SliderSetting sliderPref(String name, int def, int min, int max, int step, StringProcessor s){
|
public SliderSetting sliderPref(String name, int def, int min, int max, int step, StringProcessor s){
|
||||||
|
return sliderPref(name, def, min, max, step, s, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SliderSetting sliderPref(String name, int def, int min, int max, StringProcessor s, Intc changed){
|
||||||
|
return sliderPref(name, def, min, max, 1, s, changed);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SliderSetting sliderPref(String name, int def, int min, int max, int step, StringProcessor s, Intc changed){
|
||||||
SliderSetting res;
|
SliderSetting res;
|
||||||
list.add(res = new SliderSetting(name, def, min, max, step, s));
|
list.add(res = new SliderSetting(name, def, min, max, step, s, changed));
|
||||||
settings.defaults(name, def);
|
settings.defaults(name, def);
|
||||||
rebuild();
|
rebuild();
|
||||||
return res;
|
return res;
|
||||||
@@ -784,14 +804,16 @@ public class SettingsMenuDialog extends BaseDialog{
|
|||||||
public static class SliderSetting extends Setting{
|
public static class SliderSetting extends Setting{
|
||||||
int def, min, max, step;
|
int def, min, max, step;
|
||||||
StringProcessor sp;
|
StringProcessor sp;
|
||||||
|
Intc changed;
|
||||||
|
|
||||||
public SliderSetting(String name, int def, int min, int max, int step, StringProcessor s){
|
public SliderSetting(String name, int def, int min, int max, int step, StringProcessor s, Intc changed){
|
||||||
super(name);
|
super(name);
|
||||||
this.def = def;
|
this.def = def;
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
this.step = step;
|
this.step = step;
|
||||||
this.sp = s;
|
this.sp = s;
|
||||||
|
this.changed = changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -810,6 +832,7 @@ public class SettingsMenuDialog extends BaseDialog{
|
|||||||
slider.changed(() -> {
|
slider.changed(() -> {
|
||||||
settings.put(name, (int)slider.getValue());
|
settings.put(name, (int)slider.getValue());
|
||||||
value.setText(sp.get((int)slider.getValue()));
|
value.setText(sp.get((int)slider.getValue()));
|
||||||
|
if(changed != null) changed.get((int)slider.getValue());
|
||||||
});
|
});
|
||||||
|
|
||||||
slider.change();
|
slider.change();
|
||||||
|
|||||||
Reference in New Issue
Block a user