From 0bc2aaa1aa34b261d636c19436807fa56ee7f06f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lubo=C5=A1=20Hor=C3=A1=C4=8Dek?= <horaceklubos@gmail.com>
Date: Wed, 24 Jun 2015 18:14:59 +0200
Subject: [PATCH] Menu overlay resizing fix with color texture refactoring

---
 core/src/cz/nic/tablexia/Tablexia.java        |  8 ++++++
 .../cz/nic/tablexia/TablexiaApplication.java  | 14 +++-------
 .../tablexia/game/AbstractTablexiaGame.java   | 14 ++--------
 .../tablexia/loader/TablexiaAtlasManager.java |  6 +----
 core/src/cz/nic/tablexia/menu/MainMenu.java   | 10 +++++--
 .../nic/tablexia/menu/MainMenuContainer.java  |  8 ++++++
 .../cz/nic/tablexia/menu/MainMenuDimmer.java  | 26 +++++--------------
 .../screen/AbstractTablexiaScreen.java        |  4 ---
 .../screen/preferences/PreferencesScreen.java |  8 ++++--
 .../cz/nic/tablexia/util/ui/ViewPager.java    | 24 ++++++++++++-----
 10 files changed, 59 insertions(+), 63 deletions(-)

diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java
index 12e7a497c..7794678e6 100644
--- a/core/src/cz/nic/tablexia/Tablexia.java
+++ b/core/src/cz/nic/tablexia/Tablexia.java
@@ -91,6 +91,14 @@ public class Tablexia extends TablexiaApplication {
         getStage().addActor(mainMenuContainer);
     }
 
