From ad263f7eea5c0cc3da5d3275739b8f1abe0395b4 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 14 Jan 2019 12:02:26 +0100 Subject: [PATCH 1/6] Backport dialog ui arrow fix + warning message. --- .../com/bladecoder/engine/ui/DialogUI.java | 77 +++++++++++-------- .../bladecoder/engine/ui/LoadSaveScreen.java | 21 ++--- .../com/bladecoder/engine/ui/MenuScreen.java | 58 ++++++++------ 3 files changed, 89 insertions(+), 67 deletions(-) diff --git a/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java b/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java index 860f77083..79c506177 100644 --- a/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java +++ b/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java @@ -18,8 +18,6 @@ import java.util.List; import com.badlogic.gdx.scenes.scene2d.Actor; -import com.badlogic.gdx.scenes.scene2d.Event; -import com.badlogic.gdx.scenes.scene2d.EventListener; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; @@ -33,6 +31,7 @@ import com.bladecoder.engine.i18n.I18N; import com.bladecoder.engine.model.World; import com.bladecoder.engine.util.DPIUtils; +import com.bladecoder.engine.util.EngineLogger; public class DialogUI extends ScrollPane { public static final String DIALOG_END_COMMAND = "dialog_end"; @@ -70,29 +69,6 @@ public DialogUI(UI ui) { setVisible(false); panel.defaults().expandX().fillX().top().left().padBottom(DPIUtils.getSpacing()); - addListener(new EventListener() { - - @Override - public boolean handle(Event event) { - if (isScrollY()) { - - if (getScrollPercentY() > 0f && up.isVisible() == false) { - up.setVisible(true); - } else if (getScrollPercentY() == 0f && up.isVisible() == true) { - up.setVisible(false); - } - - if (getScrollPercentY() < 1f && down.isVisible() == false) { - down.setVisible(true); - } else if (getScrollPercentY() == 1f && down.isVisible() == true) { - down.setVisible(false); - } - } - - return false; - } - }); - up.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { @@ -107,27 +83,57 @@ public void changed(ChangeEvent event, Actor actor) { } }); } - + + private void setUpDownVisibility() { + EngineLogger.debug( + "setUpDownVisibility: " + isScrollY() + " maxY: " + getMaxY() + " Margin: " + DPIUtils.getMarginSize()); + if (isScrollY() && getMaxY() > DPIUtils.getMarginSize()) { + + if (getScrollPercentY() > 0f && up.isVisible() == false) { + up.setVisible(true); + } else if (getScrollPercentY() == 0f && up.isVisible() == true) { + up.setVisible(false); + } + + if (getScrollPercentY() < 1f && down.isVisible() == false) { + down.setVisible(true); + } else if (getScrollPercentY() == 1f && down.isVisible() == true) { + down.setVisible(false); + } + } else { + up.setVisible(false); + down.setVisible(false); + } + } + @Override - public void setVisible (boolean visible) { + public void setVisible(boolean visible) { super.setVisible(visible); - - if(visible) { - if(getParent() != null) + + if (visible) { + if (getParent() != null) show(); } else { + up.setVisible(false); + down.setVisible(false); up.remove(); down.remove(); } } + @Override + public void setScrollY(float pixels) { + super.setScrollY(pixels); + setUpDownVisibility(); + } + private void show() { choices = World.getInstance().getDialogOptions(); if (choices.size() == 0) return; - else if (style.autoselect && choices.size() == 1) { + else if (style.autoselect && choices.size() == 1) { // If only has one option, autoselect it select(0); return; @@ -149,6 +155,7 @@ else if (style.autoselect && choices.size() == 1) { ob.getLabel().setAlignment(Align.left); ob.addListener(new ClickListener() { + @Override public void clicked(InputEvent event, float x, float y) { int i = (Integer) event.getListenerActor().getUserObject(); @@ -167,12 +174,14 @@ public void clicked(InputEvent event, float x, float y) { getStage().addActor(up); up.setSize(size, size); up.setPosition(getX() + getWidth() - size - margin, getY() + getHeight() - margin - size); - up.setVisible(false); getStage().addActor(down); down.setSize(size, size); down.setPosition(getX() + getWidth() - size - margin, getY() + margin); - down.setVisible(false); + + layout(); + + setUpDownVisibility(); } private void select(int i) { @@ -192,7 +201,7 @@ static public class DialogUIStyle { public Drawable background; public TextButtonStyle textButtonStyle; - + // If only one option is visible, auto select it. public boolean autoselect = true; diff --git a/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java b/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java index 7f7bcd08c..e6291856f 100644 --- a/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java +++ b/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java @@ -24,8 +24,8 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; -import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; @@ -37,13 +37,13 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle; -import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle; import com.badlogic.gdx.scenes.scene2d.ui.Container; import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.Drawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; @@ -71,7 +71,7 @@ public class LoadSaveScreen extends ScreenAdapter implements BladeScreen { private int slotHeight = 0; // texture list for final dispose - private final ArrayList textureList = new ArrayList(); + private final ArrayList textureList = new ArrayList<>(); private Pointer pointer; @@ -123,7 +123,7 @@ public void show() { stage = new Stage(new ScreenViewport()); slotWidth = (int) (stage.getViewport().getWorldWidth() / (ROW_SLOTS + 1) - 2 * pad); - slotHeight = (int) (slotWidth * stage.getViewport().getScreenHeight() / stage.getViewport().getScreenWidth()); + slotHeight = slotWidth * stage.getViewport().getScreenHeight() / stage.getViewport().getScreenWidth(); LoadSaveScreenStyle style = skin.get(LoadSaveScreenStyle.class); @@ -146,6 +146,7 @@ public void show() { Button back = new Button(skin, "back"); back.addListener(new ClickListener() { + @Override public void clicked(InputEvent event, float x, float y) { ui.setCurrentScreen(Screens.MENU_SCREEN); } @@ -153,7 +154,7 @@ public void clicked(InputEvent event, float x, float y) { Table header = new Table(); // header.padBottom(pad); - Container