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.uiscale.name = UI Scaling
|
||||
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.screenshake.name = Screen Shake
|
||||
setting.bloomintensity.name = Bloom Intensity
|
||||
|
||||
@@ -1279,8 +1279,10 @@ setting.fpscap.name = Límite de FPS
|
||||
setting.fpscap.none = No
|
||||
setting.fpscap.text = {0} FPS
|
||||
setting.uiscale.name = Escala de interfaz
|
||||
setting.uiscale.description = Es necesario reiniciar para aplicar los cambios.
|
||||
setting.swapdiagonal.name = Construir siempre en diagonal
|
||||
setting.uiscale.description = Se requiere reiniciar para aplicar los cambios.
|
||||
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.bloomintensity.name = Intensidad de desenfoque de 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.text = {0} FPS
|
||||
setting.uiscale.name = Escala da\ninterface[lightgray] (reinicialização requerida)[]
|
||||
setting.uiscale.description = Reinicialização necessária para aplicar as alterações.
|
||||
setting.swapdiagonal.name = Sempre colocação diagonal
|
||||
setting.uiscale.description = É necessário reiniciar para aplicar as mudanças.
|
||||
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.bloomintensity.name = Itensidade do Bloom
|
||||
setting.bloomblur.name = Desfoque do Bloom
|
||||
|
||||
@@ -1279,8 +1279,10 @@ setting.fpscap.name = Limite de FPS
|
||||
setting.fpscap.none = Nenhum
|
||||
setting.fpscap.text = {0} FPS
|
||||
setting.uiscale.name = Escala da IU[lightgray] (reinicío requerida)[]
|
||||
setting.uiscale.description = Reinicío necessário para aplicar as alterações.
|
||||
setting.swapdiagonal.name = Colocação Diagonal Sempre
|
||||
setting.uiscale.description = É necessário reiniciar para aplicar as mudanças.
|
||||
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.bloomintensity.name = Intensidade do Bloom
|
||||
setting.bloomblur.name = Bloom Blur
|
||||
|
||||
@@ -117,11 +117,7 @@ public class UI implements ApplicationListener, Loadable{
|
||||
Core.scene = new Scene();
|
||||
Core.input.addProcessor(Core.scene);
|
||||
|
||||
int[] insets = Core.graphics.getSafeInsets();
|
||||
Core.scene.marginLeft = insets[0];
|
||||
Core.scene.marginRight = insets[1];
|
||||
Core.scene.marginTop = insets[2];
|
||||
Core.scene.marginBottom = insets[3];
|
||||
updateMargins();
|
||||
|
||||
Tex.load();
|
||||
Icon.load();
|
||||
@@ -248,16 +244,31 @@ public class UI implements ApplicationListener, Loadable{
|
||||
new FadeInFragment().build(group);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resize(int width, int height){
|
||||
if(Core.scene == null) return;
|
||||
|
||||
/** Updates scene margins based on safe insets and custom edge padding setting. */
|
||||
public void updateMargins(){
|
||||
int[] insets = Core.graphics.getSafeInsets();
|
||||
int customPadding = (int)Scl.scl(Core.settings.getInt("uiEdgePadding", 0));
|
||||
|
||||
Core.scene.marginLeft = insets[0];
|
||||
Core.scene.marginRight = insets[1];
|
||||
Core.scene.marginTop = insets[2];
|
||||
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);
|
||||
Events.fire(new ResizeEvent());
|
||||
}
|
||||
|
||||
@@ -54,11 +54,16 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
rebuildMenu();
|
||||
});
|
||||
|
||||
int[] lastRebuildSize = {Core.graphics.getWidth(), Core.graphics.getHeight()};
|
||||
onResize(() -> {
|
||||
graphics.rebuild();
|
||||
sound.rebuild();
|
||||
game.rebuild();
|
||||
updateScrollFocus();
|
||||
if(lastRebuildSize[0] != Core.graphics.getWidth() || lastRebuildSize[1] != Core.graphics.getHeight()){
|
||||
graphics.rebuild();
|
||||
sound.rebuild();
|
||||
game.rebuild();
|
||||
updateScrollFocus();
|
||||
lastRebuildSize[0] = Core.graphics.getWidth();
|
||||
lastRebuildSize[1] = Core.graphics.getHeight();
|
||||
}
|
||||
});
|
||||
|
||||
cont.clearChildren();
|
||||
@@ -374,6 +379,13 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
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)};
|
||||
|
||||
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){
|
||||
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;
|
||||
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);
|
||||
rebuild();
|
||||
return res;
|
||||
@@ -784,14 +804,16 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
public static class SliderSetting extends Setting{
|
||||
int def, min, max, step;
|
||||
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);
|
||||
this.def = def;
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
this.step = step;
|
||||
this.sp = s;
|
||||
this.changed = changed;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -810,6 +832,7 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
slider.changed(() -> {
|
||||
settings.put(name, (int)slider.getValue());
|
||||
value.setText(sp.get((int)slider.getValue()));
|
||||
if(changed != null) changed.get((int)slider.getValue());
|
||||
});
|
||||
|
||||
slider.change();
|
||||
|
||||
Reference in New Issue
Block a user