+    @Override
+    public void resize(int width, int height) {
+        super.resize(width, height);
+        if(mainMenuContainer != null) {
+            mainMenuContainer.setSize(getStage().getWidth(), getStage().getHeight());
+        }
+    }
+
     private void startLoading(Locale locale) {
         // sync loaded screen with loader image
         setScreenIfIsDifferent(new LoaderScreen());
diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java
index 39cf1256c..e09139382 100644
--- a/core/src/cz/nic/tablexia/TablexiaApplication.java
+++ b/core/src/cz/nic/tablexia/TablexiaApplication.java
@@ -5,11 +5,10 @@ import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.InputMultiplexer;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.GL20;
-import com.badlogic.gdx.graphics.g2d.Batch;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.math.Interpolation;
 import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.utils.viewport.ScreenViewport;
 
 import cz.nic.tablexia.bus.ApplicationBus;
@@ -315,15 +314,8 @@ public abstract class TablexiaApplication implements ApplicationListener {
         @Override
         public void processTransaction(Stage stage, final AbstractTablexiaScreen<?> lastScreen, final AbstractTablexiaScreen<?> newScreen, final Runnable newScreenHandler, final Runnable lastScreenHandler, final Runnable finishHandler) {
             final int transactionSpeed = 1;
-            final TextureRegion texture = ApplicationAtlasManager.getInstance().getColorTextureRegion(Color.BLACK, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
-            final Actor screenDimmer = new Actor() {
-
-                public void draw(Batch batch, float parentAlpha) {
-                    batch.setColor(getColor());
-                    batch.draw(texture, 0, 0);
-                    batch.setColor(Color.WHITE);
-                }
-            };
+            final Actor screenDimmer = new Image(ApplicationAtlasManager.getInstance().getColorTexture(Color.BLACK));
+            screenDimmer.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
             newScreen.setLoadingListener(new ScreenLoadingListener() {
 
                 @Override
diff --git a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java
index 54d4cca86..bab1c1ecc 100644
--- a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java
+++ b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java
@@ -2,7 +2,6 @@ package cz.nic.tablexia.game;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Color;
-import com.badlogic.gdx.graphics.g2d.Batch;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.math.Interpolation;
 import com.badlogic.gdx.scenes.scene2d.Actor;
@@ -51,17 +50,8 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
     private Actor          screenDimmer;
 
     public AbstractTablexiaGame() {
-        final TextureRegion texture = getColorTextureRegion(Color.BLACK, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
-        screenDimmer = new Actor() {
-
-            public void draw(Batch batch, float parentAlpha) {
-                batch.setColor(getColor());
-                batch.draw(texture, 0, 0);
-                batch.setColor(Color.WHITE);
-            }
-
-            ;
-        };
+        screenDimmer = new Image(getColorTextureRegion(Color.BLACK));
+        screenDimmer.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
         screenDimmer.addAction(alpha(0));
         getStage().addActor(screenDimmer);
     }
diff --git a/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java b/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java
index 478bb42cf..8cc49c9b3 100644
--- a/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java
+++ b/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java
@@ -99,11 +99,7 @@ public class TablexiaAtlasManager extends TablexiaAbstractFileManager {
         return colorMap.get(color);
     }
 
-    public TextureRegion getColorTextureRegion(Color color, int width, int heigth) {
-        return new TextureRegion(getColorTexture(color), width, heigth);
-    }
-
     public TextureRegion getColorTextureRegion(Color color) {
-        return getColorTextureRegion(color, 1, 1);
+       return new TextureRegion(getColorTexture(color),1,1);
     }
 }
diff --git a/core/src/cz/nic/tablexia/menu/MainMenu.java b/core/src/cz/nic/tablexia/menu/MainMenu.java
index bc3fa8fc6..47d97388c 100644
--- a/core/src/cz/nic/tablexia/menu/MainMenu.java
+++ b/core/src/cz/nic/tablexia/menu/MainMenu.java
@@ -1,6 +1,7 @@
 package cz.nic.tablexia.menu;
 
 import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.g2d.Sprite;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.math.Interpolation;
 import com.badlogic.gdx.math.Interpolation.PowOut;
@@ -13,6 +14,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
+import com.badlogic.gdx.scenes.scene2d.utils.SpriteDrawable;
 import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
 import com.badlogic.gdx.utils.Align;
 
@@ -68,10 +70,14 @@ public class MainMenu extends Stack {
         menuButtonStyle = new TextButtonStyle();
         menuButtonStyle.font = ApplicationFontManager.getInstance().getFont(ApplicationFontManager.FONT_ROBOTO_REGULAR);
         menuButtonStyle.fontColor = MENU_TEXT_COLOR;
-        menuButtonStyle.up = new TextureRegionDrawable(ApplicationAtlasManager.getInstance().getColorTextureRegion(Color.BLUE, 50, 50));
+        menuButtonStyle.up = new SpriteDrawable(new Sprite(ApplicationAtlasManager.getInstance().getColorTextureRegion(Color.BLUE)));
+        menuButtonStyle.up.setMinWidth(50); // temprorary button size
+        menuButtonStyle.up.setMinHeight(50); // temprorary button size
 
         // open close button
-        openCloseButton = new Button(new TextureRegionDrawable(ApplicationAtlasManager.getInstance().getColorTextureRegion(Color.RED, OPEN_MENU_BUTTON_WIDTH, OPEN_MENU_BUTTON_HEIGHT)));
+        openCloseButton = new Button(new TextureRegionDrawable(ApplicationAtlasManager.getInstance().getColorTextureRegion(Color.RED)));
+        openCloseButton.getStyle().up.setMinWidth(OPEN_MENU_BUTTON_WIDTH); // temprorary button size
+        openCloseButton.getStyle().up.setMinHeight(OPEN_MENU_BUTTON_HEIGHT); // temprorary button size
         openCloseButton.addAction(Actions.alpha(0));
         openCloseButton.align(Align.topRight);
         openCloseButton.addListener(new ClickListener() {
diff --git a/core/src/cz/nic/tablexia/menu/MainMenuContainer.java b/core/src/cz/nic/tablexia/menu/MainMenuContainer.java
index b2b6b0b31..dfb227e23 100644
--- a/core/src/cz/nic/tablexia/menu/MainMenuContainer.java
+++ b/core/src/cz/nic/tablexia/menu/MainMenuContainer.java
@@ -39,6 +39,14 @@ public class MainMenuContainer extends Group {
         });
     }
 
+    @Override
+    protected void sizeChanged() {
+        super.sizeChanged();
+        if(screenDimmer!= null) {
+            screenDimmer.setSize(getWidth(), getHeight());
+        }
+    }
+
     @Override
     public void draw(Batch batch, float parentAlpha) {
         super.draw(batch, parentAlpha);
diff --git a/core/src/cz/nic/tablexia/menu/MainMenuDimmer.java b/core/src/cz/nic/tablexia/menu/MainMenuDimmer.java
index 65f1e4e7d..ce4d57d8d 100644
--- a/core/src/cz/nic/tablexia/menu/MainMenuDimmer.java
+++ b/core/src/cz/nic/tablexia/menu/MainMenuDimmer.java
@@ -1,10 +1,9 @@
 package cz.nic.tablexia.menu;
 
 import com.badlogic.gdx.graphics.Color;
-import com.badlogic.gdx.graphics.g2d.Batch;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import com.badlogic.gdx.scenes.scene2d.Actor;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
 
+import cz.nic.tablexia.loader.TablexiaAtlasManager;
 import cz.nic.tablexia.loader.application.ApplicationAtlasManager;
 
 /**
@@ -12,25 +11,12 @@ import cz.nic.tablexia.loader.application.ApplicationAtlasManager;
  *
  * @author Matyáš Latner
  */
-public class MainMenuDimmer extends Actor {
+public class MainMenuDimmer extends Image {
 
-    private static final float      MAIN_MENU_DIMMER_MAX_ALPHA   = 0.7f;
-    public static final Color       DIMMER_COLOR = Color.BLACK;
-
-    private final TextureRegion     texture;
+    public static final  Color DIMMER_COLOR               = TablexiaAtlasManager.COLOR_OVERLAY;
 
     public MainMenuDimmer(float width, float height) {
-        setBounds(0, 0, width, height);
-        texture = ApplicationAtlasManager.getInstance().getColorTextureRegion(DIMMER_COLOR, (int)width, (int)height);
-    }
-
-    @Override
-    public void draw(Batch batch, float parentAlpha) {
-        Color color = getColor();
-        color.a = color.a * MAIN_MENU_DIMMER_MAX_ALPHA;
-
-        batch.setColor(getColor());
-        batch.draw(texture, 0, 0);
-        batch.setColor(Color.WHITE);
+        super(ApplicationAtlasManager.getInstance().getColorTextureRegion(DIMMER_COLOR));
+        setSize(width, height);
     }
 }
diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
index 238ac37ab..2e9e9fc40 100644
--- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
+++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
@@ -557,10 +557,6 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
         return ApplicationAtlasManager.getInstance().getColorTextureRegion(color);
     }
 
-    public TextureRegion getColorTextureRegion(Color color, int width, int height) {
-        return ApplicationAtlasManager.getInstance().getColorTextureRegion(color, width, height);
-    }
-
     public Sound getSound(String soundName) {
         return soundManager.getSound(createLocalAssetPath(soundName));
     }
diff --git a/core/src/cz/nic/tablexia/screen/preferences/PreferencesScreen.java b/core/src/cz/nic/tablexia/screen/preferences/PreferencesScreen.java
index 1d35969fe..6e899c6f9 100644
--- a/core/src/cz/nic/tablexia/screen/preferences/PreferencesScreen.java
+++ b/core/src/cz/nic/tablexia/screen/preferences/PreferencesScreen.java
@@ -49,7 +49,9 @@ public class PreferencesScreen extends AbstractTablexiaScreen<Void> {
 
         // Languages SelectBox
         ScrollPane.ScrollPaneStyle scrollPaneStyle = new ScrollPane.ScrollPaneStyle();
-        scrollPaneStyle.background = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY, 50, 50));
+        scrollPaneStyle.background = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY));
+        scrollPaneStyle.background.setMinWidth(50); // temporary size
+        scrollPaneStyle.background.setMinHeight(50);
         List.ListStyle listStyle = new List.ListStyle();
         listStyle.selection = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY));
         listStyle.font = font;
@@ -57,7 +59,9 @@ public class PreferencesScreen extends AbstractTablexiaScreen<Void> {
         selectBoxStyle.font = font;
         selectBoxStyle.scrollStyle = scrollPaneStyle;
         selectBoxStyle.listStyle = listStyle;
-        selectBoxStyle.background = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY, 50, 50));
+        selectBoxStyle.background = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY));
+        selectBoxStyle.background.setMinWidth(50); // temporary size
+        selectBoxStyle.background.setMinHeight(50);
         SelectBox<TablexiaSettings.LocaleDefinition> languagesSelectBox = new SelectBox<TablexiaSettings.LocaleDefinition>(selectBoxStyle);
         languagesSelectBox.setItems(TablexiaSettings.LocaleDefinition.values());
         languagesSelectBox.setSelected(TablexiaSettings.getInstance().getLocaleDefinition());
