OSDN Git Service

i give up for today, Nate you take over. Shit doesn'T compile so make sure we have...
authorbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Tue, 2 Nov 2010 02:55:32 +0000 (02:55 +0000)
committerbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Tue, 2 Nov 2010 02:55:32 +0000 (02:55 +0000)
backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/desktop/LwjglApplication.java
backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/desktop/LwjglCanvas.java [new file with mode: 0644]
backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/desktop/LwjglGraphics.java
extensions/hiero/src/com/badlogic/gdx/hiero/Hiero.java

index 55763dd..16c6653 100644 (file)
@@ -24,12 +24,8 @@ public class LwjglApplication implements Application {
        Thread mainLoopThread;\r
        boolean running = true;\r
        \r
-       public LwjglApplication(ApplicationListener listener, String title, int width, int height, boolean useGL2) {\r
-               this(listener, title, width, height, useGL2, null);\r
-       }\r
-       \r
-       public LwjglApplication(ApplicationListener listener, String title, int width, int height, boolean useGL2, Canvas canvas) {\r
-               graphics = new LwjglGraphics(title, width, height, useGL2, canvas);\r
+       public LwjglApplication(ApplicationListener listener, String title, int width, int height, boolean useGL2) {    \r
+               graphics = new LwjglGraphics(title, width, height, useGL2);\r
                audio = new LwjglAudio();\r
                files = new LwjglFiles();\r
                input = new LwjglInput();\r
diff --git a/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/desktop/LwjglCanvas.java b/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/desktop/LwjglCanvas.java
new file mode 100644 (file)
index 0000000..8b2b305
--- /dev/null
@@ -0,0 +1,179 @@
+package com.badlogic.gdx.backends.desktop;\r
+\r
+import java.awt.Canvas;\r
+import java.awt.Dimension;\r
+import java.lang.reflect.InvocationTargetException;\r
+\r
+import javax.swing.SwingUtilities;\r
+\r
+import org.lwjgl.LWJGLException;\r
+import org.lwjgl.input.Keyboard;\r
+import org.lwjgl.opengl.Display;\r
+import org.lwjgl.opengl.DisplayMode;\r
+\r
+import com.badlogic.gdx.Application;\r
+import com.badlogic.gdx.ApplicationListener;\r
+import com.badlogic.gdx.Audio;\r
+import com.badlogic.gdx.Files;\r
+import com.badlogic.gdx.Graphics;\r
+import com.badlogic.gdx.Input;\r
+import com.badlogic.gdx.utils.GdxRuntimeException;\r
+\r
+public class LwjglCanvas implements Application {\r
+       LwjglGraphics graphics;\r
+       LwjglAudio audio;\r
+       LwjglFiles files;\r
+       LwjglInput input;\r
+       final ApplicationListener listener;\r
+       Thread mainLoopThread;\r
+       boolean running = true;\r
+       Canvas canvas;\r
+       \r
+       public LwjglCanvas( ApplicationListener listener, boolean useGL2) {\r
+               LwjglNativesLoader.load();\r
+               \r
+               canvas = new Canvas() {                 \r
+                       private final Dimension minSize = new Dimension();\r
+\r
+                       public final void addNotify () {\r
+                               super.addNotify();\r
+                               try {\r
+                                       graphics.setupDisplay();\r
+                                       start();\r
+                               } catch (LWJGLException e) {\r
+                                       throw new GdxRuntimeException(e);\r
+                               }                                                       \r
+                       }\r
+\r
+                       public Dimension getMinimumSize () {\r
+                               return minSize;\r
+                       }                       \r
+               };                      \r
+               \r
+               canvas.setSize(100, 100);\r
+               canvas.setMinimumSize(new Dimension(2,2));\r
+               graphics = new LwjglGraphics( canvas, useGL2);\r
+               audio = new LwjglAudio();\r
+               files = new LwjglFiles();\r
+               input = new LwjglInput();\r
+               this.listener = listener;\r
+       }\r
+       \r
+       public Canvas getCanvas() {\r
+               return canvas;\r
+       }\r
+\r
+       @Override\r
+       public Audio getAudio() {       \r
+               return audio;\r
+       }\r
+\r
+       @Override\r
+       public Files getFiles() {\r
+               return files;\r
+       }\r
+\r
+       @Override\r
+       public Graphics getGraphics() {\r
+               return graphics;\r
+       }\r
+\r
+       @Override\r
+       public Input getInput() {\r
+               return input;\r
+       }\r
+\r
+       @Override\r
+       public ApplicationType getType() {\r
+               return ApplicationType.Desktop;\r
+       }\r
+\r
+       @Override\r
+       public int getVersion() {\r
+               return 0;\r
+       }\r
+\r
+       @Override\r
+       public void log(String tag, String message) {\r
+               System.out.println( tag + ": " + message );\r
+       }\r
+       \r
+       private void start() {\r
+               LwjglNativesLoader.load();\r
+               mainLoopThread = new Thread("LWJGL Application") {\r
+                       @SuppressWarnings("synthetic-access")\r
+                       public void run () {                            \r
+                               LwjglCanvas.this.mainLoop();                                                    \r
+                       }\r
+               };\r
+               mainLoopThread.start();\r
+       }\r
+       \r
+       private void mainLoop( ) {                      \r
+               Keyboard.enableRepeatEvents(true);\r
+               try {\r
+                       SwingUtilities.invokeAndWait(new Runnable() {\r
+                               public void run() {\r
+                                       listener.create();\r
+                                       listener.resize(graphics.getWidth(), graphics.getHeight());                     \r
+                               }\r
+                       });\r
+               } catch (Exception e1) {\r
+                       throw new GdxRuntimeException(e1);\r
+               }\r
+               \r
+               Runnable runnable = new Runnable() {\r
+                       int lastWidth = graphics.getWidth();\r
+                       int lastHeight = graphics.getHeight();\r
+                       \r
+                       @Override\r
+                       public void run() {\r
+                               graphics.updateTime();\r
+                               input.update();\r
+                               \r
+                               if( lastWidth != graphics.getWidth() || lastHeight != graphics.getHeight() ) {\r
+                                       lastWidth = graphics.getWidth();\r
+                                       lastHeight = graphics.getHeight();\r
+                                       try {\r
+                                               Display.setDisplayMode(new DisplayMode(lastWidth, lastHeight));\r
+                                       } catch (LWJGLException e) {\r
+                                               throw new GdxRuntimeException(e);\r
+                                       }\r
+                                       listener.resize(lastWidth, lastHeight);\r
+                               }\r
+                               \r
+                               listener.render();\r
+                               input.processEvents(null);\r
+                               Display.update();\r
+                               Display.sync(60);               \r
+                       }\r
+               };\r
+               \r
+               while(running) {\r
+                       SwingUtilities.invokeLater(runnable);   \r
+                       try {\r
+                               Thread.sleep(16);\r
+                       } catch (InterruptedException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       }\r
+               }\r
+               \r
+               SwingUtilities.invokeLater(new Runnable() {\r
+                       public void run() {\r
+                               listener.pause();\r
+                               listener.destroy();\r
+                               Display.destroy();              \r
+                       }\r
+               });     \r
+       }\r
+\r
+       public void stop() {\r
+               running = false;\r
+               try {\r
+                       mainLoopThread.join();\r
+               }\r
+               catch(Exception ex) {                   \r
+               }\r
+       }\r
+}\r
index 2e05c03..4d5f025 100644 (file)
@@ -58,11 +58,18 @@ public final class LwjglGraphics implements Graphics{
        String title;\r
        Canvas canvas;\r
 \r
-       LwjglGraphics (String title, int width, int height, boolean useGL2IfAvailable, Canvas canvas) {         \r
+       LwjglGraphics (String title, int width, int height, boolean useGL2IfAvailable) {                \r
                useGL2 = useGL2IfAvailable;\r
                this.title = title;\r
                this.width = width;\r
-               this.height = height;\r
+               this.height = height;           \r
+       }\r
+       \r
+       LwjglGraphics(Canvas canvas, boolean useGL2IfAvailable) {\r
+               useGL2 = useGL2IfAvailable;\r
+               this.title = "";\r
+               this.width = canvas.getWidth();\r
+               this.height = canvas.getHeight();\r
                this.canvas = canvas;\r
        }\r
 \r
@@ -79,11 +86,17 @@ public final class LwjglGraphics implements Graphics{
        }\r
 \r
        public int getHeight () {\r
-               return height;\r
+               if(canvas!=null)\r
+                       return canvas.getHeight();\r
+               else\r
+                       return height;\r
        }\r
 \r
        public int getWidth () {\r
-               return width;\r
+               if(canvas!=null)\r
+                       return canvas.getWidth();\r
+               else\r
+                       return width;\r
        }\r
 \r
        public boolean isGL11Available () {\r
@@ -177,10 +190,16 @@ public final class LwjglGraphics implements Graphics{
        }\r
        \r
        protected void setupDisplay () throws LWJGLException {\r
-               if(canvas!=null) Display.setParent(canvas);\r
-               Display.setDisplayMode(new DisplayMode(width, height));\r
-               Display.setFullscreen(false);\r
-               Display.setTitle(title);\r
+               if(canvas!=null) {\r
+                       Display.setParent(canvas);\r
+                       Display.setDisplayMode(new DisplayMode(canvas.getWidth(), canvas.getHeight()));\r
+                       Display.setFullscreen(false);\r
+               }\r
+               else {\r
+                       Display.setDisplayMode(new DisplayMode(width, height));\r
+                       Display.setFullscreen(false);\r
+                       Display.setTitle(title);\r
+               }\r
                int samples = 0;\r
                try {\r
                        Display.create(new PixelFormat(8, 8, 0, samples));\r
index a7b2df5..a67bc3e 100644 (file)
@@ -86,6 +86,7 @@ import javax.swing.JWindow;
 import javax.swing.KeyStroke;\r
 import javax.swing.ScrollPaneConstants;\r
 import javax.swing.SpinnerNumberModel;\r
+import javax.swing.SwingUtilities;\r
 import javax.swing.border.EmptyBorder;\r
 import javax.swing.event.ChangeEvent;\r
 import javax.swing.event.ChangeListener;\r
@@ -99,6 +100,7 @@ import org.lwjgl.opengl.GL11;
 import com.badlogic.gdx.ApplicationListener;\r
 import com.badlogic.gdx.Gdx;\r
 import com.badlogic.gdx.backends.desktop.LwjglApplication;\r
+import com.badlogic.gdx.backends.desktop.LwjglCanvas;\r
 import com.badlogic.gdx.graphics.BitmapFont;\r
 import com.badlogic.gdx.graphics.Color;\r
 import com.badlogic.gdx.graphics.Texture;\r
@@ -181,6 +183,9 @@ public class Hiero extends JFrame {
                Splash splash = new Splash(this, "/splash.jpg", 2000);\r
                initialize();\r
                splash.close();\r
+               \r
+               LwjglCanvas lwjglCanvas = new LwjglCanvas(new Renderer(), false);\r
+               gamePanel.add(lwjglCanvas.getCanvas());\r
 \r
                prefs = Preferences.userNodeForPackage(Hiero.class);\r
                java.awt.Color backgroundColor = EffectUtil.fromString(prefs.get("background", "000000"));\r
@@ -201,25 +206,6 @@ public class Hiero extends JFrame {
                effectsListModel.addElement(new ShadowEffect());\r
                new EffectPanel(colorEffect);\r
 \r
-               gamePanel.add(glCanvas = new Canvas() {\r
-                       private final Dimension minSize = new Dimension();\r
-\r
-                       public final void addNotify () {\r
-                               super.addNotify();\r
-                               app = new LwjglApplication(new Renderer(), "Hiero", 200, 200, false, glCanvas);\r
-                               \r
-                               addWindowListener(new WindowAdapter() {\r
-                                       public void windowClosed (WindowEvent event) {\r
-                                               app.stop();\r
-                                       }\r
-                               });\r
-                       }\r
-\r
-                       public Dimension getMinimumSize () {\r
-                               return minSize;\r
-                       }\r
-               });\r
-\r
                setVisible(true);\r
        }\r
 \r
@@ -1308,6 +1294,12 @@ public class Hiero extends JFrame {
 //                             break;\r
 //                     }\r
 //             }\r
-               new Hiero();\r
+               SwingUtilities.invokeLater( new Runnable() {\r
+                       \r
+                       @Override\r
+                       public void run() {\r
+                               new Hiero();                            \r
+                       }\r
+               });\r
        }\r
 }\r