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
--- /dev/null
+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
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
}\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
}\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
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
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
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
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
// 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