From 1089b2745a1e49deec2385472b269c4ba3f37fed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lubo=C5=A1=20Hor=C3=A1=C4=8Dek?= <horaceklubos@gmail.com>
Date: Thu, 12 Mar 2015 19:35:13 +0100
Subject: [PATCH] #11 Scroll listeners

---
 .../screen/gamemenu/pages/GameMenuPage.java   | 19 +++++--
 .../cz/nic/tablexia/util/ui/ViewPager.java    | 49 +++++++++++++++++++
 2 files changed, 63 insertions(+), 5 deletions(-)

diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
index aa5acfa9c..7832ecebe 100644
--- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
+++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
@@ -6,12 +6,14 @@ import com.badlogic.gdx.graphics.g2d.Batch;
 import cz.nic.tablexia.game.GameDefinition;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 import cz.nic.tablexia.screen.gamemenu.GameMenuAssets;
+import cz.nic.tablexia.util.Log;
+import cz.nic.tablexia.util.ui.ViewPager;
 
 /**
  * Representing one page in ViewPager with specific game
  * Created by lhoracek on 3/4/15.
  */
-public class GameMenuPage extends MenuPage {
+public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
     private GameDefinition game;
 
     public GameMenuPage(AbstractTablexiaScreen screen, GameDefinition game) {
@@ -21,8 +23,6 @@ public class GameMenuPage extends MenuPage {
 
     @Override
     public void draw(Batch batch, float parentAlpha) {
-        // leave blending enabled for transparent images
-//        batch.disableBlending();
         batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.BACK)), getX(), getY(), getWidth(), getHeight());
         batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.MID)), getX(), getY(), getWidth(), getHeight());
         batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.FORE)), getX(), getY(), getWidth(), getHeight());
@@ -37,7 +37,16 @@ public class GameMenuPage extends MenuPage {
 
 
         batch.draw(title, getX() + titleX, getY() + titleY - titleHeight, titleWidth, titleHeight);
-        //batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.FORE)), getX(), getY(), getWidth(), getHeight());
-//        batch.enableBlending();
+
+    }
+
+    @Override
+    public void onScroll(float offset) {
+        Log.info(((Object) this).getClass().getName(), "Scroll " + game.name() + ": " + offset);
+    }
+
+    @Override
+    public void onScrolledToPage() {
+        Log.info(((Object) this).getClass().getName(), "Scrolled to page: " + game.name());
     }
 }
diff --git a/core/src/cz/nic/tablexia/util/ui/ViewPager.java b/core/src/cz/nic/tablexia/util/ui/ViewPager.java
index 8319d9758..3be659730 100644
--- a/core/src/cz/nic/tablexia/util/ui/ViewPager.java
+++ b/core/src/cz/nic/tablexia/util/ui/ViewPager.java
@@ -8,6 +8,8 @@ import com.badlogic.gdx.scenes.scene2d.ui.Skin;
 import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.utils.Array;
 
+import cz.nic.tablexia.util.Log;
+
 /**
  * Created by lhoracek on 3/4/15.
  */
@@ -79,6 +81,47 @@ public class ViewPager extends ScrollPane {
         }
     }
 
+    @Override
+    protected void scrollX(float pixelsX) {
+        super.scrollX(pixelsX);
+
+        final float width = getWidth();
+        final float scrollX = pixelsX;
+        final float maxX = getMaxX();
+
+        if (scrollX >= maxX || scrollX <= 0) return;
+
+        Array<Actor> pages = content.getChildren();
+        float pageX = 0;
+        float pageWidth = 0;
+        if (pages.size > 0) {
+            for (Actor a : pages) {
+                pageX = a.getX();
+                pageWidth = a.getWidth();
+                if (scrollX > pageX && scrollX < (pageX + pageWidth)) {
+                    if (a instanceof ScrollListener) {
+                        ScrollListener sl = (ScrollListener) a;
+                        sl.onScroll(-(scrollX - pageX));
+                    }
+                } else if (scrollX < (pageX) && (scrollX + pageWidth) > pageX) {
+                    if (a instanceof ScrollListener) {
+                        ScrollListener sl = (ScrollListener) a;
+                        sl.onScroll(pageX - scrollX);
+                    }
+
+                }
+                if(pageX == scrollX){
+                    if (a instanceof ScrollListener) {
+                        ScrollListener sl = (ScrollListener) a;
+                        sl.onScrolledToPage();
+                    }
+                }
+            }
+        }
+
+        Log.info(((Object) this).getClass().getName(), "ScrollX: " + pixelsX);
+    }
+
     @Override
     @Deprecated
     public void setWidget(Actor widget) {
@@ -127,4 +170,10 @@ public class ViewPager extends ScrollPane {
             setScrollX(MathUtils.clamp(pageX - (width - pageWidth) / 2, 0, maxX));
         }
     }
+
+    public static interface ScrollListener {
+        public void onScroll(float offset);
+
+        public void onScrolledToPage();
+    }
 }
-- 
GitLab