set flag AllPublic.
lib 1013739
import processing.core.*;
static Pair pMain2(final Class c) {
ret swing(func -> Pair {
A a = nuInstance(c);
Frame f = pMain2_runSketch(null, a);
clearThreadLocal(PApplet2_instancesMade);
ret pair(a, f);
});
}
static PApplet2 pMain2() {
ret pMain2(mc());
}
static Frame pMain2_runSketch(final String[] args,
final PApplet constructedSketch) {
// Supposed to help with flicker, but no effect on OS X.
// TODO IIRC this helped on Windows, but need to double check.
System.setProperty("sun.awt.noerasebackground", "true");
// Remove 60fps limit on the JavaFX "pulse" timer
System.setProperty("javafx.animation.fullspeed", "true");
// Doesn't seem to do anything helpful here (that can't be done via Runner)
//System.setProperty("com.apple.mrj.application.apple.menu.about.name", "potato");
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace();
uncaughtThrowable = e;
}
});
// This doesn't work, need to mess with Info.plist instead
/*
// In an exported application, add the Contents/Java folder to the
// java.library.path, so that native libraries work properly.
// Without this, the library path is only set to Contents/MacOS
// where the launcher binary lives.
if (platform == MACOSX) {
URL coreJarURL =
PApplet.class.getProtectionDomain().getCodeSource().getLocation();
// The jarPath from above will/may be URL encoded (%20 for spaces)
String coreJarPath = urlDecode(coreJarURL.getPath());
if (coreJarPath.endsWith("/Contents/Java/core.jar")) {
// remove the /core.jar part from the end
String javaPath = coreJarPath.substring(0, coreJarPath.length() - 9);
String libraryPath = System.getProperty("java.library.path");
libraryPath += File.pathSeparator + javaPath;
System.setProperty("java.library.path", libraryPath);
}
}
*/
// Catch any HeadlessException to provide more useful feedback
try {
// Call validate() while resize events are in progress
Toolkit.getDefaultToolkit().setDynamicLayout(true);
} catch (HeadlessException e) {
System.err.println("Cannot run sketch without a display. Read this for possible solutions:");
System.err.println("https://github.com/processing/processing/wiki/Running-without-a-Display");
System.exit(1);
}
// So that the system proxy setting are used by default
System.setProperty("java.net.useSystemProxies", "true");
if (args.length < 1) {
System.err.println("Usage: PApplet [options] [sketch args]");
System.err.println("See the Javadoc for PApplet for an explanation.");
System.exit(1);
}
boolean external = false;
int[] location = null;
int[] editorLocation = null;
String name = null;
int windowColor = 0;
int stopColor = 0xff808080;
boolean hideStop = false;
int displayNum = -1; // use default
// boolean fullScreen = false;
boolean present = false;
// boolean spanDisplays = false;
int density = -1;
String param = null, value = null;
String folder = calcSketchPath();
int argIndex = 0;
while (argIndex < args.length) {
int equals = args[argIndex].indexOf('=');
if (equals != -1) {
param = args[argIndex].substring(0, equals);
value = args[argIndex].substring(equals + 1);
if (param.equals(ARGS_EDITOR_LOCATION)) {
external = true;
editorLocation = parseInt(split(value, ','));
} else if (param.equals(ARGS_DISPLAY)) {
displayNum = parseInt(value, -1);
if (displayNum == -1) {
System.err.println("Could not parse " + value + " for " + ARGS_DISPLAY);
}
} else if (param.equals(ARGS_WINDOW_COLOR)) {
if (value.charAt(0) == '#' && value.length() == 7) {
value = value.substring(1);
windowColor = 0xff000000 | Integer.parseInt(value, 16);
} else {
System.err.println(ARGS_WINDOW_COLOR + " should be a # followed by six digits");
}
} else if (param.equals(ARGS_STOP_COLOR)) {
if (value.charAt(0) == '#' && value.length() == 7) {
value = value.substring(1);
stopColor = 0xff000000 | Integer.parseInt(value, 16);
} else {
System.err.println(ARGS_STOP_COLOR + " should be a # followed by six digits");
}
} else if (param.equals(ARGS_SKETCH_FOLDER)) {
folder = value;
} else if (param.equals(ARGS_LOCATION)) {
location = parseInt(split(value, ','));
} else if (param.equals(ARGS_DENSITY)) {
density = parseInt(value, -1);
if (density == -1) {
System.err.println("Could not parse " + value + " for " + ARGS_DENSITY);
} else if (density != 1 && density != 2) {
density = -1;
System.err.println(ARGS_DENSITY + " should be 1 or 2");
}
}
} else {
if (args[argIndex].equals(ARGS_PRESENT)) {
present = true;
// } else if (args[argIndex].equals(ARGS_SPAN_DISPLAYS)) {
// spanDisplays = true;
} else if (args[argIndex].equals(ARGS_HIDE_STOP)) {
hideStop = true;
} else if (args[argIndex].equals(ARGS_EXTERNAL)) {
external = true;
} else {
name = args[argIndex];
break; // because of break, argIndex won't increment again
}
}
argIndex++;
}
// // Now that sketch path is passed in args after the sketch name
// // it's not set in the above loop(the above loop breaks after
// // finding sketch name). So setting sketch path here.
// // https://github.com/processing/processing/commit/0a14835e6f5f4766b022e73a8fe562318636727c
// // TODO this is a hack added for PDE X and needs to be removed [fry 141104]
// for (int i = 0; i < args.length; i++) {
// if (args[i].startsWith(ARGS_SKETCH_FOLDER)){
// folder = args[i].substring(args[i].indexOf('=') + 1);
// }
// }
final PApplet sketch;
if (constructedSketch != null) {
sketch = constructedSketch;
} else {
try {
Class> c =
Thread.currentThread().getContextClassLoader().loadClass(name);
sketch = (PApplet) c.newInstance();
} catch (RuntimeException re) {
// Don't re-package runtime exceptions
throw re;
} catch (Exception e) {
// Package non-runtime exceptions so we can throw them freely
throw new RuntimeException(e);
}
}
if (platform == MACOSX) {
try {
final String td = "processing.core.ThinkDifferent";
Class> thinkDifferent =
Thread.currentThread().getContextClassLoader().loadClass(td);
Method method =
thinkDifferent.getMethod("init", new Class[] { PApplet.class });
method.invoke(null, new Object[] { sketch });
} catch (Exception e) {
e.printStackTrace(); // That's unfortunate
}
}
// Set the suggested display that's coming from the command line
// (and most likely, from the PDE's preference setting).
sketch.display = displayNum;
// Set the suggested density that is coming from command line
// (most likely set from the PDE based on a system DPI scaling)
sketch.suggestedDensity = density;
sketch.present = present;
// For 3.0.1, moved this above handleSettings() so that loadImage() can be
// used inside settings(). Sets a terrible precedent, but the alternative
// of not being able to size a sketch to an image is driving people loopy.
// A handful of things that need to be set before init/start.
// if (folder == null) {
// folder = calcSketchPath();
// }
sketch.sketchPath = folder;
// Don't set 'args' to a zero-length array if it should be null [3.0a8]
if (args.length != argIndex + 1) {
// pass everything after the class name in as args to the sketch itself
// (fixed for 2.0a5, this was just subsetting by 1, which didn't skip opts)
sketch.args = PApplet.subset(args, argIndex + 1);
}
// Call the settings() method which will give us our size() call
// try {
sketch.handleSettings();
// } catch (Throwable t) {
// System.err.println("I think I'm gonna hurl");
// }
//// sketch.spanDisplays = spanDisplays;
// // If spanning screens, that means we're also full screen.
//// fullScreen |= spanDisplays;
// if (spanDisplays) {
// displayIndex = SPAN;
//// fullScreen = true;
// }
// // If the applet doesn't call for full screen, but the command line does,
// // enable it. Conversely, if the command line does not, don't disable it.
// // Query the applet to see if it wants to be full screen all the time.
// //fullScreen |= sketch.sketchFullScreen();
// sketch.fullScreen |= fullScreen;
sketch.external = external;
if (windowColor != 0) {
sketch.windowColor = windowColor;
}
final PSurface surface = sketch.initSurface();
// sketch.initSurface(windowColor, displayIndex, fullScreen, spanDisplays);
/*
// Wait until the applet has figured out its width. In a static mode app,
// everything happens inside setup(), so this will be after setup() has
// completed, and the empty draw() has set "finished" to true.
while (sketch.defaultSize && !sketch.finished) {
//System.out.println("default size");
try {
Thread.sleep(5);
} catch (InterruptedException e) {
//System.out.println("interrupt");
}
}
*/
if (present) {
if (hideStop) {
stopColor = 0; // they'll get the hint
}
surface.placePresent(stopColor);
} else {
surface.placeWindow(location, editorLocation);
}
// not always running externally when in present mode
// moved above setVisible() in 3.0 alpha 11
if (sketch.external) {
surface.setupExternalMessages();
}
sketch.showSurface();
sketch.startSurface();
/*
if (sketch.getGraphics().displayable()) {
surface.setVisible(true);
}
//sketch.init();
surface.startThread();
*/
ret frame;
}