From ec2f42c75cd77d30e0be5f7232eb558442ab08a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz>
Date: Mon, 9 Feb 2015 09:33:08 +0100
Subject: [PATCH] #7 Use of input multiplexer for handling input from different
 screens

---
 core/src/cz/nic/tablexia/Tablexia.java        |  2 --
 .../cz/nic/tablexia/TablexiaApplication.java  | 25 ++++++++++++++-----
 .../game/games/robbery/GameScreen.java        |  1 -
 .../game/games/robbery/RuleScreen.java        |  2 --
 4 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java
index 74e081161..114f83b1c 100644
--- a/core/src/cz/nic/tablexia/Tablexia.java
+++ b/core/src/cz/nic/tablexia/Tablexia.java
@@ -55,8 +55,6 @@ public class Tablexia extends TablexiaApplication {
 		super.create();
 		Log.setLoglevel(TablexiaLogLevel.DEBUG);
 		
-		Gdx.input.setInputProcessor(getStage());
-		
 		// init event bus handlers
 		ApplicationBus.getInstance().subscribe(this);
 		ScreenDefinition.initBus();
diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java
index 490cffa0f..64a1ce1ca 100644
--- a/core/src/cz/nic/tablexia/TablexiaApplication.java
+++ b/core/src/cz/nic/tablexia/TablexiaApplication.java
@@ -9,7 +9,7 @@ import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence;
 
 import com.badlogic.gdx.ApplicationListener;
 import com.badlogic.gdx.Gdx;
-import com.badlogic.gdx.Screen;
+import com.badlogic.gdx.InputMultiplexer;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.graphics.Pixmap.Format;
@@ -33,7 +33,9 @@ public abstract class TablexiaApplication implements ApplicationListener {
 	
 	private 				AbstractTablexiaScreen 	lastScreen;
 	private 				AbstractTablexiaScreen 	screen;
+	private 				InputMultiplexer 		inputMultiplexer;
 	private 				Stage					stage;
+
 	
 	public Stage getStage() {
 		return stage;
@@ -44,9 +46,16 @@ public abstract class TablexiaApplication implements ApplicationListener {
 
 	@Override
 	public void dispose () {
+		inputMultiplexer.removeProcessor(stage);
 		stage.dispose();
-		if (lastScreen != null) lastScreen.hide();
-		if (screen != null) screen.hide();
+		if (lastScreen != null) {
+			lastScreen.hide();
+			lastScreen.dispose();
+		}
+		if (screen != null) {
+			screen.hide();
+			screen.dispose();
+		}
 	}
 
 	@Override
@@ -64,6 +73,8 @@ public abstract class TablexiaApplication implements ApplicationListener {
 	@Override
 	public void create() {
 		stage = new Stage();
+		inputMultiplexer = new InputMultiplexer(stage);
+		Gdx.input.setInputProcessor(inputMultiplexer);
 	}
 
 	@Override
@@ -166,15 +177,17 @@ public abstract class TablexiaApplication implements ApplicationListener {
 		return screen;
 	}
 	
-	private void processNewScreen(Screen newScreen) {
+	private void processNewScreen(AbstractTablexiaScreen newScreen) {
 		if (newScreen != null) {
+			inputMultiplexer.addProcessor(newScreen.getStage());
 			newScreen.show();
 			newScreen.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
 		}
 	}
 	
-	private void processLastScreen(Screen lastScreen) {
-		if (lastScreen != null) {					
+	private void processLastScreen(AbstractTablexiaScreen lastScreen) {
+		if (lastScreen != null) {
+			inputMultiplexer.removeProcessor(lastScreen.getStage());
 			lastScreen.hide();
 			lastScreen.dispose();
 			lastScreen = null;
diff --git a/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java b/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java
index d1094e7e3..16dad7817 100644
--- a/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java
+++ b/core/src/cz/nic/tablexia/game/games/robbery/GameScreen.java
@@ -250,7 +250,6 @@ public class GameScreen extends AbstractTablexiaScreen {
 	@Override
 	public void show() {
 		super.show();
-		Gdx.input.setInputProcessor(getStage());
 		
 		getStage().addActor(new GameBackground());
 		getStage().addActor(colorInfoLayer);
diff --git a/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java b/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java
index 807ec08ae..9b320bde0 100644
--- a/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java
+++ b/core/src/cz/nic/tablexia/game/games/robbery/RuleScreen.java
@@ -2,7 +2,6 @@ package cz.nic.tablexia.game.games.robbery;
 
 import java.util.Locale;
 
-import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.Texture.TextureFilter;
@@ -93,7 +92,6 @@ public class RuleScreen extends AbstractTablexiaScreen {
 	@Override
 	public void show() {
 		super.show();
-		Gdx.input.setInputProcessor(getStage());
 		
 		if (!loadingComplete) {			
 			RobberyTextureManager.getInstance().load();
-- 
GitLab