diff --git a/core/src/cz/nic/tablexia/util/ui/ViewPager.java b/core/src/cz/nic/tablexia/util/ui/ViewPager.java
index 4f63c9811..192fb7436 100644
--- a/core/src/cz/nic/tablexia/util/ui/ViewPager.java
+++ b/core/src/cz/nic/tablexia/util/ui/ViewPager.java
@@ -40,23 +40,34 @@ public class ViewPager extends ScrollPane {
     private void setup() {
         content = new Table();
         super.setWidget(content);
-        content.setSize(100,100);
+        content.setSize(100, 100);
         content.defaults().space(0);
         //setClamp(false);
-        //setScrollingDisabled(false, true);
+        setScrollingDisabled(false, true);
         setFlingTime(0.1f);
     }
 
-    @Override
-    public void setSize(float width, float height) {
-        super.setSize(width, height);
+    private void fixChildrenSizes() {
         if (content != null) {
             for (Actor a : content.getChildren()) {
-                a.setSize(width, height);
+                a.setSize(getWidth(), getHeight());
             }
         }
     }
 
+    @Override
+    public void setSize(float width, float height) {
+        super.setSize(width, height);
+        fixChildrenSizes();
+    }
+
+
+    @Override
+    public void setBounds(float x, float y, float width, float height) {
+        super.setBounds(x, y, width, height);
+        fixChildrenSizes();
+    }
+
     public void addPages(Actor... pages) {
         for (Actor page : pages) {
             content.add(page).expandY().fillY();
@@ -137,7 +148,6 @@ public class ViewPager extends ScrollPane {
      * @param page
      */
     public void scrollToPage(int page) {
-        // TODO cleanup
         if (content.getChildren().size <= page) {
             throw new IllegalArgumentException("Page index " + page + " out of bounds");
         }
-- 
GitLab