# HG changeset patch # User Jaroslav Tulach # Date 1394452608 -3600 # Node ID 5ef40158eb9cdb3770f2ba13fa7e61af653e9fc5 # Parent b083d786eeec56beeca7c078df903d2ddae37f79 Can play minesweeper on iPad diff -r b083d786eeec -r 5ef40158eb9c minesweeper/nbactions.xml --- a/minesweeper/nbactions.xml Mon Mar 10 10:59:38 2014 +0100 +++ b/minesweeper/nbactions.xml Mon Mar 10 12:56:48 2014 +0100 @@ -23,8 +23,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---> - +--> run @@ -42,4 +41,11 @@ maven + + CUSTOM-iPad Sim + iPad Sim + + robovm:ipad-sim + + diff -r b083d786eeec -r 5ef40158eb9c minesweeper/pom.xml --- a/minesweeper/pom.xml Mon Mar 10 10:59:38 2014 +0100 +++ b/minesweeper/pom.xml Mon Mar 10 12:56:48 2014 +0100 @@ -23,6 +23,23 @@ + org.robovm + robovm-maven-plugin + 0.0.8.1 + + + org.apidesign.demo.minesweeper.RoboVMJFXLauncher + + java.util.logging.ConsoleHandler + java.util.logging.SimpleFormatter + org.netbeans.html.ko4j.KO4J + org.netbeans.html.sound.impl.BrowserAudioEnv + + + false + + + org.apache.maven.plugins maven-compiler-plugin 2.3.2 @@ -88,6 +105,21 @@ 6.7 test + + org.apidesign.html + xtrnlbrwsr + 0.7-SNAPSHOT + + + org.robovm + robovm-rt + 0.0.8 + + + org.robovm + robovm-cocoatouch + 0.0.8 + diff -r b083d786eeec -r 5ef40158eb9c minesweeper/src/main/java/org/apidesign/demo/minesweeper/Foo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/Foo.java Mon Mar 10 12:56:48 2014 +0100 @@ -0,0 +1,30 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.apidesign.demo.minesweeper; + +import org.robovm.cocoatouch.foundation.NSURL; +import org.robovm.cocoatouch.foundation.NSURLRequest; +import org.robovm.objc.ObjCClass; +import org.robovm.objc.Selector; +import org.robovm.rt.bro.Bro; +import org.robovm.rt.bro.annotation.Bridge; +import org.robovm.rt.bro.annotation.Library; + +@Library("Foundation") +public class Foo { + static { + Bro.bind(); + } + + private static final Selector requestWithURL$ = Selector.register("requestWithURL:"); + @Bridge(symbol = "objc_msgSend") + private native static NSURLRequest objc_requestWithURL(ObjCClass __self__, Selector __cmd__, NSURL URL); + public static NSURLRequest requestWithURL(NSURL url) { + return objc_requestWithURL(ObjCClass.getByType(NSURLRequest.class), requestWithURL$, url); + } + + +} diff -r b083d786eeec -r 5ef40158eb9c minesweeper/src/main/java/org/apidesign/demo/minesweeper/IBrwsrPrsntr.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/IBrwsrPrsntr.java Mon Mar 10 12:56:48 2014 +0100 @@ -0,0 +1,59 @@ +package org.apidesign.demo.minesweeper; + +import java.io.IOException; +import java.net.URI; +import java.util.logging.Logger; +import org.apidesign.html.brwsr.XtrnlBrwsrPrsntr; +import org.robovm.cocoatouch.foundation.NSURL; +import org.robovm.cocoatouch.uikit.UIWebView; +import org.robovm.objc.ObjCBlock; +import org.robovm.objc.block.VoidBlock; +import org.robovm.rt.bro.Bro; +import org.robovm.rt.bro.NativeObject; +import org.robovm.rt.bro.annotation.Bridge; +import org.robovm.rt.bro.annotation.Library; + +/** + * + * @author jtulach + */ +@Library("dispatch") +final class IBrwsrPrsntr extends XtrnlBrwsrPrsntr { + private final UIWebView wv; + + static { + Bro.bind(); + } + + public static class Queue extends NativeObject { + } + + @Bridge(symbol = "dispatch_get_current_queue") + public static native Queue getMainQueue(); + + @Bridge(symbol = "dispatch_async") + public static native void async(Queue queue, ObjCBlock block); + + public IBrwsrPrsntr(UIWebView wv) throws Exception { + this.wv = wv; + } + + @Override + public void runSafe(final Runnable r) { + VoidBlock vb = new VoidBlock() { + @Override + public void invoke() { + r.run(); + } + }; + ObjCBlock ocb = VoidBlock.Marshaler.toObjCBlock(vb); + async(getMainQueue(), ocb); + } + + @Override + protected void showBrwsr(URI page) throws IOException { + wv.loadRequest(Foo.requestWithURL(new NSURL(page.toString()))); + } + private static final Logger LOG = Logger.getLogger(IBrwsrPrsntr.class.getName()); + +} diff -r b083d786eeec -r 5ef40158eb9c minesweeper/src/main/java/org/apidesign/demo/minesweeper/Main.java --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/Main.java Mon Mar 10 10:59:38 2014 +0100 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/Main.java Mon Mar 10 12:56:48 2014 +0100 @@ -30,7 +30,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import net.java.html.boot.BrowserBuilder; -import org.apidesign.html.dlvkbrwsr.XtrnlBrwsrPrsntr; +import org.apidesign.html.brwsr.XtrnlBrwsrPrsntr; /** Bootstrap and initialization. */ @@ -38,38 +38,11 @@ private static final Logger LOG = Logger.getLogger(Main.class.getName()); private Main() { } - - static Object[] showBrwsr(URI uri, String cmd) throws IOException { - LOG.log(Level.INFO, "Showing {0}", uri); - if (cmd == null) { - try { - LOG.log(Level.INFO, "Trying Desktop.browse on {0} {2} by {1}", new Object[]{ - System.getProperty("java.vm.name"), - System.getProperty("java.vm.vendor"), - System.getProperty("java.vm.version"),}); - java.awt.Desktop.getDesktop().browse(uri); - LOG.log(Level.INFO, "Desktop.browse successfully finished"); - return null; - } catch (UnsupportedOperationException ex) { - LOG.log(Level.INFO, "Desktop.browse not supported: {0}", ex.getMessage()); - LOG.log(Level.FINE, null, ex); - } - } - { - String cmdName = cmd == null ? "xdg-open" : cmd; - String[] cmdArr = { - cmdName, uri.toString() - }; - LOG.log(Level.INFO, "Launching {0}", Arrays.toString(cmdArr)); - final Process process = Runtime.getRuntime().exec(cmdArr); - return new Object[]{process, null}; - } - } - /** Launches the browser */ - public static void main(String... args) throws Exception { + /** Called when page is ready */ + public static void onPageLoad(String... args) throws Exception { /* - Logger l = Logger.getLogger("org.apidesign.html.dlvkbrwsr"); + Logger l = Logger.getLogger("org.apidesign.html.brwsr"); l.setLevel(Level.ALL); l.setUseParentHandlers(false); ConsoleHandler ch = new ConsoleHandler(); @@ -77,23 +50,6 @@ l.addHandler(ch); */ - - BrowserBuilder.newBrowser(new XtrnlBrwsrPrsntr() { - @Override - protected void showBrwsr(URI page) throws IOException { - Main.showBrwsr(page, null); - } - }). - loadPage("pages/index.html"). - loadClass(Main.class). - invoke("onPageLoad", args). - showAndWait(); - System.in.read(); - System.exit(0); - } - - /** Called when page is ready */ - public static void onPageLoad(String... args) throws Exception { Mines m = new Mines(); m.applyBindings(); } diff -r b083d786eeec -r 5ef40158eb9c minesweeper/src/main/java/org/apidesign/demo/minesweeper/RoboVMJFXLauncher.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/RoboVMJFXLauncher.java Mon Mar 10 12:56:48 2014 +0100 @@ -0,0 +1,57 @@ +package org.apidesign.demo.minesweeper; + +import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.robovm.cocoatouch.coregraphics.CGRect; +import org.robovm.cocoatouch.foundation.NSAutoreleasePool; +import org.robovm.cocoatouch.foundation.NSDictionary; +import org.robovm.cocoatouch.uikit.UIApplication; +import org.robovm.cocoatouch.uikit.UIApplicationDelegate; +import org.robovm.cocoatouch.uikit.UIColor; +import org.robovm.cocoatouch.uikit.UIScreen; +import org.robovm.cocoatouch.uikit.UIWebView; +import org.robovm.cocoatouch.uikit.UIWindow; + +public class RoboVMJFXLauncher extends UIApplicationDelegate.Adapter { + int clickCount; + private UIWindow window; + private UIWebView wv; + + @Override + public boolean didFinishLaunching(UIApplication application, NSDictionary launchOptions) { + wv = new UIWebView(); + wv.setFrame(new CGRect(0.0f, 0.0f, 800.0f, 1080.0f)); + + window = new UIWindow(UIScreen.getMainScreen().getBounds()); + window.setBackgroundColor(UIColor.lightGrayColor()); + window.addSubview(wv); + window.makeKeyAndVisible(); + + try { + IBrwsrPrsntr p = new IBrwsrPrsntr(wv); + URL u = RoboVMJFXLauncher.class.getResource("pages/index.html"); + p.displayPage(u, new Runnable() { + @Override + public void run() { + try { + Main.onPageLoad(); + } catch (Exception ex) { + Logger.getLogger(RoboVMJFXLauncher.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } catch (Throwable t) { + t.printStackTrace(); + } + + + return true; + } + + public static void main(String[] args) throws Exception { + NSAutoreleasePool pool = new NSAutoreleasePool(); + UIApplication.main(args, null, RoboVMJFXLauncher.class); + pool.drain(); + } +}