From: nathan.sweet Date: Wed, 3 Nov 2010 05:50:15 +0000 (+0000) Subject: [added] InputMultiplexer. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=9b9e3f501405fc21dd39824c1ac07ecdc1fc2736;p=mikumikustudio%2Flibgdx-mikumikustudio.git [added] InputMultiplexer. [changed] Game and Screen a little. Still need to make more use of them to be sure I'm happy. [added] gdx-twl Layout class to make DialogLayout less verbose. [added] TWl class to make using TWL much easier. --- diff --git a/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidTexture.java b/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidTexture.java index e39e76b0a..a25609b58 100644 --- a/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidTexture.java +++ b/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidTexture.java @@ -28,6 +28,7 @@ import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.utils.GdxRuntimeException; +import com.badlogic.gdx.utils.MathUtils; /** * An implementation of {@link Texture} for Android @@ -140,10 +141,6 @@ final class AndroidTexture implements Texture { return (Bitmap)pixmap.getNativePixmap(); } - private static boolean isPowerOfTwo (int value) { - return ((value != 0) && (value & (value - 1)) == 0); - } - private void buildMipmap () { Bitmap obitmap = null; if (file != null) @@ -157,7 +154,7 @@ final class AndroidTexture implements Texture { int width = bitmap.getWidth(); Log.d("texture", "creating texture mipmaps: " + bitmap.getWidth() + ", " + bitmap.getHeight()); - if (!isPowerOfTwo(bitmap.getWidth()) || !isPowerOfTwo(bitmap.getHeight())) + if (!MathUtils.isPowerOfTwo(bitmap.getWidth()) || !MathUtils.isPowerOfTwo(bitmap.getHeight())) throw new GdxRuntimeException("Dimensions have to be a power of two"); while (height >= 1 || width >= 1 && level < 4) { diff --git a/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/ButtonTest.java b/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/ButtonTest.java index 7a103f943..6da2219f6 100644 --- a/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/ButtonTest.java +++ b/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/ButtonTest.java @@ -2,54 +2,47 @@ package com.badlogic.gdx.twl.tests; import com.badlogic.gdx.ApplicationListener; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Files.FileType; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.InputMultiplexer; +import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.GL10; -import com.badlogic.gdx.twl.renderer.TwlInputProcessor; -import com.badlogic.gdx.twl.renderer.TwlRenderer; +import com.badlogic.gdx.twl.Layout; +import com.badlogic.gdx.twl.TWL; import de.matthiasmann.twl.Button; -import de.matthiasmann.twl.DialogLayout; import de.matthiasmann.twl.FPSCounter; -import de.matthiasmann.twl.GUI; -public class ButtonTest implements ApplicationListener { - GUI gui; - TwlInputProcessor guiInputListener; - private TwlRenderer twl; +public class ButtonTest implements ApplicationListener, InputProcessor { + private TWL twl; + private InputMultiplexer input = new InputMultiplexer(); @Override public void create () { - if (gui != null) return; - Button button = new Button("Click Me"); FPSCounter fpsCounter = new FPSCounter(4, 2); - DialogLayout layout = new DialogLayout(); - layout.setTheme(""); - layout.setHorizontalGroup(layout.createParallelGroup().addWidgets(button, fpsCounter)); - layout.setVerticalGroup(layout.createSequentialGroup().addWidget(button).addGap(5).addWidget(fpsCounter).addGap(5)); + Layout layout = new Layout(); + layout.horizontal().sequence(0).parallel(button, fpsCounter).end().gap(); + layout.vertical().sequence(0, button, 5, fpsCounter, 0); - twl = new TwlRenderer(); - gui = new GUI(layout, twl, null); - twl.applyTheme(gui, "data/widgets.xml", FileType.Internal); + twl = new TWL("data/widgets.xml", FileType.Internal, layout); - guiInputListener = new TwlInputProcessor(gui); + input.addProcessor(twl); + input.addProcessor(this); } @Override public void resize (int width, int height) { - gui.setSize(); - twl.setSize(); } @Override public void render () { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); - Gdx.input.processEvents(guiInputListener); - gui.update(); + Gdx.input.processEvents(input); + twl.render(); } @Override public void dispose () { - gui.destroy(); + twl.dispose(); } @Override public void pause () { @@ -57,4 +50,29 @@ public class ButtonTest implements ApplicationListener { @Override public void resume () { } + + public boolean keyDown (int keycode) { + return false; + } + + public boolean keyUp (int keycode) { + return false; + } + + public boolean keyTyped (char character) { + return false; + } + + public boolean touchDown (int x, int y, int pointer) { + System.out.println("Not handled by TWL!"); + return false; + } + + public boolean touchUp (int x, int y, int pointer) { + return false; + } + + public boolean touchDragged (int x, int y, int pointer) { + return false; + } } diff --git a/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/TextAreaTest.java b/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/TextAreaTest.java index 4012329d1..df882aecb 100644 --- a/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/TextAreaTest.java +++ b/extensions/twl/gdx-twl-tests/src/com/badlogic/gdx/twl/tests/TextAreaTest.java @@ -2,32 +2,27 @@ package com.badlogic.gdx.twl.tests; import com.badlogic.gdx.ApplicationListener; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Files.FileType; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; -import com.badlogic.gdx.twl.renderer.TwlInputProcessor; -import com.badlogic.gdx.twl.renderer.TwlRenderer; +import com.badlogic.gdx.twl.Layout; +import com.badlogic.gdx.twl.TWL; import de.matthiasmann.twl.DialogLayout; import de.matthiasmann.twl.FPSCounter; -import de.matthiasmann.twl.GUI; import de.matthiasmann.twl.ScrollPane; import de.matthiasmann.twl.TextArea; import de.matthiasmann.twl.Timer; import de.matthiasmann.twl.textarea.HTMLTextAreaModel; import de.matthiasmann.twl.textarea.Style; import de.matthiasmann.twl.textarea.StyleAttribute; -import de.matthiasmann.twl.textarea.Value; import de.matthiasmann.twl.textarea.TextAreaModel.Element; +import de.matthiasmann.twl.textarea.Value; public class TextAreaTest implements ApplicationListener { - GUI gui; - TwlRenderer twl; - TwlInputProcessor guiInputListener; + TWL twl; @Override public void create () { - if (gui != null) return; - final HTMLTextAreaModel htmlText = new HTMLTextAreaModel(); TextArea textArea = new TextArea(htmlText); htmlText @@ -36,14 +31,11 @@ public class TextAreaTest implements ApplicationListener { scrollPane.setFixed(ScrollPane.Fixed.HORIZONTAL); FPSCounter fpsCounter = new FPSCounter(4, 2); - DialogLayout layout = new DialogLayout(); - layout.setTheme(""); - layout.setHorizontalGroup(layout.createParallelGroup().addWidgets(scrollPane, fpsCounter)); - layout.setVerticalGroup(layout.createSequentialGroup().addWidget(scrollPane).addGap(5).addWidget(fpsCounter).addGap(5)); + Layout layout = new Layout(); + layout.horizontal().parallel(scrollPane, fpsCounter); + layout.vertical().sequence(scrollPane, 5, fpsCounter, 5); - twl = new TwlRenderer(); - gui = new GUI(layout, twl, null); - twl.applyTheme(gui, "data/widgets.xml", FileType.Internal); + twl = new TWL("data/widgets.xml", FileType.Internal, layout); textArea.addCallback(new TextArea.Callback() { Timer timer; @@ -52,7 +44,7 @@ public class TextAreaTest implements ApplicationListener { public void handleLinkClicked (String href) { final Element element = htmlText.getElementById("badlogic"); if (timer == null) { - timer = gui.createTimer(); + timer = twl.getGUI().createTimer(); timer.setDelay(32); timer.setContinuous(true); timer.setCallback(new Runnable() { @@ -73,23 +65,19 @@ public class TextAreaTest implements ApplicationListener { speed = -speed; } }); - - guiInputListener = new TwlInputProcessor(gui); } @Override public void resize (int width, int height) { - gui.setSize(); - twl.setSize(); } @Override public void render () { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); - Gdx.input.processEvents(guiInputListener); - gui.update(); + Gdx.input.processEvents(twl); + twl.render(); } @Override public void dispose () { - gui.destroy(); + twl.dispose(); } @Override public void pause () { diff --git a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/Layout.java b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/Layout.java new file mode 100644 index 000000000..f77acee9f --- /dev/null +++ b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/Layout.java @@ -0,0 +1,121 @@ + +package com.badlogic.gdx.twl; + +import de.matthiasmann.twl.DialogLayout; +import de.matthiasmann.twl.Widget; + +public class Layout extends DialogLayout { + public Layout () { + setTheme(""); + } + + public Direction horizontal () { + return new Direction(true); + } + + public Direction vertical () { + return new Direction(false); + } + + public class Direction { + private final boolean horizontal; + + Direction (boolean horizontal) { + this.horizontal = horizontal; + } + + public Group sequence (Object... widgets) { + DialogLayout.Group dialogGroup = createSequentialGroup(); + if (horizontal) + setHorizontalGroup(dialogGroup); + else + setVerticalGroup(dialogGroup); + return new Group(null, dialogGroup).add(widgets); + } + + public Group parallel (Object... widgets) { + DialogLayout.Group dialogGroup = createParallelGroup(); + if (horizontal) + setHorizontalGroup(dialogGroup); + else + setVerticalGroup(dialogGroup); + return new Group(null, dialogGroup).add(widgets); + } + + public class Group { + private final Group parent; + private final DialogLayout.Group dialogGroup; + + Group (Group parent, DialogLayout.Group dialogGroup) { + this.parent = parent; + this.dialogGroup = dialogGroup; + } + + public Group sequence (Object... widgets) { + DialogLayout.Group dialogGroup = createSequentialGroup(); + this.dialogGroup.addGroup(dialogGroup); + return new Group(this, dialogGroup).add(widgets); + } + + public Group parallel (Object... widgets) { + DialogLayout.Group dialogGroup = createParallelGroup(); + this.dialogGroup.addGroup(dialogGroup); + return new Group(this, dialogGroup).add(widgets); + } + + public Group add (Object... widgets) { + for (int i = 0, n = widgets.length; i < n; i++) { + Object object = widgets[i]; + if (object instanceof Integer) { + int size = (Integer)object; + if (size == 0) + dialogGroup.addGap(); + else + dialogGroup.addGap(size); + } else + dialogGroup.addWidget((Widget)object); + } + return this; + } + + public Group add (String gapName, Widget... widgets) { + dialogGroup.addWidgetsWithGap(gapName, widgets); + return this; + } + + public Group gap () { + dialogGroup.addGap(); + return this; + } + + public Group gap (int size) { + dialogGroup.addGap(size); + return this; + } + + public Group gap (int min, int pref, int max) { + dialogGroup.addGap(min, pref, max); + return this; + } + + public Group gap (String name) { + dialogGroup.addGap(name); + return this; + } + + public Group defaulGap () { + dialogGroup.addDefaultGap(); + return this; + } + + public Group minGap (int size) { + dialogGroup.addMinGap(size); + return this; + } + + public Group end () { + return parent; + } + } + } +} diff --git a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/TwlInputProcessor.java b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/TWL.java similarity index 60% rename from extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/TwlInputProcessor.java rename to extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/TWL.java index 24a8b6839..4cfc0b8e3 100644 --- a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/TwlInputProcessor.java +++ b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/TWL.java @@ -1,20 +1,85 @@ -package com.badlogic.gdx.twl.renderer; +package com.badlogic.gdx.twl; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; + +import com.badlogic.gdx.Files.FileType; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.twl.renderer.GdxRenderer; +import com.badlogic.gdx.utils.GdxRuntimeException; import de.matthiasmann.twl.Event; import de.matthiasmann.twl.GUI; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.theme.ThemeManager; -/** - * @author Nathan Sweet - */ -public class TwlInputProcessor implements InputProcessor { +public class TWL implements InputProcessor { + private final GdxRenderer renderer = new GdxRenderer(); private final GUI gui; - public TwlInputProcessor (GUI gui) { - this.gui = gui; + public TWL (String themeFile, FileType fileType, Widget widget) { + this(themeFile, fileType); + setWidget(widget); + } + + public TWL (String themeFile, FileType fileType) { + Widget root = new Widget() { + protected void layout () { + layoutChildrenFullInnerArea(); + } + }; + root.setTheme(""); + + gui = new GUI(root, renderer, null); + try { + gui.applyTheme(ThemeManager.createThemeManager(getThemeURL(themeFile, fileType), renderer)); + } catch (IOException ex) { + throw new GdxRuntimeException("Error loading theme: " + themeFile + " (" + fileType + ")", ex); + } + } + + public GdxRenderer getRenderer () { + return renderer; + } + + public GUI getGUI () { + return gui; + } + + public void setWidget (Widget widget) { + Widget root = gui.getRootPane(); + root.removeAllChildren(); + root.add(widget); + } + + public void clear () { + gui.getRootPane().removeAllChildren(); + } + + public void render () { + GUI gui = this.gui; + int viewWidth = Gdx.graphics.getWidth(); + int viewHeight = Gdx.graphics.getHeight(); + if (renderer.getWidth() != viewWidth || renderer.getHeight() != viewHeight) { + renderer.setSize(viewWidth, viewHeight); + gui.setSize(viewWidth, viewHeight); + } + gui.updateTime(); + gui.handleKeyRepeat(); + gui.handleTooltips(); + gui.updateTimers(); + gui.invokeRunables(); + gui.validateLayout(); + gui.draw(); } public boolean keyDown (int keycode) { @@ -44,6 +109,11 @@ public class TwlInputProcessor implements InputProcessor { return gui.handleMouse(x, y, -1, true); } + public void dispose () { + gui.destroy(); + renderer.dispose(); + } + static public int getTwlKeyCode (int gdxKeyCode) { if (gdxKeyCode == Input.Keys.KEYCODE_0) return Event.KEY_0; if (gdxKeyCode == Input.Keys.KEYCODE_1) return Event.KEY_1; @@ -103,4 +173,28 @@ public class TwlInputProcessor implements InputProcessor { if (gdxKeyCode == Input.Keys.KEYCODE_TAB) return Event.KEY_TAB; return Event.KEY_NONE; } + + static public URL getThemeURL (String themeFile, final FileType fileType) throws MalformedURLException { + File file = new File(themeFile); + final File themeRoot = file.getParentFile(); + return new URL("gdx-twl", "local", 80, file.getName(), new URLStreamHandler() { + protected URLConnection openConnection (URL url) throws IOException { + final String path = new File(themeRoot, url.getPath()).getPath(); + final FileHandle fileHandle = Gdx.files.getFileHandle(path, fileType); + return new URLConnection(url) { + public void connect () { + } + + public Object getContent () { + return fileHandle; + } + + public InputStream getInputStream () { + if (!path.endsWith(".xml")) return null; // Only theme files are loaded through the URL. + return fileHandle.readFile(); + } + }; + } + }); + } } diff --git a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxCacheContext.java b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxCacheContext.java index 5841f522f..25e8a14f1 100644 --- a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxCacheContext.java +++ b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxCacheContext.java @@ -19,12 +19,12 @@ import de.matthiasmann.twl.renderer.CacheContext; * @author Nathan Sweet */ class GdxCacheContext implements CacheContext { - final TwlRenderer renderer; + final GdxRenderer renderer; private final HashMap textures = new HashMap(); private final HashMap fonts = new HashMap(); private boolean valid = true; - GdxCacheContext (TwlRenderer renderer) { + GdxCacheContext (GdxRenderer renderer) { this.renderer = renderer; } diff --git a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxFont.java b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxFont.java index f7ccbdfb8..d8b3b04d0 100644 --- a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxFont.java +++ b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxFont.java @@ -46,12 +46,12 @@ import de.matthiasmann.twl.utils.StateExpression; class GdxFont implements Font { static private final HAlignment[] gdxAlignment = HAlignment.values(); - final TwlRenderer renderer; + final GdxRenderer renderer; final BitmapFont bitmapFont; private final FontState[] fontStates; private final int yOffset; - public GdxFont (TwlRenderer renderer, BitmapFont bitmapFont, Map params, Collection condParams) { + public GdxFont (GdxRenderer renderer, BitmapFont bitmapFont, Map params, Collection condParams) { this.bitmapFont = bitmapFont; this.renderer = renderer; yOffset = bitmapFont.getLineHeight() - bitmapFont.getBaseLine(); diff --git a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxImage.java b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxImage.java index fbed7c02d..6f28cdca5 100644 --- a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxImage.java +++ b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxImage.java @@ -35,14 +35,14 @@ import de.matthiasmann.twl.renderer.SupportsDrawRepeat; * @author Matthias Mann */ class GdxImage implements Image, SupportsDrawRepeat { - private final TwlRenderer renderer; + private final GdxRenderer renderer; private final Sprite sprite; private final Color tintColor; private final int width; private final int height; private final boolean tile; - public GdxImage (TwlRenderer renderer, Texture texture, int srcX, int srcY, int srcWidth, int srcHeight, Color color, + public GdxImage (GdxRenderer renderer, Texture texture, int srcX, int srcY, int srcWidth, int srcHeight, Color color, boolean tile) { this.renderer = renderer; width = Math.abs(srcWidth); diff --git a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/TwlRenderer.java b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxRenderer.java similarity index 89% rename from extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/TwlRenderer.java rename to extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxRenderer.java index 9f41cc0ac..abd3f29bd 100644 --- a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/TwlRenderer.java +++ b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxRenderer.java @@ -58,7 +58,7 @@ import de.matthiasmann.twl.theme.ThemeManager; * @author Nathan Sweet * @author Matthias Mann */ -public class TwlRenderer implements Renderer { +public class GdxRenderer implements Renderer { private int mouseX, mouseY; private GdxCacheContext cacheContext; private boolean hasScissor; @@ -66,10 +66,19 @@ public class TwlRenderer implements Renderer { private TintStack tintStack = tintStateRoot; private final Color tempColor = new Color(1, 1, 1, 1); private boolean rendering; + private int width, height; final SpriteBatch spriteBatch = new SpriteBatch(); - public TwlRenderer () { + public GdxRenderer () { spriteBatch.getProjectionMatrix().setToOrtho(0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, 0, 1); + + Widget root = new Widget() { + protected void layout () { + layoutChildrenFullInnerArea(); + } + }; + root.setTheme(""); + new GUI(root, this, null); } public GdxCacheContext createNewCacheContext () { @@ -92,7 +101,7 @@ public class TwlRenderer implements Renderer { } public long getTimeMillis () { - return System.currentTimeMillis(); + return System.nanoTime() / 1000000; } public void startRenderering () { @@ -139,20 +148,26 @@ public class TwlRenderer implements Renderer { return getActiveCacheContext().loadTexture(url); } + public int getWidth () { + return width; + } + public int getHeight () { - return Gdx.graphics.getHeight(); + return height; } - public int getWidth () { - return Gdx.graphics.getWidth(); + public void setSize (int width, int height) { + this.width = width; + this.height = height; + spriteBatch.getProjectionMatrix().setToOrtho(0, width, height, 0, 0, 1); } public LineRenderer getLineRenderer () { - return null; + return null; // Unsupported. } public DynamicImage createDynamicImage (int width, int height) { - return null; + return null; // Unsupported. } public void setCursor (MouseCursor cursor) { @@ -181,6 +196,14 @@ public class TwlRenderer implements Renderer { return tempColor; } + public void dispose () { + if (cacheContext != null) { + cacheContext.destroy(); + cacheContext = null; + } + spriteBatch.dispose(); + } + static private class TintStack extends Color { final TintStack previous; @@ -204,10 +227,6 @@ public class TwlRenderer implements Renderer { } } - public void setSize () { - spriteBatch.getProjectionMatrix().setToOrtho(0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, 0, 1); - } - public void applyTheme (GUI gui, String themeFile, final FileType fileType) { File file = new File(themeFile); final File themeRoot = file.getParentFile(); diff --git a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxTexture.java b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxTexture.java index a2f9f729b..9f88d1f07 100644 --- a/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxTexture.java +++ b/extensions/twl/gdx-twl/src/com/badlogic/gdx/twl/renderer/GdxTexture.java @@ -38,10 +38,10 @@ import de.matthiasmann.twl.renderer.Texture; * @author Nathan Sweet */ class GdxTexture implements Texture, Resource { - private final TwlRenderer renderer; + private final GdxRenderer renderer; private final com.badlogic.gdx.graphics.Texture texture; - public GdxTexture (TwlRenderer renderer, FileHandle textureFile) { + public GdxTexture (GdxRenderer renderer, FileHandle textureFile) { this.renderer = renderer; texture = Gdx.graphics.newTexture(textureFile, TextureFilter.Linear, TextureFilter.Linear, TextureWrap.ClampToEdge, TextureWrap.ClampToEdge); diff --git a/gdx/src/com/badlogic/gdx/Game.java b/gdx/src/com/badlogic/gdx/Game.java index fb218d4f9..e96e19a52 100644 --- a/gdx/src/com/badlogic/gdx/Game.java +++ b/gdx/src/com/badlogic/gdx/Game.java @@ -1,49 +1,32 @@ + package com.badlogic.gdx; public abstract class Game implements ApplicationListener { Screen screen; - - /** - * Starts the game and returns the start {@link Screen}. This - * will be called in the rendering thread so you can do anything - * you like. - * - * @return the start screen. - */ - public abstract Screen start(); - - @Override - public void create() { - screen = start(); - } - @Override - public void dispose() { - screen.dispose(); + @Override public void dispose () { + if (screen != null) screen.hide(); } - @Override - public void pause() { - screen.pause(); + @Override public void pause () { + if (screen != null) screen.pause(); } - @Override - public void render() { - screen.render(Gdx.graphics.getDeltaTime()); + @Override public void resume () { + if (screen != null) screen.resume(); } - @Override - public void resize(int width, int height) { - screen.resize(width,height); + @Override public void render () { + if (screen != null) screen.render(Gdx.graphics.getDeltaTime()); } - @Override - public void resume() { - screen.resume(); + @Override public void resize (int width, int height) { + if (screen != null) screen.resize(width, height); } - - public void setScreen(Screen screen) { - this.screen.dispose(); + + public void setScreen (Screen screen) { + if (this.screen != null) this.screen.hide(); this.screen = screen; + screen.show(); } } diff --git a/gdx/src/com/badlogic/gdx/InputMultiplexer.java b/gdx/src/com/badlogic/gdx/InputMultiplexer.java new file mode 100644 index 000000000..2c4c71baf --- /dev/null +++ b/gdx/src/com/badlogic/gdx/InputMultiplexer.java @@ -0,0 +1,48 @@ + +package com.badlogic.gdx; + +import java.util.ArrayList; + +public class InputMultiplexer implements InputProcessor { + private ArrayList processors = new ArrayList(4); + + public void addProcessor (InputProcessor processor) { + processors.add(processor); + } + + public boolean keyDown (int keycode) { + for (int i = 0, n = processors.size(); i < n; i++) + if (processors.get(i).keyDown(keycode)) return true; + return false; + } + + public boolean keyUp (int keycode) { + for (int i = 0, n = processors.size(); i < n; i++) + if (processors.get(i).keyUp(keycode)) return true; + return false; + } + + public boolean keyTyped (char character) { + for (int i = 0, n = processors.size(); i < n; i++) + if (processors.get(i).keyTyped(character)) return true; + return false; + } + + public boolean touchDown (int x, int y, int pointer) { + for (int i = 0, n = processors.size(); i < n; i++) + if (processors.get(i).touchDown(x, y, pointer)) return true; + return false; + } + + public boolean touchUp (int x, int y, int pointer) { + for (int i = 0, n = processors.size(); i < n; i++) + if (processors.get(i).touchUp(x, y, pointer)) return true; + return false; + } + + public boolean touchDragged (int x, int y, int pointer) { + for (int i = 0, n = processors.size(); i < n; i++) + if (processors.get(i).touchDragged(x, y, pointer)) return true; + return false; + } +} diff --git a/gdx/src/com/badlogic/gdx/Screen.java b/gdx/src/com/badlogic/gdx/Screen.java index 96cd672a2..01284d291 100644 --- a/gdx/src/com/badlogic/gdx/Screen.java +++ b/gdx/src/com/badlogic/gdx/Screen.java @@ -1,18 +1,30 @@ + package com.badlogic.gdx; public abstract class Screen { - final Game game; - - public Screen(Game game) { + public final Game game; + + public Screen (Game game) { this.game = game; } - public abstract void resize(int width, int height); - - public abstract void render(float delta); - - public abstract void pause(); - - public abstract void resume(); - - public abstract void dispose(); + + public abstract void render (float delta); + + public void resize (int width, int height) { + } + + public void show () { + } + + public void hide () { + } + + public void pause () { + } + + public void resume () { + } + + public void dispose () { + } }