Code cleanup

This commit is contained in:
Andrea Cavalli 2018-09-22 11:17:30 +02:00
parent 1b1cfa08fa
commit b57ae900e5
391 changed files with 15558 additions and 16635 deletions

View File

@ -21,15 +21,14 @@ public class Engine {
private static Platform platform; private static Platform platform;
private static boolean running = false; private static boolean running = false;
private static BehaviorSubject<LoadingStatus> loadPhase = BehaviorSubject.create(); private static BehaviorSubject<LoadingStatus> loadPhase = BehaviorSubject.create();
private BehaviorSubject<Boolean> loaded = BehaviorSubject.create(false); private final BehaviorSubject<Boolean> loaded = BehaviorSubject.create(false);
private HardwareDevice hardwareDevice; private HardwareDevice hardwareDevice;
private Engine() { private Engine() {}
}
/** /**
* Start an instance of the calculator. * Start an instance of the calculator.
* *
* @param platform * @param platform
* Platform implementation * Platform implementation
* @param screen * @param screen
@ -43,32 +42,34 @@ public class Engine {
* @throws InterruptedException * @throws InterruptedException
* @throws IOException * @throws IOException
*/ */
public static void start(Platform platform, Screen screen, HardwareDisplay disp, HardwareTouchDevice touchdevice, HUD hud, public static void start(final Platform platform, final Screen screen, final HardwareDisplay disp,
StartupArguments args) throws InterruptedException, IOException { final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args)
if (running) { throws InterruptedException, IOException {
if (Engine.running)
throw new RuntimeException("Already running!"); throw new RuntimeException("Already running!");
} else { else {
running = true; Engine.running = true;
INSTANCE.startInstance(platform, screen, disp, touchdevice, hud, args); Engine.INSTANCE.startInstance(platform, screen, disp, touchdevice, hud, args);
} }
} }
private void startInstance(final Platform platform, Screen screen, HardwareDisplay disp, HardwareTouchDevice touchdevice, HUD hud, private void startInstance(final Platform platform, final Screen screen, final HardwareDisplay disp,
StartupArguments args) throws InterruptedException, IOException { final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args)
throws InterruptedException, IOException {
Engine.platform = platform; Engine.platform = platform;
platform.getConsoleUtils().out().println("WarpPI Calculator"); platform.getConsoleUtils().out().println("WarpPI Calculator");
initializeEnvironment(args); initializeEnvironment(args);
Thread currentThread = Thread.currentThread(); final Thread currentThread = Thread.currentThread();
currentThread.setPriority(Thread.MAX_PRIORITY); currentThread.setPriority(Thread.MAX_PRIORITY);
Engine.getPlatform().setThreadName(currentThread, "Main thread"); Engine.getPlatform().setThreadName(currentThread, "Main thread");
DisplayManager dm = new DisplayManager(disp, hud, screen, "WarpPI Calculator by Andrea Cavalli (@Cavallium)"); final DisplayManager dm = new DisplayManager(disp, hud, screen, "WarpPI Calculator by Andrea Cavalli (@Cavallium)");
Keyboard k = new Keyboard(); final Keyboard k = new Keyboard();
InputManager im = new InputManager(k, touchdevice); final InputManager im = new InputManager(k, touchdevice);
hardwareDevice = new HardwareDevice(dm, im); hardwareDevice = new HardwareDevice(dm, im);
hardwareDevice.setup(() -> loadPhase.onNext(new LoadingStatus())); hardwareDevice.setup(() -> Engine.loadPhase.onNext(new LoadingStatus()));
} }
private void onShutdown() { private void onShutdown() {
@ -79,13 +80,12 @@ public class Engine {
Engine.getPlatform().exit(0); Engine.getPlatform().exit(0);
} }
private void initializeEnvironment(StartupArguments args) throws IOException { private void initializeEnvironment(final StartupArguments args) throws IOException {
ClassUtils.classLoader = this.getClass(); ClassUtils.classLoader = this.getClass();
StaticVars.startupArguments = args; StaticVars.startupArguments = args;
StaticVars.debugWindow2x = args.isZoomed(); StaticVars.debugWindow2x = args.isZoomed();
if (args.isVerboseLoggingEnabled() || args.isDebugEnabled()) { if (args.isVerboseLoggingEnabled() || args.isDebugEnabled())
StaticVars.outputLevel = ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE; StaticVars.outputLevel = ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE;
}
Engine.platform.getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, args); Engine.platform.getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, args);
checkDeviceType(); checkDeviceType();
if (Engine.getPlatform().isRunningOnRaspberry() && args.isRaspberryModeAllowed()) { if (Engine.getPlatform().isRunningOnRaspberry() && args.isRaspberryModeAllowed()) {
@ -111,15 +111,15 @@ public class Engine {
} }
public Observable<LoadingStatus> getLoadPhase() { public Observable<LoadingStatus> getLoadPhase() {
return loadPhase; return Engine.loadPhase;
} }
public HardwareDevice getHardwareDevice() { public HardwareDevice getHardwareDevice() {
return hardwareDevice; return hardwareDevice;
} }
public static Platform getPlatform() { public static Platform getPlatform() {
return platform; return Engine.platform;
} }
public static class LoadingStatus { public static class LoadingStatus {

View File

@ -14,166 +14,189 @@ import it.cavallium.warppi.util.Error;
public interface Platform { public interface Platform {
public ConsoleUtils getConsoleUtils(); ConsoleUtils getConsoleUtils();
public Gpio getGpio();
public StorageUtils getStorageUtils();
public PngUtils getPngUtils();
public Settings getSettings();
public void setThreadName(Thread t, String name); Gpio getGpio();
public void setThreadDaemon(Thread t);
public void setThreadDaemon(Thread t, boolean value);
public void exit(int value); StorageUtils getStorageUtils();
public void gc();
public boolean isJavascript(); PngUtils getPngUtils();
public boolean isRunningOnRaspberry();
public String getOsName();
public void alphaChanged(boolean val); Settings getSettings();
public void shiftChanged(boolean val);
public Semaphore newSemaphore(); void setThreadName(Thread t, String name);
public Semaphore newSemaphore(int i);
public URLClassLoader newURLClassLoader(URL[] urls);
public Map<String, GraphicEngine> getEnginesList(); void setThreadDaemon(Thread t);
public GraphicEngine getEngine(String string) throws NullPointerException;
public void throwNewExceptionInInitializerError(String text); void setThreadDaemon(Thread t, boolean value);
public String[] stacktraceToString(Error e);
public void loadPlatformRules(); void exit(int value);
public void zip(String targetPath, String destinationFilePath, String password);
public void unzip(String targetZipFilePath, String destinationFolderPath, String password);
public boolean compile(String[] command, PrintWriter printWriter, PrintWriter errors); void gc();
boolean isJavascript();
boolean isRunningOnRaspberry();
String getOsName();
void alphaChanged(boolean val);
void shiftChanged(boolean val);
Semaphore newSemaphore();
Semaphore newSemaphore(int i);
URLClassLoader newURLClassLoader(URL[] urls);
Map<String, GraphicEngine> getEnginesList();
GraphicEngine getEngine(String string) throws NullPointerException;
void throwNewExceptionInInitializerError(String text);
String[] stacktraceToString(Error e);
void loadPlatformRules();
void zip(String targetPath, String destinationFilePath, String password);
void unzip(String targetZipFilePath, String destinationFolderPath, String password);
boolean compile(String[] command, PrintWriter printWriter, PrintWriter errors);
public interface Gpio { public interface Gpio {
public int valueOutput(); int valueOutput();
public int valuePwmOutput();
public int valueInput();
public int valueHigh();
public int valueLow();
public Object valueUnknownBoardType();
public void wiringPiSetupPhys(); int valuePwmOutput();
public void pinMode(int i, int type); int valueInput();
public void digitalWrite(int pin, int val); int valueHigh();
public void digitalWrite(int pin, boolean val); int valueLow();
public void pwmWrite(int pin, int val); Object valueUnknownBoardType();
public void delayMicroseconds(int t);
public int digitalRead(int pin); void wiringPiSetupPhys();
public Object getBoardType(); void pinMode(int i, int type);
void digitalWrite(int pin, int val);
void digitalWrite(int pin, boolean val);
void pwmWrite(int pin, int val);
void delayMicroseconds(int t);
int digitalRead(int pin);
Object getBoardType();
} }
public interface ConsoleUtils { public interface ConsoleUtils {
public static final int OUTPUTLEVEL_NODEBUG = 0; int OUTPUTLEVEL_NODEBUG = 0;
public static final int OUTPUTLEVEL_DEBUG_MIN = 1; int OUTPUTLEVEL_DEBUG_MIN = 1;
public static final int OUTPUTLEVEL_DEBUG_VERBOSE = 4; int OUTPUTLEVEL_DEBUG_VERBOSE = 4;
public AdvancedOutputStream out(); AdvancedOutputStream out();
public int getOutputLevel(); int getOutputLevel();
public interface AdvancedOutputStream { public interface AdvancedOutputStream {
public void println(Object str); void println(Object str);
public void println(int level); void println(int level);
public void println(int level, Object str); void println(int level, Object str);
public void print(int level, String str); void print(int level, String str);
public void println(int level, String prefix, String str); void println(int level, String prefix, String str);
public void println(int level, String... parts); void println(int level, String... parts);
} }
} }
public interface StorageUtils { public interface StorageUtils {
int OpenOptionWrite = 0; int OpenOptionWrite = 0;
int OpenOptionCreate = 1; int OpenOptionCreate = 1;
public boolean exists(File f); boolean exists(File f);
public File get(String path); File get(String path);
public File get(String... path); File get(String... path);
@Deprecated() @Deprecated()
public File getResource(String string) throws IOException, URISyntaxException; File getResource(String string) throws IOException, URISyntaxException;
public InputStream getResourceStream(String string) throws IOException, URISyntaxException; InputStream getResourceStream(String string) throws IOException, URISyntaxException;
public List<String> readAllLines(File file) throws IOException; List<String> readAllLines(File file) throws IOException;
public String read(InputStream input) throws IOException;
public List<File> walk(File dir) throws IOException; String read(InputStream input) throws IOException;
public File relativize(File rulesPath, File f); List<File> walk(File dir) throws IOException;
public File resolve(File file, String string); File relativize(File rulesPath, File f);
public File getParent(File f);
public void createDirectories(File dir) throws IOException; File resolve(File file, String string);
public void write(File f, byte[] bytes, int... options) throws IOException; File getParent(File f);
public List<String> readAllLines(InputStream input) throws IOException; void createDirectories(File dir) throws IOException;
public String getBasePath(); void write(File f, byte[] bytes, int... options) throws IOException;
List<String> readAllLines(InputStream input) throws IOException;
String getBasePath();
} }
public interface Semaphore { public interface Semaphore {
void release(); void release();
void acquire() throws InterruptedException; void acquire() throws InterruptedException;
} }
public interface URLClassLoader { public interface URLClassLoader {
public Class<?> loadClass(String name) throws ClassNotFoundException; Class<?> loadClass(String name) throws ClassNotFoundException;
void close() throws IOException; void close() throws IOException;
} }
public interface PngUtils { public interface PngUtils {
public PngReader load(InputStream resourceStream); PngReader load(InputStream resourceStream);
public interface PngReader { public interface PngReader {
int[] getImageMatrix(); int[] getImageMatrix();
int[] getSize(); int[] getSize();
} }
} }
public interface Settings { public interface Settings {
public boolean isDebugEnabled(); boolean isDebugEnabled();
public void setDebugEnabled(boolean debugOn); void setDebugEnabled(boolean debugOn);
public default String getCalculatorName() { default String getCalculatorName() {
return "WarpPI"; return "WarpPI";
} }
public default String getCalculatorNameLowercase() {
default String getCalculatorNameLowercase() {
return "warppi"; return "warppi";
} }
public default String getCalculatorNameUppercase() {
default String getCalculatorNameUppercase() {
return "WARPPI"; return "WARPPI";
} }

View File

@ -17,13 +17,12 @@ public class StaticVars {
public static boolean debugWindow2x = false; public static boolean debugWindow2x = false;
public static BehaviorSubject<Float> windowZoom = BehaviorSubject.create(2F); public static BehaviorSubject<Float> windowZoom = BehaviorSubject.create(2F);
public static Function<Float, Float> windowZoomFunction = (val) -> { public static Function<Float, Float> windowZoomFunction = (val) -> {
if (StaticVars.debugWindow2x) { if (StaticVars.debugWindow2x)
return val + 1; return val + 1;
} else { else
return val; return val;
}
}; };
public static Observable<Float> windowZoom$ = windowZoom.map(windowZoomFunction); public static Observable<Float> windowZoom$ = StaticVars.windowZoom.map(StaticVars.windowZoomFunction);
public static StartupArguments startupArguments; public static StartupArguments startupArguments;
private StaticVars() { private StaticVars() {

View File

@ -1,25 +1,23 @@
package it.cavallium.warppi; package it.cavallium.warppi;
public class TestDrivers { public class TestDrivers {
public static void main(String[] args) { public static void main(final String[] args) {
System.out.println("Test started."); System.out.println("Test started.");
String className; String className;
className = "jogamp.newt.driver.bcm.vc.iv.DisplayDriver"; className = "jogamp.newt.driver.bcm.vc.iv.DisplayDriver";
if (exists(className)) { if (TestDrivers.exists(className))
System.out.println("[FOUND] " + className); System.out.println("[FOUND] " + className);
} else { else
System.out.println("[NOT FOUND] " + className); System.out.println("[NOT FOUND] " + className);
}
className = ".bcm.vc.iv.DisplayDriver"; className = ".bcm.vc.iv.DisplayDriver";
if (exists(className)) { if (TestDrivers.exists(className))
System.out.println("[FOUND] " + className); System.out.println("[FOUND] " + className);
} else { else
System.out.println("[NOT FOUND] " + className); System.out.println("[NOT FOUND] " + className);
}
System.out.println("Test finished."); System.out.println("Test finished.");
} }
public static boolean exists(String className) { public static boolean exists(final String className) {
try { try {
Class.forName(className); Class.forName(className);
return true; return true;

View File

@ -13,13 +13,13 @@ import it.cavallium.warppi.math.rules.RulesManager;
import it.cavallium.warppi.util.Error; import it.cavallium.warppi.util.Error;
public class Boot { public class Boot {
public static void boot(Platform platform, String[] args) throws Exception { public static void boot(final Platform platform, final String[] args) throws Exception {
Engine.start(platform, new LoadingScreen(), new PIHardwareDisplay(), new PIHardwareTouchDevice(false, false, false), new CalculatorHUD(), parseStartupArguments(args)); Engine.start(platform, new LoadingScreen(), new PIHardwareDisplay(), new PIHardwareTouchDevice(false, false, false), new CalculatorHUD(), Boot.parseStartupArguments(args));
Engine.INSTANCE.getLoadPhase().subscribe(Boot::loadCalculator); Engine.INSTANCE.getLoadPhase().subscribe(Boot::loadCalculator);
} }
private static void loadCalculator(LoadingStatus loading) { private static void loadCalculator(final LoadingStatus loading) {
try { try {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().setBrightness(0.2f); Engine.INSTANCE.getHardwareDevice().getDisplayManager().setBrightness(0.2f);
RulesManager.initialize(); RulesManager.initialize();
@ -33,12 +33,12 @@ public class Boot {
public static StartupArguments parseStartupArguments(final String[] a) { public static StartupArguments parseStartupArguments(final String[] a) {
final StartupArgumentsImpl args = new StartupArgumentsImpl(); final StartupArgumentsImpl args = new StartupArgumentsImpl();
Arrays.asList(a).stream().parallel().map(String::toLowerCase).forEach(arg -> parseArgument(args, arg)); Arrays.asList(a).stream().parallel().map(String::toLowerCase).forEach(arg -> Boot.parseArgument(args, arg));
args.setHeadlessEngineForced(args.isHeadlessEngineForced() || args.isHeadless8EngineForced() || args.isHeadless256EngineForced() || args.isHeadless24bitEngineForced()); args.setHeadlessEngineForced(args.isHeadlessEngineForced() || args.isHeadless8EngineForced() || args.isHeadless256EngineForced() || args.isHeadless24bitEngineForced());
return args; return args;
} }
public static void parseArgument(StartupArgumentsImpl args, String arg) { public static void parseArgument(final StartupArgumentsImpl args, final String arg) {
switch (arg) { switch (arg) {
case "-zoomed": case "-zoomed":
args.setZoomed(true); args.setZoomed(true);

View File

@ -1,36 +1,36 @@
package it.cavallium.warppi.boot; package it.cavallium.warppi.boot;
public interface StartupArguments { public interface StartupArguments {
public boolean isRaspberryModeAllowed(); boolean isRaspberryModeAllowed();
public boolean isZoomed(); boolean isZoomed();
public boolean isHeadlessEngineForced(); boolean isHeadlessEngineForced();
public boolean isHeadless8EngineForced(); boolean isHeadless8EngineForced();
public boolean isHeadless256EngineForced(); boolean isHeadless256EngineForced();
public boolean isHeadless24bitEngineForced(); boolean isHeadless24bitEngineForced();
public boolean isCPUEngineForced(); boolean isCPUEngineForced();
public boolean isGPUEngineForced(); boolean isGPUEngineForced();
public boolean isFrameBufferEngineForced(); boolean isFrameBufferEngineForced();
public boolean isNoGUIEngineForced(); boolean isNoGUIEngineForced();
public boolean isHTMLEngineForced(); boolean isHTMLEngineForced();
public boolean isMSDOSModeEnabled(); boolean isMSDOSModeEnabled();
public boolean isVerboseLoggingEnabled(); boolean isVerboseLoggingEnabled();
public boolean isDebugEnabled(); boolean isDebugEnabled();
public boolean isUncached(); boolean isUncached();
public boolean isEngineForced(); boolean isEngineForced();
} }

View File

@ -102,63 +102,63 @@ public class StartupArgumentsImpl implements StartupArguments {
return isCPUEngineForced || isFrameBufferEngineForced || isGPUEngineForced || isHeadless24bitEngineForced || isHeadless256EngineForced || isHeadless8EngineForced || isHTMLEngineForced || isNoGUIEngineForced; return isCPUEngineForced || isFrameBufferEngineForced || isGPUEngineForced || isHeadless24bitEngineForced || isHeadless256EngineForced || isHeadless8EngineForced || isHTMLEngineForced || isNoGUIEngineForced;
} }
void setRaspberryModeAllowed(boolean isRaspberryModeAllowed) { void setRaspberryModeAllowed(final boolean isRaspberryModeAllowed) {
this.isRaspberryModeAllowed = isRaspberryModeAllowed; this.isRaspberryModeAllowed = isRaspberryModeAllowed;
} }
void setZoomed(boolean isZoomed) { void setZoomed(final boolean isZoomed) {
this.isZoomed = isZoomed; this.isZoomed = isZoomed;
} }
void setHeadlessEngineForced(boolean isHeadlessEngineForced) { void setHeadlessEngineForced(final boolean isHeadlessEngineForced) {
this.isHeadlessEngineForced = isHeadlessEngineForced; this.isHeadlessEngineForced = isHeadlessEngineForced;
} }
void setHeadless8EngineForced(boolean isHeadless8EngineForced) { void setHeadless8EngineForced(final boolean isHeadless8EngineForced) {
this.isHeadless8EngineForced = isHeadless8EngineForced; this.isHeadless8EngineForced = isHeadless8EngineForced;
} }
void setHeadless256EngineForced(boolean isHeadless256EngineForced) { void setHeadless256EngineForced(final boolean isHeadless256EngineForced) {
this.isHeadless256EngineForced = isHeadless256EngineForced; this.isHeadless256EngineForced = isHeadless256EngineForced;
} }
void setHeadless24bitEngineForced(boolean isHeadless24bitEngineForced) { void setHeadless24bitEngineForced(final boolean isHeadless24bitEngineForced) {
this.isHeadless24bitEngineForced = isHeadless24bitEngineForced; this.isHeadless24bitEngineForced = isHeadless24bitEngineForced;
} }
void setCPUEngineForced(boolean isCPUEngineForced) { void setCPUEngineForced(final boolean isCPUEngineForced) {
this.isCPUEngineForced = isCPUEngineForced; this.isCPUEngineForced = isCPUEngineForced;
} }
void setGPUEngineForced(boolean isGPUEngineForced) { void setGPUEngineForced(final boolean isGPUEngineForced) {
this.isGPUEngineForced = isGPUEngineForced; this.isGPUEngineForced = isGPUEngineForced;
} }
void setFrameBufferEngineForced(boolean isFrameBufferEngineForced) { void setFrameBufferEngineForced(final boolean isFrameBufferEngineForced) {
this.isFrameBufferEngineForced = isFrameBufferEngineForced; this.isFrameBufferEngineForced = isFrameBufferEngineForced;
} }
void setNoGUIEngineForced(boolean isNoGUIEngineForced) { void setNoGUIEngineForced(final boolean isNoGUIEngineForced) {
this.isNoGUIEngineForced = isNoGUIEngineForced; this.isNoGUIEngineForced = isNoGUIEngineForced;
} }
void setHTMLEngineForced(boolean isHTMLEngineForced) { void setHTMLEngineForced(final boolean isHTMLEngineForced) {
this.isHTMLEngineForced = isHTMLEngineForced; this.isHTMLEngineForced = isHTMLEngineForced;
} }
void setMSDOSModeEnabled(boolean isMSDOSModeEnabled) { void setMSDOSModeEnabled(final boolean isMSDOSModeEnabled) {
this.isMSDOSModeEnabled = isMSDOSModeEnabled; this.isMSDOSModeEnabled = isMSDOSModeEnabled;
} }
void setVerboseLoggingEnabled(boolean isVerboseLoggingEnabled) { void setVerboseLoggingEnabled(final boolean isVerboseLoggingEnabled) {
this.isVerboseLoggingEnabled = isVerboseLoggingEnabled; this.isVerboseLoggingEnabled = isVerboseLoggingEnabled;
} }
void setDebugEnabled(boolean isDebugEnabled) { void setDebugEnabled(final boolean isDebugEnabled) {
this.isDebugEnabled = isDebugEnabled; this.isDebugEnabled = isDebugEnabled;
} }
void setUncached(boolean isUncached) { void setUncached(final boolean isUncached) {
this.isUncached = isUncached; this.isUncached = isUncached;
} }

View File

@ -18,9 +18,9 @@ public class CacheFile {
private FileInputStream lastFIS; private FileInputStream lastFIS;
public CacheFile() { public CacheFile() {
do { do
path = UUID.randomUUID().toString() + ".ser"; path = UUID.randomUUID().toString() + ".ser";
} while (new File(path).exists()); while (new File(path).exists());
try { try {
File.createTempFile(Engine.getPlatform().getSettings().getCalculatorNameLowercase(), ""); File.createTempFile(Engine.getPlatform().getSettings().getCalculatorNameLowercase(), "");
} catch (final IOException e) { } catch (final IOException e) {
@ -29,28 +29,26 @@ public class CacheFile {
} }
public ObjectOutputStream getObjectOutputStram() { public ObjectOutputStream getObjectOutputStram() {
if (lastOOS == null) { if (lastOOS == null)
try { try {
return new ObjectOutputStream(new FileOutputStream(path)); return new ObjectOutputStream(new FileOutputStream(path));
} catch (final IOException e) { } catch (final IOException e) {
e.printStackTrace(); e.printStackTrace();
return lastOOS; return lastOOS;
} }
} else { else
return lastOOS; return lastOOS;
}
} }
public ObjectInputStream getObjectInputStram() { public ObjectInputStream getObjectInputStram() {
if (lastOIS == null) { if (lastOIS == null)
try { try {
return new ObjectInputStream(new FileInputStream(path)); return new ObjectInputStream(new FileInputStream(path));
} catch (final IOException e) { } catch (final IOException e) {
return lastOIS; return lastOIS;
} }
} else { else
return lastOIS; return lastOIS;
}
} }
public void closeStreams() { public void closeStreams() {

View File

@ -7,7 +7,7 @@ public class HardwareDevice {
private final DisplayManager displayManager; private final DisplayManager displayManager;
private final InputManager inputManager; private final InputManager inputManager;
public HardwareDevice(DisplayManager m, InputManager im) { public HardwareDevice(final DisplayManager m, final InputManager im) {
displayManager = m; displayManager = m;
inputManager = im; inputManager = im;
} }
@ -20,10 +20,10 @@ public class HardwareDevice {
return inputManager; return inputManager;
} }
public void setup(Runnable r) { public void setup(final Runnable r) {
displayManager.initialize(); displayManager.initialize();
inputManager.getKeyboard().startKeyboard(); inputManager.getKeyboard().startKeyboard();
Thread t = new Thread(r); final Thread t = new Thread(r);
Engine.getPlatform().setThreadDaemon(t, false); Engine.getPlatform().setThreadDaemon(t, false);
Engine.getPlatform().setThreadName(t, "Main thread (after setup)"); Engine.getPlatform().setThreadName(t, "Main thread (after setup)");
t.start(); t.start();

View File

@ -4,18 +4,18 @@ import it.cavallium.warppi.event.TouchEventListener;
import it.cavallium.warppi.event.TouchPoint; import it.cavallium.warppi.event.TouchPoint;
public interface HardwareTouchDevice extends TouchEventListener { public interface HardwareTouchDevice extends TouchEventListener {
public boolean getInvertedXY(); boolean getInvertedXY();
public boolean getInvertedX(); boolean getInvertedX();
public boolean getInvertedY(); boolean getInvertedY();
public default void setInvertedXY() {} default void setInvertedXY() {}
public default void setInvertedX() {} default void setInvertedX() {}
public default void setInvertedY() {} default void setInvertedY() {}
public TouchPoint makePoint(long id, float x, float y, int maxX, int maxY, float radiusX, float radiusY, TouchPoint makePoint(long id, float x, float y, int maxX, int maxY, float radiusX, float radiusY, float force,
float force, float rotationAngle); float rotationAngle);
} }

View File

@ -4,9 +4,9 @@ public class InputManager {
private final Keyboard keyboard; private final Keyboard keyboard;
private final HardwareTouchDevice touchDevice; private final HardwareTouchDevice touchDevice;
public InputManager(Keyboard k, HardwareTouchDevice t) { public InputManager(final Keyboard k, final HardwareTouchDevice t) {
this.keyboard = k; keyboard = k;
this.touchDevice = t; touchDevice = t;
} }
public Keyboard getKeyboard() { public Keyboard getKeyboard() {

File diff suppressed because it is too large Load Diff

View File

@ -9,108 +9,108 @@ public interface KeyboardJogampValues {
/** /**
* This value, {@value}, is used to indicate that the keyCode is unknown. * This value, {@value}, is used to indicate that the keyCode is unknown.
*/ */
public static final short VK_UNDEFINED = (short) 0x0; short VK_UNDEFINED = (short) 0x0;
static final short VK_FREE01 = (short) 0x01; short VK_FREE01 = (short) 0x01;
/** Constant for the HOME function key. ASCII: Start Of Text. */ /** Constant for the HOME function key. ASCII: Start Of Text. */
public static final short VK_HOME = (short) 0x02; short VK_HOME = (short) 0x02;
/** Constant for the END function key. ASCII: End Of Text. */ /** Constant for the END function key. ASCII: End Of Text. */
public static final short VK_END = (short) 0x03; short VK_END = (short) 0x03;
/** Constant for the END function key. ASCII: End Of Transmission. */ /** Constant for the END function key. ASCII: End Of Transmission. */
public static final short VK_FINAL = (short) 0x04; short VK_FINAL = (short) 0x04;
/** Constant for the PRINT function key. ASCII: Enquiry. */ /** Constant for the PRINT function key. ASCII: Enquiry. */
public static final short VK_PRINTSCREEN = (short) 0x05; short VK_PRINTSCREEN = (short) 0x05;
static final short VK_FREE06 = (short) 0x06; short VK_FREE06 = (short) 0x06;
static final short VK_FREE07 = (short) 0x07; short VK_FREE07 = (short) 0x07;
/** Constant for the BACK SPACE key "\b", matching ASCII. Printable! */ /** Constant for the BACK SPACE key "\b", matching ASCII. Printable! */
public static final short VK_BACK_SPACE = (short) 0x08; short VK_BACK_SPACE = (short) 0x08;
/** Constant for the HORIZ TAB key "\t", matching ASCII. Printable! */ /** Constant for the HORIZ TAB key "\t", matching ASCII. Printable! */
public static final short VK_TAB = (short) 0x09; short VK_TAB = (short) 0x09;
/** LINE_FEED "\n", matching ASCII, n/a on keyboard. */ /** LINE_FEED "\n", matching ASCII, n/a on keyboard. */
static final short VK_FREE0A = (short) 0x0A; short VK_FREE0A = (short) 0x0A;
/** Constant for the PAGE DOWN function key. ASCII: Vertical Tabulation. */ /** Constant for the PAGE DOWN function key. ASCII: Vertical Tabulation. */
public static final short VK_PAGE_DOWN = (short) 0x0B; short VK_PAGE_DOWN = (short) 0x0B;
/** Constant for the CLEAR key, i.e. FORM FEED, matching ASCII. */ /** Constant for the CLEAR key, i.e. FORM FEED, matching ASCII. */
public static final short VK_CLEAR = (short) 0x0C; short VK_CLEAR = (short) 0x0C;
/** /**
* Constant for the ENTER key, i.e. CARRIAGE RETURN, matching ASCII. * Constant for the ENTER key, i.e. CARRIAGE RETURN, matching ASCII.
* Printable! * Printable!
*/ */
public static final short VK_ENTER = (short) 0x0D; short VK_ENTER = (short) 0x0D;
static final short VK_FREE0E = (short) 0x0E; short VK_FREE0E = (short) 0x0E;
/** Constant for the CTRL function key. ASCII: shift-in. */ /** Constant for the CTRL function key. ASCII: shift-in. */
public static final short VK_SHIFT = (short) 0x0F; short VK_SHIFT = (short) 0x0F;
/** Constant for the PAGE UP function key. ASCII: Data Link Escape. */ /** Constant for the PAGE UP function key. ASCII: Data Link Escape. */
public static final short VK_PAGE_UP = (short) 0x10; short VK_PAGE_UP = (short) 0x10;
/** Constant for the CTRL function key. ASCII: device-ctrl-one. */ /** Constant for the CTRL function key. ASCII: device-ctrl-one. */
public static final short VK_CONTROL = (short) 0x11; short VK_CONTROL = (short) 0x11;
/** Constant for the left ALT function key. ASCII: device-ctrl-two. */ /** Constant for the left ALT function key. ASCII: device-ctrl-two. */
public static final short VK_ALT = (short) 0x12; short VK_ALT = (short) 0x12;
/** /**
* Constant for the ALT_GRAPH function key, i.e. right ALT key. ASCII: * Constant for the ALT_GRAPH function key, i.e. right ALT key. ASCII:
* device-ctrl-three. * device-ctrl-three.
*/ */
public static final short VK_ALT_GRAPH = (short) 0x13; short VK_ALT_GRAPH = (short) 0x13;
/** Constant for the CAPS LOCK function key. ASCII: device-ctrl-four. */ /** Constant for the CAPS LOCK function key. ASCII: device-ctrl-four. */
public static final short VK_CAPS_LOCK = (short) 0x14; short VK_CAPS_LOCK = (short) 0x14;
static final short VK_FREE15 = (short) 0x15; short VK_FREE15 = (short) 0x15;
/** Constant for the PAUSE function key. ASCII: sync-idle. */ /** Constant for the PAUSE function key. ASCII: sync-idle. */
public static final short VK_PAUSE = (short) 0x16; short VK_PAUSE = (short) 0x16;
/** <b>scroll lock</b> key. ASCII: End Of Transmission Block. */ /** <b>scroll lock</b> key. ASCII: End Of Transmission Block. */
public static final short VK_SCROLL_LOCK = (short) 0x17; short VK_SCROLL_LOCK = (short) 0x17;
/** Constant for the CANCEL function key. ASCII: Cancel. */ /** Constant for the CANCEL function key. ASCII: Cancel. */
public static final short VK_CANCEL = (short) 0x18; short VK_CANCEL = (short) 0x18;
static final short VK_FREE19 = (short) 0x19; short VK_FREE19 = (short) 0x19;
/** Constant for the INSERT function key. ASCII: Substitute. */ /** Constant for the INSERT function key. ASCII: Substitute. */
public static final short VK_INSERT = (short) 0x1A; short VK_INSERT = (short) 0x1A;
/** Constant for the ESCAPE function key. ASCII: Escape. */ /** Constant for the ESCAPE function key. ASCII: Escape. */
public static final short VK_ESCAPE = (short) 0x1B; short VK_ESCAPE = (short) 0x1B;
/** /**
* Constant for the Convert function key, Japanese "henkan". ASCII: File * Constant for the Convert function key, Japanese "henkan". ASCII: File
* Separator. * Separator.
*/ */
public static final short VK_CONVERT = (short) 0x1C; short VK_CONVERT = (short) 0x1C;
/** /**
* Constant for the Don't Convert function key, Japanese "muhenkan". ASCII: * Constant for the Don't Convert function key, Japanese "muhenkan". ASCII:
* Group Separator. * Group Separator.
*/ */
public static final short VK_NONCONVERT = (short) 0x1D; short VK_NONCONVERT = (short) 0x1D;
/** /**
* Constant for the Accept or Commit function key, Japanese "kakutei". * Constant for the Accept or Commit function key, Japanese "kakutei".
* ASCII: Record Separator. * ASCII: Record Separator.
*/ */
public static final short VK_ACCEPT = (short) 0x1E; short VK_ACCEPT = (short) 0x1E;
/** Constant for the Mode Change (?). ASCII: Unit Separator. */ /** Constant for the Mode Change (?). ASCII: Unit Separator. */
public static final short VK_MODECHANGE = (short) 0x1F; short VK_MODECHANGE = (short) 0x1F;
// //
// Unicode: Printable [0x20 - 0x7E] // Unicode: Printable [0x20 - 0x7E]
@ -118,168 +118,168 @@ public interface KeyboardJogampValues {
// //
/** Constant for the SPACE function key. ASCII: SPACE. */ /** Constant for the SPACE function key. ASCII: SPACE. */
public static final short VK_SPACE = (short) 0x20; short VK_SPACE = (short) 0x20;
/** Constant for the "!" key. */ /** Constant for the "!" key. */
public static final short VK_EXCLAMATION_MARK = (short) 0x21; short VK_EXCLAMATION_MARK = (short) 0x21;
/** Constant for the """ key. */ /** Constant for the """ key. */
public static final short VK_QUOTEDBL = (short) 0x22; short VK_QUOTEDBL = (short) 0x22;
/** Constant for the "#" key. */ /** Constant for the "#" key. */
public static final short VK_NUMBER_SIGN = (short) 0x23; short VK_NUMBER_SIGN = (short) 0x23;
/** Constant for the "$" key. */ /** Constant for the "$" key. */
public static final short VK_DOLLAR = (short) 0x24; short VK_DOLLAR = (short) 0x24;
/** Constant for the "%" key. */ /** Constant for the "%" key. */
public static final short VK_PERCENT = (short) 0x25; short VK_PERCENT = (short) 0x25;
/** Constant for the "&" key. */ /** Constant for the "&" key. */
public static final short VK_AMPERSAND = (short) 0x26; short VK_AMPERSAND = (short) 0x26;
/** Constant for the "'" key. */ /** Constant for the "'" key. */
public static final short VK_QUOTE = (short) 0x27; short VK_QUOTE = (short) 0x27;
/** Constant for the "(" key. */ /** Constant for the "(" key. */
public static final short VK_LEFT_PARENTHESIS = (short) 0x28; short VK_LEFT_PARENTHESIS = (short) 0x28;
/** Constant for the ")" key. */ /** Constant for the ")" key. */
public static final short VK_RIGHT_PARENTHESIS = (short) 0x29; short VK_RIGHT_PARENTHESIS = (short) 0x29;
/** Constant for the "*" key */ /** Constant for the "*" key */
public static final short VK_ASTERISK = (short) 0x2A; short VK_ASTERISK = (short) 0x2A;
/** Constant for the "+" key. */ /** Constant for the "+" key. */
public static final short VK_PLUS = (short) 0x2B; short VK_PLUS = (short) 0x2B;
/** Constant for the comma key, "," */ /** Constant for the comma key, "," */
public static final short VK_COMMA = (short) 0x2C; short VK_COMMA = (short) 0x2C;
/** Constant for the minus key, "-" */ /** Constant for the minus key, "-" */
public static final short VK_MINUS = (short) 0x2D; short VK_MINUS = (short) 0x2D;
/** Constant for the period key, "." */ /** Constant for the period key, "." */
public static final short VK_PERIOD = (short) 0x2E; short VK_PERIOD = (short) 0x2E;
/** Constant for the forward slash key, "/" */ /** Constant for the forward slash key, "/" */
public static final short VK_SLASH = (short) 0x2F; short VK_SLASH = (short) 0x2F;
/** VK_0 thru VK_9 are the same as UTF16/ASCII '0' thru '9' [0x30 - 0x39] */ /** VK_0 thru VK_9 are the same as UTF16/ASCII '0' thru '9' [0x30 - 0x39] */
public static final short VK_0 = (short) 0x30; short VK_0 = (short) 0x30;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_1 = (short) 0x31; short VK_1 = (short) 0x31;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_2 = (short) 0x32; short VK_2 = (short) 0x32;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_3 = (short) 0x33; short VK_3 = (short) 0x33;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_4 = (short) 0x34; short VK_4 = (short) 0x34;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_5 = (short) 0x35; short VK_5 = (short) 0x35;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_6 = (short) 0x36; short VK_6 = (short) 0x36;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_7 = (short) 0x37; short VK_7 = (short) 0x37;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_8 = (short) 0x38; short VK_8 = (short) 0x38;
/** See {@link #VK_0}. */ /** See {@link #VK_0}. */
public static final short VK_9 = (short) 0x39; short VK_9 = (short) 0x39;
/** Constant for the ":" key. */ /** Constant for the ":" key. */
public static final short VK_COLON = (short) 0x3A; short VK_COLON = (short) 0x3A;
/** Constant for the semicolon key, ";" */ /** Constant for the semicolon key, ";" */
public static final short VK_SEMICOLON = (short) 0x3B; short VK_SEMICOLON = (short) 0x3B;
/** Constant for the equals key, "<" */ /** Constant for the equals key, "<" */
public static final short VK_LESS = (short) 0x3C; short VK_LESS = (short) 0x3C;
/** Constant for the equals key, "=" */ /** Constant for the equals key, "=" */
public static final short VK_EQUALS = (short) 0x3D; short VK_EQUALS = (short) 0x3D;
/** Constant for the equals key, ">" */ /** Constant for the equals key, ">" */
public static final short VK_GREATER = (short) 0x3E; short VK_GREATER = (short) 0x3E;
/** Constant for the equals key, "?" */ /** Constant for the equals key, "?" */
public static final short VK_QUESTIONMARK = (short) 0x3F; short VK_QUESTIONMARK = (short) 0x3F;
/** Constant for the equals key, "@" */ /** Constant for the equals key, "@" */
public static final short VK_AT = (short) 0x40; short VK_AT = (short) 0x40;
/** /**
* VK_A thru VK_Z are the same as Capital UTF16/ASCII 'A' thru 'Z' (0x41 - * VK_A thru VK_Z are the same as Capital UTF16/ASCII 'A' thru 'Z' (0x41 -
* 0x5A) * 0x5A)
*/ */
public static final short VK_A = (short) 0x41; short VK_A = (short) 0x41;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_B = (short) 0x42; short VK_B = (short) 0x42;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_C = (short) 0x43; short VK_C = (short) 0x43;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_D = (short) 0x44; short VK_D = (short) 0x44;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_E = (short) 0x45; short VK_E = (short) 0x45;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_F = (short) 0x46; short VK_F = (short) 0x46;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_G = (short) 0x47; short VK_G = (short) 0x47;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_H = (short) 0x48; short VK_H = (short) 0x48;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_I = (short) 0x49; short VK_I = (short) 0x49;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_J = (short) 0x4A; short VK_J = (short) 0x4A;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_K = (short) 0x4B; short VK_K = (short) 0x4B;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_L = (short) 0x4C; short VK_L = (short) 0x4C;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_M = (short) 0x4D; short VK_M = (short) 0x4D;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_N = (short) 0x4E; short VK_N = (short) 0x4E;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_O = (short) 0x4F; short VK_O = (short) 0x4F;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_P = (short) 0x50; short VK_P = (short) 0x50;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_Q = (short) 0x51; short VK_Q = (short) 0x51;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_R = (short) 0x52; short VK_R = (short) 0x52;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_S = (short) 0x53; short VK_S = (short) 0x53;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_T = (short) 0x54; short VK_T = (short) 0x54;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_U = (short) 0x55; short VK_U = (short) 0x55;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_V = (short) 0x56; short VK_V = (short) 0x56;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_W = (short) 0x57; short VK_W = (short) 0x57;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_X = (short) 0x58; short VK_X = (short) 0x58;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_Y = (short) 0x59; short VK_Y = (short) 0x59;
/** See {@link #VK_A}. */ /** See {@link #VK_A}. */
public static final short VK_Z = (short) 0x5A; short VK_Z = (short) 0x5A;
/** Constant for the open bracket key, "[" */ /** Constant for the open bracket key, "[" */
public static final short VK_OPEN_BRACKET = (short) 0x5B; short VK_OPEN_BRACKET = (short) 0x5B;
/** Constant for the back slash key, "\" */ /** Constant for the back slash key, "\" */
public static final short VK_BACK_SLASH = (short) 0x5C; short VK_BACK_SLASH = (short) 0x5C;
/** Constant for the close bracket key, "]" */ /** Constant for the close bracket key, "]" */
public static final short VK_CLOSE_BRACKET = (short) 0x5D; short VK_CLOSE_BRACKET = (short) 0x5D;
/** Constant for the "^" key. */ /** Constant for the "^" key. */
public static final short VK_CIRCUMFLEX = (short) 0x5E; short VK_CIRCUMFLEX = (short) 0x5E;
/** Constant for the "_" key */ /** Constant for the "_" key */
public static final short VK_UNDERSCORE = (short) 0x5F; short VK_UNDERSCORE = (short) 0x5F;
/** Constant for the "`" key */ /** Constant for the "`" key */
public static final short VK_BACK_QUOTE = (short) 0x60; short VK_BACK_QUOTE = (short) 0x60;
/** /**
* Small UTF/ASCII 'a' thru 'z' (0x61 - 0x7a) - Not used for keyCode / * Small UTF/ASCII 'a' thru 'z' (0x61 - 0x7a) - Not used for keyCode /
@ -298,86 +298,86 @@ public interface KeyboardJogampValues {
* See <a href="#unicodeCollision">Unicode Collision</a> for details. * See <a href="#unicodeCollision">Unicode Collision</a> for details.
* </p> * </p>
*/ */
public static final short VK_F1 = (short) (0x60 + 1); short VK_F1 = (short) (0x60 + 1);
/** Constant for the F2 function key. See {@link #VK_F1}. */ /** Constant for the F2 function key. See {@link #VK_F1}. */
public static final short VK_F2 = (short) (0x60 + 2); short VK_F2 = (short) (0x60 + 2);
/** Constant for the F3 function key. See {@link #VK_F1}. */ /** Constant for the F3 function key. See {@link #VK_F1}. */
public static final short VK_F3 = (short) (0x60 + 3); short VK_F3 = (short) (0x60 + 3);
/** Constant for the F4 function key. See {@link #VK_F1}. */ /** Constant for the F4 function key. See {@link #VK_F1}. */
public static final short VK_F4 = (short) (0x60 + 4); short VK_F4 = (short) (0x60 + 4);
/** Constant for the F5 function key. See {@link #VK_F1}. */ /** Constant for the F5 function key. See {@link #VK_F1}. */
public static final short VK_F5 = (short) (0x60 + 5); short VK_F5 = (short) (0x60 + 5);
/** Constant for the F6 function key. See {@link #VK_F1}. */ /** Constant for the F6 function key. See {@link #VK_F1}. */
public static final short VK_F6 = (short) (0x60 + 6); short VK_F6 = (short) (0x60 + 6);
/** Constant for the F7 function key. See {@link #VK_F1}. */ /** Constant for the F7 function key. See {@link #VK_F1}. */
public static final short VK_F7 = (short) (0x60 + 7); short VK_F7 = (short) (0x60 + 7);
/** Constant for the F8 function key. See {@link #VK_F1}. */ /** Constant for the F8 function key. See {@link #VK_F1}. */
public static final short VK_F8 = (short) (0x60 + 8); short VK_F8 = (short) (0x60 + 8);
/** Constant for the F9 function key. See {@link #VK_F1}. */ /** Constant for the F9 function key. See {@link #VK_F1}. */
public static final short VK_F9 = (short) (0x60 + 9); short VK_F9 = (short) (0x60 + 9);
/** Constant for the F11 function key. See {@link #VK_F1}. */ /** Constant for the F11 function key. See {@link #VK_F1}. */
public static final short VK_F10 = (short) (0x60 + 10); short VK_F10 = (short) (0x60 + 10);
/** Constant for the F11 function key. See {@link #VK_F1}. */ /** Constant for the F11 function key. See {@link #VK_F1}. */
public static final short VK_F11 = (short) (0x60 + 11); short VK_F11 = (short) (0x60 + 11);
/** Constant for the F12 function key. See {@link #VK_F1}. */ /** Constant for the F12 function key. See {@link #VK_F1}. */
public static final short VK_F12 = (short) (0x60 + 12); short VK_F12 = (short) (0x60 + 12);
/** Constant for the F13 function key. See {@link #VK_F1}. */ /** Constant for the F13 function key. See {@link #VK_F1}. */
public static final short VK_F13 = (short) (0x60 + 13); short VK_F13 = (short) (0x60 + 13);
/** Constant for the F14 function key. See {@link #VK_F1}. */ /** Constant for the F14 function key. See {@link #VK_F1}. */
public static final short VK_F14 = (short) (0x60 + 14); short VK_F14 = (short) (0x60 + 14);
/** Constant for the F15 function key. See {@link #VK_F1}. */ /** Constant for the F15 function key. See {@link #VK_F1}. */
public static final short VK_F15 = (short) (0x60 + 15); short VK_F15 = (short) (0x60 + 15);
/** Constant for the F16 function key. See {@link #VK_F1}. */ /** Constant for the F16 function key. See {@link #VK_F1}. */
public static final short VK_F16 = (short) (0x60 + 16); short VK_F16 = (short) (0x60 + 16);
/** Constant for the F17 function key. See {@link #VK_F1}. */ /** Constant for the F17 function key. See {@link #VK_F1}. */
public static final short VK_F17 = (short) (0x60 + 17); short VK_F17 = (short) (0x60 + 17);
/** Constant for the F18 function key. See {@link #VK_F1}. */ /** Constant for the F18 function key. See {@link #VK_F1}. */
public static final short VK_F18 = (short) (0x60 + 18); short VK_F18 = (short) (0x60 + 18);
/** Constant for the F19 function key. See {@link #VK_F1}. */ /** Constant for the F19 function key. See {@link #VK_F1}. */
public static final short VK_F19 = (short) (0x60 + 19); short VK_F19 = (short) (0x60 + 19);
/** Constant for the F20 function key. See {@link #VK_F1}. */ /** Constant for the F20 function key. See {@link #VK_F1}. */
public static final short VK_F20 = (short) (0x60 + 20); short VK_F20 = (short) (0x60 + 20);
/** Constant for the F21 function key. See {@link #VK_F1}. */ /** Constant for the F21 function key. See {@link #VK_F1}. */
public static final short VK_F21 = (short) (0x60 + 21); short VK_F21 = (short) (0x60 + 21);
/** Constant for the F22 function key. See {@link #VK_F1}. */ /** Constant for the F22 function key. See {@link #VK_F1}. */
public static final short VK_F22 = (short) (0x60 + 22); short VK_F22 = (short) (0x60 + 22);
/** Constant for the F23 function key. See {@link #VK_F1}. */ /** Constant for the F23 function key. See {@link #VK_F1}. */
public static final short VK_F23 = (short) (0x60 + 23); short VK_F23 = (short) (0x60 + 23);
/** Constant for the F24 function key. See {@link #VK_F1}. */ /** Constant for the F24 function key. See {@link #VK_F1}. */
public static final short VK_F24 = (short) (0x60 + 24); short VK_F24 = (short) (0x60 + 24);
/** Constant for the "{" key */ /** Constant for the "{" key */
public static final short VK_LEFT_BRACE = (short) 0x7B; short VK_LEFT_BRACE = (short) 0x7B;
/** Constant for the "|" key */ /** Constant for the "|" key */
public static final short VK_PIPE = (short) 0x7C; short VK_PIPE = (short) 0x7C;
/** Constant for the "}" key */ /** Constant for the "}" key */
public static final short VK_RIGHT_BRACE = (short) 0x7D; short VK_RIGHT_BRACE = (short) 0x7D;
/** Constant for the "~" key, matching ASCII */ /** Constant for the "~" key, matching ASCII */
public static final short VK_TILDE = (short) 0x7E; short VK_TILDE = (short) 0x7E;
// //
// Unicode: Non printable controls: [0x7F - 0x9F] // Unicode: Non printable controls: [0x7F - 0x9F]
@ -388,125 +388,125 @@ public interface KeyboardJogampValues {
/** /**
* Numeric keypad <b>decimal separator</b> key. Non printable UTF control. * Numeric keypad <b>decimal separator</b> key. Non printable UTF control.
*/ */
public static final short VK_SEPARATOR = (short) 0x7F; short VK_SEPARATOR = (short) 0x7F;
/** /**
* Numeric keypad VK_NUMPAD0 thru VK_NUMPAD9 are mapped to UTF control (0x80 * Numeric keypad VK_NUMPAD0 thru VK_NUMPAD9 are mapped to UTF control (0x80
* - 0x89). Non printable UTF control. * - 0x89). Non printable UTF control.
*/ */
public static final short VK_NUMPAD0 = (short) 0x80; short VK_NUMPAD0 = (short) 0x80;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD1 = (short) 0x81; short VK_NUMPAD1 = (short) 0x81;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD2 = (short) 0x82; short VK_NUMPAD2 = (short) 0x82;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD3 = (short) 0x83; short VK_NUMPAD3 = (short) 0x83;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD4 = (short) 0x84; short VK_NUMPAD4 = (short) 0x84;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD5 = (short) 0x85; short VK_NUMPAD5 = (short) 0x85;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD6 = (short) 0x86; short VK_NUMPAD6 = (short) 0x86;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD7 = (short) 0x87; short VK_NUMPAD7 = (short) 0x87;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD8 = (short) 0x88; short VK_NUMPAD8 = (short) 0x88;
/** See {@link #VK_NUMPAD0}. */ /** See {@link #VK_NUMPAD0}. */
public static final short VK_NUMPAD9 = (short) 0x89; short VK_NUMPAD9 = (short) 0x89;
/** /**
* Numeric keypad <b>decimal separator</b> key. Non printable UTF control. * Numeric keypad <b>decimal separator</b> key. Non printable UTF control.
*/ */
public static final short VK_DECIMAL = (short) 0x8A; short VK_DECIMAL = (short) 0x8A;
/** Numeric keypad <b>add</b> key. Non printable UTF control. */ /** Numeric keypad <b>add</b> key. Non printable UTF control. */
public static final short VK_ADD = (short) 0x8B; short VK_ADD = (short) 0x8B;
/** Numeric keypad <b>subtract</b> key. Non printable UTF control. */ /** Numeric keypad <b>subtract</b> key. Non printable UTF control. */
public static final short VK_SUBTRACT = (short) 0x8C; short VK_SUBTRACT = (short) 0x8C;
/** Numeric keypad <b>multiply</b> key. Non printable UTF control. */ /** Numeric keypad <b>multiply</b> key. Non printable UTF control. */
public static final short VK_MULTIPLY = (short) 0x8D; short VK_MULTIPLY = (short) 0x8D;
/** Numeric keypad <b>divide</b> key. Non printable UTF control. */ /** Numeric keypad <b>divide</b> key. Non printable UTF control. */
public static final short VK_DIVIDE = (short) 0x8E; short VK_DIVIDE = (short) 0x8E;
/** Constant for the DEL key, matching ASCII. Non printable UTF control. */ /** Constant for the DEL key, matching ASCII. Non printable UTF control. */
public static final short VK_DELETE = (short) 0x93; short VK_DELETE = (short) 0x93;
/** Numeric keypad <b>num lock</b> key. Non printable UTF control. */ /** Numeric keypad <b>num lock</b> key. Non printable UTF control. */
public static final short VK_NUM_LOCK = (short) 0x94; short VK_NUM_LOCK = (short) 0x94;
/** /**
* Constant for the cursor- or numerical-pad <b>left</b> arrow key. Non * Constant for the cursor- or numerical-pad <b>left</b> arrow key. Non
* printable UTF control. * printable UTF control.
*/ */
public static final short VK_LEFT = (short) 0x95; short VK_LEFT = (short) 0x95;
/** /**
* Constant for the cursor- or numerical-pad <b>up</b> arrow key. Non * Constant for the cursor- or numerical-pad <b>up</b> arrow key. Non
* printable UTF control. * printable UTF control.
*/ */
public static final short VK_UP = (short) 0x96; short VK_UP = (short) 0x96;
/** /**
* Constant for the cursor- or numerical-pad <b>right</b> arrow key. Non * Constant for the cursor- or numerical-pad <b>right</b> arrow key. Non
* printable UTF control. * printable UTF control.
*/ */
public static final short VK_RIGHT = (short) 0x97; short VK_RIGHT = (short) 0x97;
/** /**
* Constant for the cursor- or numerical pad <b>down</b> arrow key. Non * Constant for the cursor- or numerical pad <b>down</b> arrow key. Non
* printable UTF control. * printable UTF control.
*/ */
public static final short VK_DOWN = (short) 0x98; short VK_DOWN = (short) 0x98;
/** Constant for the Context Menu key. Non printable UTF control. */ /** Constant for the Context Menu key. Non printable UTF control. */
public static final short VK_CONTEXT_MENU = (short) 0x99; short VK_CONTEXT_MENU = (short) 0x99;
/** /**
* Constant for the MS "Windows" function key. * Constant for the MS "Windows" function key.
* It is used for both the left and right version of the key. * It is used for both the left and right version of the key.
*/ */
public static final short VK_WINDOWS = (short) 0x9A; short VK_WINDOWS = (short) 0x9A;
/** Constant for the Meta function key. */ /** Constant for the Meta function key. */
public static final short VK_META = (short) 0x9B; short VK_META = (short) 0x9B;
/** Constant for the Help function key. */ /** Constant for the Help function key. */
public static final short VK_HELP = (short) 0x9C; short VK_HELP = (short) 0x9C;
/** Constant for the Compose function key. */ /** Constant for the Compose function key. */
public static final short VK_COMPOSE = (short) 0x9D; short VK_COMPOSE = (short) 0x9D;
/** Constant for the Begin function key. */ /** Constant for the Begin function key. */
public static final short VK_BEGIN = (short) 0x9E; short VK_BEGIN = (short) 0x9E;
/** Constant for the Stop function key. */ /** Constant for the Stop function key. */
public static final short VK_STOP = (short) 0x9F; short VK_STOP = (short) 0x9F;
// //
// Unicode: Printable [0x00A0 - 0xDFFF] // Unicode: Printable [0x00A0 - 0xDFFF]
// //
/** Constant for the inverted exclamation mark key. */ /** Constant for the inverted exclamation mark key. */
public static final short VK_INVERTED_EXCLAMATION_MARK = (short) 0xA1; short VK_INVERTED_EXCLAMATION_MARK = (short) 0xA1;
/** Constant for the Euro currency sign key. */ /** Constant for the Euro currency sign key. */
public static final short VK_EURO_SIGN = (short) 0x20AC; short VK_EURO_SIGN = (short) 0x20AC;
// //
// Unicode: Private 0xE000 - 0xF8FF (Marked Non-Printable) // Unicode: Private 0xE000 - 0xF8FF (Marked Non-Printable)
// //
/* for Sun keyboards */ /* for Sun keyboards */
public static final short VK_CUT = (short) 0xF879; short VK_CUT = (short) 0xF879;
public static final short VK_COPY = (short) 0xF87A; short VK_COPY = (short) 0xF87A;
public static final short VK_PASTE = (short) 0xF87B; short VK_PASTE = (short) 0xF87B;
public static final short VK_UNDO = (short) 0xF87C; short VK_UNDO = (short) 0xF87C;
public static final short VK_AGAIN = (short) 0xF87D; short VK_AGAIN = (short) 0xF87D;
public static final short VK_FIND = (short) 0xF87E; short VK_FIND = (short) 0xF87E;
public static final short VK_PROPS = (short) 0xF87F; short VK_PROPS = (short) 0xF87F;
/* for input method support on Asian Keyboards */ /* for input method support on Asian Keyboards */
@ -514,61 +514,61 @@ public interface KeyboardJogampValues {
* Constant for the input method on/off key. * Constant for the input method on/off key.
*/ */
/* Japanese PC 106 keyboard: kanji. Japanese Solaris keyboard: nihongo */ /* Japanese PC 106 keyboard: kanji. Japanese Solaris keyboard: nihongo */
public static final short VK_INPUT_METHOD_ON_OFF = (short) 0xF890; short VK_INPUT_METHOD_ON_OFF = (short) 0xF890;
/** /**
* Constant for the Code Input function key. * Constant for the Code Input function key.
*/ */
/* Japanese PC 106 keyboard - VK_ALPHANUMERIC + ALT: kanji bangou */ /* Japanese PC 106 keyboard - VK_ALPHANUMERIC + ALT: kanji bangou */
public static final short VK_CODE_INPUT = (short) 0xF891; short VK_CODE_INPUT = (short) 0xF891;
/** /**
* Constant for the Roman Characters function key. * Constant for the Roman Characters function key.
*/ */
/* Japanese PC 106 keyboard: roumaji */ /* Japanese PC 106 keyboard: roumaji */
public static final short VK_ROMAN_CHARACTERS = (short) 0xF892; short VK_ROMAN_CHARACTERS = (short) 0xF892;
/** /**
* Constant for the All Candidates function key. * Constant for the All Candidates function key.
*/ */
/* Japanese PC 106 keyboard - VK_CONVERT + ALT: zenkouho */ /* Japanese PC 106 keyboard - VK_CONVERT + ALT: zenkouho */
public static final short VK_ALL_CANDIDATES = (short) 0xF893; short VK_ALL_CANDIDATES = (short) 0xF893;
/** /**
* Constant for the Previous Candidate function key. * Constant for the Previous Candidate function key.
*/ */
/* Japanese PC 106 keyboard - VK_CONVERT + SHIFT: maekouho */ /* Japanese PC 106 keyboard - VK_CONVERT + SHIFT: maekouho */
public static final short VK_PREVIOUS_CANDIDATE = (short) 0xF894; short VK_PREVIOUS_CANDIDATE = (short) 0xF894;
/** /**
* Constant for the Alphanumeric function key. * Constant for the Alphanumeric function key.
*/ */
/* Japanese PC 106 keyboard: eisuu */ /* Japanese PC 106 keyboard: eisuu */
public static final short VK_ALPHANUMERIC = (short) 0xF895; short VK_ALPHANUMERIC = (short) 0xF895;
/** /**
* Constant for the Katakana function key. * Constant for the Katakana function key.
*/ */
/* Japanese PC 106 keyboard: katakana */ /* Japanese PC 106 keyboard: katakana */
public static final short VK_KATAKANA = (short) 0xF896; short VK_KATAKANA = (short) 0xF896;
/** /**
* Constant for the Hiragana function key. * Constant for the Hiragana function key.
*/ */
/* Japanese PC 106 keyboard: hiragana */ /* Japanese PC 106 keyboard: hiragana */
public static final short VK_HIRAGANA = (short) 0xF897; short VK_HIRAGANA = (short) 0xF897;
/** /**
* Constant for the Full-Width Characters function key. * Constant for the Full-Width Characters function key.
*/ */
/* Japanese PC 106 keyboard: zenkaku */ /* Japanese PC 106 keyboard: zenkaku */
public static final short VK_FULL_WIDTH = (short) 0xF898; short VK_FULL_WIDTH = (short) 0xF898;
/** /**
* Constant for the Half-Width Characters function key. * Constant for the Half-Width Characters function key.
*/ */
/* Japanese PC 106 keyboard: hankaku */ /* Japanese PC 106 keyboard: hankaku */
public static final short VK_HALF_WIDTH = (short) 0xF89A; short VK_HALF_WIDTH = (short) 0xF89A;
/** /**
* Constant for the Japanese-Katakana function key. * Constant for the Japanese-Katakana function key.
@ -576,7 +576,7 @@ public interface KeyboardJogampValues {
* input mode. * input mode.
*/ */
/* Japanese Macintosh keyboard - VK_JAPANESE_HIRAGANA + SHIFT */ /* Japanese Macintosh keyboard - VK_JAPANESE_HIRAGANA + SHIFT */
public static final short VK_JAPANESE_KATAKANA = (short) 0xF89B; short VK_JAPANESE_KATAKANA = (short) 0xF89B;
/** /**
* Constant for the Japanese-Hiragana function key. * Constant for the Japanese-Hiragana function key.
@ -584,7 +584,7 @@ public interface KeyboardJogampValues {
* input mode. * input mode.
*/ */
/* Japanese Macintosh keyboard */ /* Japanese Macintosh keyboard */
public static final short VK_JAPANESE_HIRAGANA = (short) 0xF89C; short VK_JAPANESE_HIRAGANA = (short) 0xF89C;
/** /**
* Constant for the Japanese-Roman function key. * Constant for the Japanese-Roman function key.
@ -592,19 +592,19 @@ public interface KeyboardJogampValues {
* input mode. * input mode.
*/ */
/* Japanese Macintosh keyboard */ /* Japanese Macintosh keyboard */
public static final short VK_JAPANESE_ROMAN = (short) 0xF89D; short VK_JAPANESE_ROMAN = (short) 0xF89D;
/** /**
* Constant for the locking Kana function key. * Constant for the locking Kana function key.
* This key locks the keyboard into a Kana layout. * This key locks the keyboard into a Kana layout.
*/ */
/* Japanese PC 106 keyboard with special Windows driver - eisuu + Control; Japanese Solaris keyboard: kana */ /* Japanese PC 106 keyboard with special Windows driver - eisuu + Control; Japanese Solaris keyboard: kana */
public static final short VK_KANA_LOCK = (short) 0xF89F; short VK_KANA_LOCK = (short) 0xF89F;
/** /**
* Constant for Keyboard became invisible, e.g. Android's soft keyboard Back * Constant for Keyboard became invisible, e.g. Android's soft keyboard Back
* button hit while keyboard is visible. * button hit while keyboard is visible.
*/ */
public static final short VK_KEYBOARD_INVISIBLE = (short) 0xF8FF; short VK_KEYBOARD_INVISIBLE = (short) 0xF8FF;
} }

View File

@ -12,13 +12,12 @@ public class PIHardwareDisplay implements HardwareDisplay {
public void shutdown() {} public void shutdown() {}
@Override @Override
public void setBrightness(double value) { public void setBrightness(final double value) {
if (Engine.getPlatform().getSettings().isDebugEnabled() == false) { if (Engine.getPlatform().getSettings().isDebugEnabled() == false)
Engine.getPlatform().getGpio().pwmWrite(12, (int) Math.ceil(value * 1024f)); Engine.getPlatform().getGpio().pwmWrite(12, (int) Math.ceil(value * 1024f));
// SoftPwm.softPwmWrite(12, (int)(Math.ceil(brightness*10))); // SoftPwm.softPwmWrite(12, (int)(Math.ceil(brightness*10)));
} else { else
Engine.getPlatform().getConsoleUtils().out().println(1, "Brightness: " + value); Engine.getPlatform().getConsoleUtils().out().println(1, "Brightness: " + value);
}
} }
} }

View File

@ -12,69 +12,65 @@ public class PIHardwareTouchDevice implements HardwareTouchDevice {
private final boolean invertXY, invertX, invertY; private final boolean invertXY, invertX, invertY;
public PIHardwareTouchDevice(boolean invertXY, boolean invertX, boolean invertY) { public PIHardwareTouchDevice(final boolean invertXY, final boolean invertX, final boolean invertY) {
this.invertXY = invertXY; this.invertXY = invertXY;
this.invertX = invertX; this.invertX = invertX;
this.invertY = invertY; this.invertY = invertY;
} }
@Override @Override
public boolean onTouchStart(TouchStartEvent e) { public boolean onTouchStart(final TouchStartEvent e) {
final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen(); final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen();
boolean refresh = false; boolean refresh = false;
if (scr != null && scr.initialized && scr.onTouchStart(e)) { if (scr != null && scr.initialized && scr.onTouchStart(e))
refresh = true; refresh = true;
} else { else {
//Default behavior //Default behavior
} }
if (refresh) { if (refresh)
Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true; Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true;
}
return true; return true;
} }
@Override @Override
public boolean onTouchEnd(TouchEndEvent e) { public boolean onTouchEnd(final TouchEndEvent e) {
final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen(); final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen();
boolean refresh = false; boolean refresh = false;
if (scr != null && scr.initialized && scr.onTouchEnd(e)) { if (scr != null && scr.initialized && scr.onTouchEnd(e))
refresh = true; refresh = true;
} else { else {
//Default behavior //Default behavior
} }
if (refresh) { if (refresh)
Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true; Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true;
}
return true; return true;
} }
@Override @Override
public boolean onTouchCancel(TouchCancelEvent e) { public boolean onTouchCancel(final TouchCancelEvent e) {
final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen(); final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen();
boolean refresh = false; boolean refresh = false;
if (scr != null && scr.initialized && scr.onTouchCancel(e)) { if (scr != null && scr.initialized && scr.onTouchCancel(e))
refresh = true; refresh = true;
} else { else {
//Default behavior //Default behavior
} }
if (refresh) { if (refresh)
Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true; Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true;
}
return true; return true;
} }
@Override @Override
public boolean onTouchMove(TouchMoveEvent e) { public boolean onTouchMove(final TouchMoveEvent e) {
final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen(); final Screen scr = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen();
boolean refresh = false; boolean refresh = false;
if (scr != null && scr.initialized && scr.onTouchMove(e)) { if (scr != null && scr.initialized && scr.onTouchMove(e))
refresh = true; refresh = true;
} else { else {
//Default behavior //Default behavior
} }
if (refresh) { if (refresh)
Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true; Engine.INSTANCE.getHardwareDevice().getDisplayManager().forceRefresh = true;
}
return true; return true;
} }
@ -94,20 +90,18 @@ public class PIHardwareTouchDevice implements HardwareTouchDevice {
} }
@Override @Override
public TouchPoint makePoint(long id, float x, float y, int screenWidth, int screenHeight, float radiusX, public TouchPoint makePoint(final long id, float x, float y, final int screenWidth, final int screenHeight,
float radiusY, float force, float rotationAngle) { final float radiusX, final float radiusY, final float force, final float rotationAngle) {
if (getInvertedXY()) { if (getInvertedXY()) {
double oldX = x; final double oldX = x;
double oldY = y; final double oldY = y;
x = (float) (oldY * ((double) screenWidth) / ((double) screenHeight)); x = (float) (oldY * screenWidth / screenHeight);
y = (float) (oldX * ((double) screenHeight) / ((double) screenWidth)); y = (float) (oldX * screenHeight / screenWidth);
} }
if (getInvertedX()) { if (getInvertedX())
x = screenWidth - x; x = screenWidth - x;
} if (getInvertedY())
if (getInvertedY()) {
y = screenHeight - y; y = screenHeight - y;
}
return new TouchPoint(id, x, y, radiusX, radiusY, force, rotationAngle); return new TouchPoint(id, x, y, radiusX, radiusY, force, rotationAngle);
} }
} }

View File

@ -9,7 +9,7 @@ public class ParallelToSerial {
private final int QH; private final int QH;
private final int CLK; private final int CLK;
public ParallelToSerial(int SH_LD_pin, int CLK_INH_pin, int QH_pin, int CLK_pin) { public ParallelToSerial(final int SH_LD_pin, final int CLK_INH_pin, final int QH_pin, final int CLK_pin) {
SH_LD = SH_LD_pin; SH_LD = SH_LD_pin;
CLK_INH = CLK_INH_pin; CLK_INH = CLK_INH_pin;
QH = QH_pin; QH = QH_pin;

View File

@ -7,16 +7,16 @@ public class SerialToParallel {
private final int SCK; //Shift register clock pin private final int SCK; //Shift register clock pin
private final int SER; //Serial data input private final int SER; //Serial data input
public SerialToParallel(int RCK_pin, int SCK_pin, int SER_pin) { public SerialToParallel(final int RCK_pin, final int SCK_pin, final int SER_pin) {
RCK = RCK_pin; RCK = RCK_pin;
SCK = SCK_pin; SCK = SCK_pin;
SER = SER_pin; SER = SER_pin;
} }
public void write(boolean[] data) { public void write(final boolean[] data) {
if (data.length != 8) { if (data.length != 8)
return; return;
} else { else {
Engine.getPlatform().getGpio().digitalWrite(RCK, Engine.getPlatform().getGpio().valueLow()); Engine.getPlatform().getGpio().digitalWrite(RCK, Engine.getPlatform().getGpio().valueLow());
for (int i = 7; i >= 0; i--) { for (int i = 7; i >= 0; i--) {

View File

@ -31,7 +31,7 @@ public class RAWFont {
public int charIntCount; public int charIntCount;
public static final int intBits = 31; public static final int intBits = 31;
public void create(String name) { public void create(final String name) {
try { try {
loadFont("/font_" + name + ".rft"); loadFont("/font_" + name + ".rft");
} catch (final IOException e) { } catch (final IOException e) {
@ -45,7 +45,7 @@ public class RAWFont {
int currentInt = 0; int currentInt = 0;
int currentBit = 0; int currentBit = 0;
for (int i = 0; i < charS; i++) { for (int i = 0; i < charS; i++) {
if (currentInt * intBits + currentBit >= (currentInt + 1) * intBits) { if (currentInt * RAWFont.intBits + currentBit >= (currentInt + 1) * RAWFont.intBits) {
currentInt += 1; currentInt += 1;
currentBit = 0; currentBit = 0;
} }
@ -56,11 +56,11 @@ public class RAWFont {
int currentInt = 0; int currentInt = 0;
int currentBit = 0; int currentBit = 0;
for (int i = 0; i < charS; i++) { for (int i = 0; i < charS; i++) {
if (currentBit >= intBits) { if (currentBit >= RAWFont.intBits) {
currentInt += 1; currentInt += 1;
currentBit = 0; currentBit = 0;
} }
chars32[charIndex * charIntCount + currentInt] = (chars32[charIndex * charIntCount + currentInt]) | ((currentChar[i] ? 1 : 0) << currentBit); chars32[charIndex * charIntCount + currentInt] = chars32[charIndex * charIntCount + currentInt] | (currentChar[i] ? 1 : 0) << currentBit;
currentBit++; currentBit++;
} }
} }
@ -69,12 +69,11 @@ public class RAWFont {
Object obj = new Object(); Object obj = new Object();
final WeakReference<Object> ref = new WeakReference<>(obj); final WeakReference<Object> ref = new WeakReference<>(obj);
obj = null; obj = null;
while (ref.get() != null) { while (ref.get() != null)
System.gc(); System.gc();
}
} }
private void loadFont(String string) throws IOException { private void loadFont(final String string) throws IOException {
final URL res = ClassUtils.classLoader.getClass().getResource(string); final URL res = ClassUtils.classLoader.getClass().getResource(string);
final int[] file = Utils.realBytes(Utils.convertStreamToByteArray(res.openStream(), res.getFile().length())); final int[] file = Utils.realBytes(Utils.convertStreamToByteArray(res.openStream(), res.getFile().length()));
final int filelength = file.length; final int filelength = file.length;
@ -83,32 +82,28 @@ public class RAWFont {
charW = file[0x4] << 8 | file[0x5]; charW = file[0x4] << 8 | file[0x5];
charH = file[0x6] << 8 | file[0x7]; charH = file[0x6] << 8 | file[0x7];
charS = charW * charH; charS = charW * charH;
charIntCount = (int) Math.ceil(((double) charS) / ((double) intBits)); charIntCount = (int) Math.ceil((double) charS / (double) RAWFont.intBits);
minBound = file[0x9] << 24 | file[0xA] << 16 | file[0xB] << 8 | file[0xC]; minBound = file[0x9] << 24 | file[0xA] << 16 | file[0xB] << 8 | file[0xC];
maxBound = file[0xE] << 24 | file[0xF] << 16 | file[0x10] << 8 | file[0x11]; maxBound = file[0xE] << 24 | file[0xF] << 16 | file[0x10] << 8 | file[0x11];
if (maxBound <= minBound) { if (maxBound <= minBound)
maxBound = 10000; //TODO remove it: temp fix maxBound = 10000; //TODO remove it: temp fix
}
rawchars = new boolean[maxBound - minBound][]; rawchars = new boolean[maxBound - minBound][];
int index = 0x12; int index = 0x12;
while (index < filelength) { while (index < filelength)
try { try {
final int charIndex = file[index] << 8 | file[index + 1]; final int charIndex = file[index] << 8 | file[index + 1];
final boolean[] rawchar = new boolean[charS]; final boolean[] rawchar = new boolean[charS];
int charbytescount = 0; int charbytescount = 0;
while (charbytescount * 8 < charS) { while (charbytescount * 8 < charS)
charbytescount += 1; charbytescount += 1;
}
int currentBit = 0; int currentBit = 0;
for (int i = 0; i <= charbytescount; i++) { for (int i = 0; i <= charbytescount; i++)
for (int bit = 0; bit < 8; bit++) { for (int bit = 0; bit < 8; bit++) {
if (currentBit >= charS) { if (currentBit >= charS)
break; break;
} rawchar[currentBit] = (file[index + 2 + i] >> 8 - 1 - bit & 0x1) == 1 ? true : false;
rawchar[currentBit] = (((file[index + 2 + i] >> (8 - 1 - bit)) & 0x1) == 1) ? true : false;
currentBit++; currentBit++;
} }
}
rawchars[charIndex - minBound] = rawchar; rawchars[charIndex - minBound] = rawchar;
index += 2 + charbytescount; index += 2 + charbytescount;
} catch (final Exception ex) { } catch (final Exception ex) {
@ -116,27 +111,23 @@ public class RAWFont {
System.out.println(string); System.out.println(string);
Engine.getPlatform().exit(-1); Engine.getPlatform().exit(-1);
} }
} } else
} else {
throw new IOException(); throw new IOException();
} } else
} else {
throw new IOException(); throw new IOException();
}
} }
public int[] getCharIndexes(String txt) { public int[] getCharIndexes(final String txt) {
final int l = txt.length(); final int l = txt.length();
final int[] indexes = new int[l]; final int[] indexes = new int[l];
final char[] chars = txt.toCharArray(); final char[] chars = txt.toCharArray();
for (int i = 0; i < l; i++) { for (int i = 0; i < l; i++)
indexes[i] = (chars[i] & 0xFFFF) - minBound; indexes[i] = (chars[i] & 0xFFFF) - minBound;
}
return indexes; return indexes;
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
private void saveArray(int[] screen, String coutputpng) { private void saveArray(final int[] screen, final String coutputpng) {
final BufferedImage bi = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB); final BufferedImage bi = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB);
final int[] a = ((DataBufferInt) bi.getRaster().getDataBuffer()).getData(); final int[] a = ((DataBufferInt) bi.getRaster().getDataBuffer()).getData();
System.arraycopy(screen, 0, a, 0, screen.length); System.arraycopy(screen, 0, a, 0, screen.length);
@ -147,7 +138,8 @@ public class RAWFont {
} }
} }
public void drawText(int[] screen, int[] screenSize, int x, int y, int[] text, int color) { public void drawText(final int[] screen, final int[] screenSize, final int x, final int y, final int[] text,
final int color) {
final int screenLength = screen.length; final int screenLength = screen.length;
int screenPos = 0; int screenPos = 0;
@ -158,23 +150,21 @@ public class RAWFont {
int j; int j;
final int l = text.length; final int l = text.length;
for (int i = 0; i < l; i++) { for (int i = 0; i < l; i++) {
cpos = (i * (charW + 1)); cpos = i * (charW + 1);
final int charIndex = text[i]; final int charIndex = text[i];
for (int dy = 0; dy < charH; dy++) { for (int dy = 0; dy < charH; dy++)
for (int dx = 0; dx < charW; dx++) { for (int dx = 0; dx < charW; dx++) {
j = x + cpos + dx; j = x + cpos + dx;
if (j > 0 & j < screenSize[0]) { if (j > 0 & j < screenSize[0]) {
final int bit = dx + dy * charW; final int bit = dx + dy * charW;
currentInt = (int) (Math.floor(bit) / (intBits)); currentInt = (int) (Math.floor(bit) / RAWFont.intBits);
currentIntBitPosition = bit - (currentInt * intBits); currentIntBitPosition = bit - currentInt * RAWFont.intBits;
bitData = (chars32[charIndex * charIntCount + currentInt] >> currentIntBitPosition) & 1; bitData = chars32[charIndex * charIntCount + currentInt] >> currentIntBitPosition & 1;
screenPos = x + cpos + dx + (y + dy) * screenSize[0]; screenPos = x + cpos + dx + (y + dy) * screenSize[0];
if (bitData == 1 & screenLength > screenPos) { if (bitData == 1 & screenLength > screenPos)
screen[screenPos] = color; screen[screenPos] = color;
}
} }
} }
}
} }
} }
} }

View File

@ -1,5 +1,5 @@
package it.cavallium.warppi.event; package it.cavallium.warppi.event;
public interface KeyEvent extends Event { public interface KeyEvent extends Event {
public Key getKey(); Key getKey();
} }

View File

@ -2,9 +2,9 @@ package it.cavallium.warppi.event;
public class KeyPressedEvent implements KeyEvent { public class KeyPressedEvent implements KeyEvent {
private Key k; private final Key k;
public KeyPressedEvent(Key k) { public KeyPressedEvent(final Key k) {
this.k = k; this.k = k;
} }

View File

@ -2,9 +2,9 @@ package it.cavallium.warppi.event;
public class KeyReleasedEvent implements KeyEvent { public class KeyReleasedEvent implements KeyEvent {
private Key k; private final Key k;
public KeyReleasedEvent(Key k) { public KeyReleasedEvent(final Key k) {
this.k = k; this.k = k;
} }

View File

@ -1,11 +1,11 @@
package it.cavallium.warppi.event; package it.cavallium.warppi.event;
public interface KeyboardEventListener { public interface KeyboardEventListener {
public default boolean onKeyPressed(KeyPressedEvent k) { default boolean onKeyPressed(final KeyPressedEvent k) {
return false; return false;
} }
public default boolean onKeyReleased(KeyReleasedEvent k) { default boolean onKeyReleased(final KeyReleasedEvent k) {
return false; return false;
} }
} }

View File

@ -7,7 +7,7 @@ public class TouchCancelEvent implements TouchEvent {
private final List<TouchPoint> changedTouches; private final List<TouchPoint> changedTouches;
private final List<TouchPoint> touches; private final List<TouchPoint> touches;
public TouchCancelEvent(List<TouchPoint> changedTouches, List<TouchPoint> touches) { public TouchCancelEvent(final List<TouchPoint> changedTouches, final List<TouchPoint> touches) {
super(); super();
this.changedTouches = changedTouches; this.changedTouches = changedTouches;
this.touches = touches; this.touches = touches;
@ -27,20 +27,20 @@ public class TouchCancelEvent implements TouchEvent {
public int hashCode() { public int hashCode() {
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((changedTouches == null) ? 0 : changedTouches.hashCode()); result = prime * result + (changedTouches == null ? 0 : changedTouches.hashCode());
result = prime * result + ((touches == null) ? 0 : touches.hashCode()); result = prime * result + (touches == null ? 0 : touches.hashCode());
return result; return result;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
if (this == obj) if (this == obj)
return true; return true;
if (obj == null) if (obj == null)
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
TouchCancelEvent other = (TouchCancelEvent) obj; final TouchCancelEvent other = (TouchCancelEvent) obj;
if (changedTouches == null) { if (changedTouches == null) {
if (other.changedTouches != null) if (other.changedTouches != null)
return false; return false;

View File

@ -7,7 +7,7 @@ public class TouchEndEvent implements TouchEvent {
private final List<TouchPoint> changedTouches; private final List<TouchPoint> changedTouches;
private final List<TouchPoint> touches; private final List<TouchPoint> touches;
public TouchEndEvent(List<TouchPoint> changedTouches, List<TouchPoint> touches) { public TouchEndEvent(final List<TouchPoint> changedTouches, final List<TouchPoint> touches) {
super(); super();
this.changedTouches = changedTouches; this.changedTouches = changedTouches;
this.touches = touches; this.touches = touches;
@ -27,20 +27,20 @@ public class TouchEndEvent implements TouchEvent {
public int hashCode() { public int hashCode() {
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((changedTouches == null) ? 0 : changedTouches.hashCode()); result = prime * result + (changedTouches == null ? 0 : changedTouches.hashCode());
result = prime * result + ((touches == null) ? 0 : touches.hashCode()); result = prime * result + (touches == null ? 0 : touches.hashCode());
return result; return result;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
if (this == obj) if (this == obj)
return true; return true;
if (obj == null) if (obj == null)
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
TouchEndEvent other = (TouchEndEvent) obj; final TouchEndEvent other = (TouchEndEvent) obj;
if (changedTouches == null) { if (changedTouches == null) {
if (other.changedTouches != null) if (other.changedTouches != null)
return false; return false;

View File

@ -3,7 +3,7 @@ package it.cavallium.warppi.event;
import java.util.List; import java.util.List;
public interface TouchEvent extends Event { public interface TouchEvent extends Event {
public List<TouchPoint> getChangedTouches(); List<TouchPoint> getChangedTouches();
public List<TouchPoint> getTouches(); List<TouchPoint> getTouches();
} }

View File

@ -1,19 +1,19 @@
package it.cavallium.warppi.event; package it.cavallium.warppi.event;
public interface TouchEventListener { public interface TouchEventListener {
public default boolean onTouchStart(TouchStartEvent k) { default boolean onTouchStart(final TouchStartEvent k) {
return false; return false;
} }
public default boolean onTouchEnd(TouchEndEvent k) { default boolean onTouchEnd(final TouchEndEvent k) {
return false; return false;
} }
public default boolean onTouchCancel(TouchCancelEvent k) { default boolean onTouchCancel(final TouchCancelEvent k) {
return false; return false;
} }
public default boolean onTouchMove(TouchMoveEvent k) { default boolean onTouchMove(final TouchMoveEvent k) {
return false; return false;
} }
} }

View File

@ -7,7 +7,7 @@ public class TouchMoveEvent implements TouchEvent {
private final List<TouchPoint> changedTouches; private final List<TouchPoint> changedTouches;
private final List<TouchPoint> touches; private final List<TouchPoint> touches;
public TouchMoveEvent(List<TouchPoint> changedTouches, List<TouchPoint> touches) { public TouchMoveEvent(final List<TouchPoint> changedTouches, final List<TouchPoint> touches) {
super(); super();
this.changedTouches = changedTouches; this.changedTouches = changedTouches;
this.touches = touches; this.touches = touches;
@ -27,20 +27,20 @@ public class TouchMoveEvent implements TouchEvent {
public int hashCode() { public int hashCode() {
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((changedTouches == null) ? 0 : changedTouches.hashCode()); result = prime * result + (changedTouches == null ? 0 : changedTouches.hashCode());
result = prime * result + ((touches == null) ? 0 : touches.hashCode()); result = prime * result + (touches == null ? 0 : touches.hashCode());
return result; return result;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
if (this == obj) if (this == obj)
return true; return true;
if (obj == null) if (obj == null)
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
TouchMoveEvent other = (TouchMoveEvent) obj; final TouchMoveEvent other = (TouchMoveEvent) obj;
if (changedTouches == null) { if (changedTouches == null) {
if (other.changedTouches != null) if (other.changedTouches != null)
return false; return false;

View File

@ -9,7 +9,7 @@ public class TouchPoint {
private final float y; private final float y;
private final long id; private final long id;
public TouchPoint(long id, float x, float y, float radiusX, float radiusY, float force, float rotationAngle) { public TouchPoint(final long id, final float x, final float y, final float radiusX, final float radiusY, final float force, final float rotationAngle) {
super(); super();
this.id = id; this.id = id;
this.radiusX = radiusX; this.radiusX = radiusX;
@ -53,7 +53,7 @@ public class TouchPoint {
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + Float.floatToIntBits(force); result = prime * result + Float.floatToIntBits(force);
result = prime * result + (int) (id ^ (id >>> 32)); result = prime * result + (int) (id ^ id >>> 32);
result = prime * result + Float.floatToIntBits(radiusX); result = prime * result + Float.floatToIntBits(radiusX);
result = prime * result + Float.floatToIntBits(radiusY); result = prime * result + Float.floatToIntBits(radiusY);
result = prime * result + Float.floatToIntBits(rotationAngle); result = prime * result + Float.floatToIntBits(rotationAngle);
@ -63,14 +63,14 @@ public class TouchPoint {
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
if (this == obj) if (this == obj)
return true; return true;
if (obj == null) if (obj == null)
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
TouchPoint other = (TouchPoint) obj; final TouchPoint other = (TouchPoint) obj;
if (Float.floatToIntBits(force) != Float.floatToIntBits(other.force)) if (Float.floatToIntBits(force) != Float.floatToIntBits(other.force))
return false; return false;
if (id != other.id) if (id != other.id)

View File

@ -7,7 +7,7 @@ public class TouchStartEvent implements TouchEvent {
private final List<TouchPoint> changedTouches; private final List<TouchPoint> changedTouches;
private final List<TouchPoint> touches; private final List<TouchPoint> touches;
public TouchStartEvent(List<TouchPoint> changedTouches, List<TouchPoint> touches) { public TouchStartEvent(final List<TouchPoint> changedTouches, final List<TouchPoint> touches) {
super(); super();
this.changedTouches = changedTouches; this.changedTouches = changedTouches;
this.touches = touches; this.touches = touches;
@ -27,20 +27,20 @@ public class TouchStartEvent implements TouchEvent {
public int hashCode() { public int hashCode() {
final int prime = 31; final int prime = 31;
int result = 1; int result = 1;
result = prime * result + ((changedTouches == null) ? 0 : changedTouches.hashCode()); result = prime * result + (changedTouches == null ? 0 : changedTouches.hashCode());
result = prime * result + ((touches == null) ? 0 : touches.hashCode()); result = prime * result + (touches == null ? 0 : touches.hashCode());
return result; return result;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
if (this == obj) if (this == obj)
return true; return true;
if (obj == null) if (obj == null)
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
TouchStartEvent other = (TouchStartEvent) obj; final TouchStartEvent other = (TouchStartEvent) obj;
if (changedTouches == null) { if (changedTouches == null) {
if (other.changedTouches != null) if (other.changedTouches != null)
return false; return false;

View File

@ -5,7 +5,7 @@ public class MarioBlock {
private final int y; private final int y;
private final byte id; private final byte id;
public MarioBlock(int x, int y, byte b) { public MarioBlock(final int x, final int y, final byte b) {
this.x = x; this.x = x;
this.y = y; this.y = y;
id = b; id = b;
@ -27,7 +27,7 @@ public class MarioBlock {
return y; return y;
} }
public static boolean isSolid(byte id) { public static boolean isSolid(final byte id) {
return id != 0b0; return id != 0b0;
} }
} }

View File

@ -2,7 +2,7 @@ package it.cavallium.warppi.extra.mario;
public class MarioEnemy extends MarioEntity { public class MarioEnemy extends MarioEntity {
public MarioEnemy(double x, double y, double forceX, double forceY, boolean onGround, boolean subjectToGravity) { public MarioEnemy(final double x, final double y, final double forceX, final double forceY, final boolean onGround, final boolean subjectToGravity) {
super(x, y, forceX, forceY, onGround, subjectToGravity); super(x, y, forceX, forceY, onGround, subjectToGravity);
} }

View File

@ -11,7 +11,7 @@ public class MarioEntity {
public boolean collisionRight; public boolean collisionRight;
public boolean subjectToGravity; public boolean subjectToGravity;
public MarioEntity(double x, double y, double forceX, double forceY, boolean onGround, boolean subjectToGravity) { public MarioEntity(final double x, final double y, final double forceX, final double forceY, final boolean onGround, final boolean subjectToGravity) {
this.x = x; this.x = x;
this.y = y; this.y = y;
this.forceX = forceX; this.forceX = forceX;
@ -20,12 +20,12 @@ public class MarioEntity {
this.subjectToGravity = subjectToGravity; this.subjectToGravity = subjectToGravity;
} }
public void setPosition(double x, double y) { public void setPosition(final double x, final double y) {
this.x = x; this.x = x;
this.y = y; this.y = y;
} }
public void setPosition(double x, double y, boolean onGround) { public void setPosition(final double x, final double y, final boolean onGround) {
this.x = x; this.x = x;
this.y = y; this.y = y;
collisionDown = onGround; collisionDown = onGround;
@ -43,43 +43,41 @@ public class MarioEntity {
return collisionDown; return collisionDown;
} }
public void setOnGround(boolean onGround) { public void setOnGround(final boolean onGround) {
collisionDown = onGround; collisionDown = onGround;
} }
public void gameTick(double dt) { public void gameTick(final double dt) {
x = computeFutureDX(dt); x = computeFutureDX(dt);
y = computeFutureDY(dt); y = computeFutureDY(dt);
forceX = computeFutureForceDX(dt); forceX = computeFutureForceDX(dt);
forceY = computeFutureForceDY(dt); forceY = computeFutureForceDY(dt);
} }
public double computeFutureDX(double dt) { public double computeFutureDX(final double dt) {
return (x + dt * forceX) - x; return x + dt * forceX - x;
} }
public double computeFutureDY(double dt) { public double computeFutureDY(final double dt) {
final double forceY = this.forceY; final double forceY = this.forceY;
double y = this.y; double y = this.y;
if (!collisionDown) { if (!collisionDown)
y += dt * forceY; y += dt * forceY;
}
return y - this.y; return y - this.y;
} }
public double computeFutureForceDX(double dt) { public double computeFutureForceDX(final double dt) {
double forceX = this.forceX; double forceX = this.forceX;
forceX *= 0.75; forceX *= 0.75;
return forceX - this.forceX; return forceX - this.forceX;
} }
public double computeFutureForceDY(double dt) { public double computeFutureForceDY(final double dt) {
double forceY = this.forceY; double forceY = this.forceY;
if (subjectToGravity && !collisionDown) { if (subjectToGravity && !collisionDown)
forceY -= dt * 1569.6 / 16f; forceY -= dt * 1569.6 / 16f;
} else { else
forceY *= 0.75; forceY *= 0.75;
}
return forceY - this.forceY; return forceY - this.forceY;
} }
} }

View File

@ -26,15 +26,15 @@ public class MarioGame {
canMove = true; canMove = true;
} }
public MarioBlock getBlockAt(int x, int y) { public MarioBlock getBlockAt(final int x, final int y) {
return worlds[currentWorld].getBlockAt(x, y); return worlds[currentWorld].getBlockAt(x, y);
} }
public MarioBlock getBlockAt(double x, double y) { public MarioBlock getBlockAt(final double x, final double y) {
return getBlockAt((int) x, (int) y); return getBlockAt((int) x, (int) y);
} }
public void move(float dt, double deltaX, double deltaY) { public void move(final float dt, final double deltaX, final double deltaY) {
final double curX = player.getX(); final double curX = player.getX();
final double curY = player.getY(); final double curY = player.getY();
final double futureX = curX + deltaX; final double futureX = curX + deltaX;
@ -50,15 +50,14 @@ public class MarioGame {
return worlds[currentWorld]; return worlds[currentWorld];
} }
public void gameTick(float dt, boolean upPressed, boolean downPressed, boolean leftPressed, boolean rightPressed, public void gameTick(final float dt, final boolean upPressed, final boolean downPressed, final boolean leftPressed,
boolean jumpPressed, boolean runPressed) { final boolean rightPressed, final boolean jumpPressed, final boolean runPressed) {
checkOnGround(getPlayer(), dt); checkOnGround(getPlayer(), dt);
checkCollisionTop(getPlayer(), dt); checkCollisionTop(getPlayer(), dt);
checkCollisionLeft(getPlayer(), dt); checkCollisionLeft(getPlayer(), dt);
checkCollisionRight(getPlayer(), dt); checkCollisionRight(getPlayer(), dt);
if (canMove) { if (canMove)
move(dt, (rightPressed ? 1 : 0) - (leftPressed ? 1 : 0), jumpPressed ? 1 : 0); move(dt, (rightPressed ? 1 : 0) - (leftPressed ? 1 : 0), jumpPressed ? 1 : 0);
}
getPlayer().gameTick(dt); getPlayer().gameTick(dt);
final MarioWorld w = getCurrentWorld(); final MarioWorld w = getCurrentWorld();
@ -72,25 +71,24 @@ public class MarioGame {
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
private int nearest(double val, int a, int b) { private int nearest(final double val, final int a, final int b) {
final double aa = Math.abs(val - a); final double aa = Math.abs(val - a);
final double ab = Math.abs(val - b); final double ab = Math.abs(val - b);
if (aa < ab) { if (aa < ab)
return (int) aa; return (int) aa;
} else { else
return (int) ab; return (int) ab;
}
} }
private void checkOnGround(MarioEntity e, float dt) { private void checkOnGround(final MarioEntity e, final float dt) {
if (e.subjectToGravity) { if (e.subjectToGravity) {
final int xA = (int) Math.floor(e.getX()); final int xA = (int) Math.floor(e.getX());
final int xB = (int) Math.ceil(e.getX()); final int xB = (int) Math.ceil(e.getX());
final int y0 = (int) Math.ceil(e.getY()); final int y0 = (int) Math.ceil(e.getY());
final int y1 = (int) Math.ceil(e.getY() + e.computeFutureDY(dt)); final int y1 = (int) Math.ceil(e.getY() + e.computeFutureDY(dt));
boolean onGround = false; boolean onGround = false;
if (y1 < y0) { if (y1 < y0)
for (int y = y0; y >= y1; y--) { for (int y = y0; y >= y1; y--)
for (int x = xA; x <= xB; x++) { for (int x = xA; x <= xB; x++) {
final byte b = getCurrentWorld().getBlockIdAt(x, y - 1); final byte b = getCurrentWorld().getBlockIdAt(x, y - 1);
if (MarioBlock.isSolid(b)) { if (MarioBlock.isSolid(b)) {
@ -103,8 +101,7 @@ public class MarioGame {
break; break;
} }
} }
} else
} else {
for (int x = xA; x <= xB; x++) { for (int x = xA; x <= xB; x++) {
final byte b = getCurrentWorld().getBlockIdAt(x, y0 - 1); final byte b = getCurrentWorld().getBlockIdAt(x, y0 - 1);
if (MarioBlock.isSolid(b)) { if (MarioBlock.isSolid(b)) {
@ -116,22 +113,20 @@ public class MarioGame {
} }
} }
} }
} if (!onGround)
if (!onGround) {
e.setOnGround(false); e.setOnGround(false);
}
} }
} }
private void checkCollisionTop(MarioEntity e, float dt) { private void checkCollisionTop(final MarioEntity e, final float dt) {
if (e.subjectToGravity) { if (e.subjectToGravity) {
final int xA = (int) Math.floor(e.getX()); final int xA = (int) Math.floor(e.getX());
final int xB = (int) Math.ceil(e.getX()); final int xB = (int) Math.ceil(e.getX());
final int y0 = (int) Math.ceil(e.getY()); final int y0 = (int) Math.ceil(e.getY());
final int y1 = (int) Math.ceil(e.getY() + e.computeFutureDY(dt)); final int y1 = (int) Math.ceil(e.getY() + e.computeFutureDY(dt));
boolean collisionUp = false; boolean collisionUp = false;
if (y1 > y0) { if (y1 > y0)
for (int y = y0; y <= y1; y++) { for (int y = y0; y <= y1; y++)
for (int x = xA; x <= xB; x++) { for (int x = xA; x <= xB; x++) {
final byte b = getCurrentWorld().getBlockIdAt(x, y + 1); final byte b = getCurrentWorld().getBlockIdAt(x, y + 1);
if (MarioBlock.isSolid(b)) { if (MarioBlock.isSolid(b)) {
@ -144,8 +139,7 @@ public class MarioGame {
break; break;
} }
} }
} else
} else {
for (int x = xA; x <= xB; x++) { for (int x = xA; x <= xB; x++) {
final byte b = getCurrentWorld().getBlockIdAt(x, y0 + 1); final byte b = getCurrentWorld().getBlockIdAt(x, y0 + 1);
if (MarioBlock.isSolid(b)) { if (MarioBlock.isSolid(b)) {
@ -157,14 +151,12 @@ public class MarioGame {
} }
} }
} }
} if (!collisionUp)
if (!collisionUp) {
e.collisionUp = false; e.collisionUp = false;
}
} }
} }
private void checkCollisionRight(MarioEntity e, float dt) { private void checkCollisionRight(final MarioEntity e, final float dt) {
if (e.subjectToGravity) { if (e.subjectToGravity) {
final int yA = (int) Math.floor(e.getY()); final int yA = (int) Math.floor(e.getY());
final int yB = (int) Math.ceil(e.getY()); final int yB = (int) Math.ceil(e.getY());
@ -172,8 +164,8 @@ public class MarioGame {
final double x1double = e.getX() + e.computeFutureDX(dt); final double x1double = e.getX() + e.computeFutureDX(dt);
final int x1 = (int) Math.floor(x1double); final int x1 = (int) Math.floor(x1double);
boolean collisionRight = false; boolean collisionRight = false;
if (x1 > x0) { if (x1 > x0)
for (int x = x0; x <= x1; x++) { for (int x = x0; x <= x1; x++)
for (int y = yA; y <= yB; y++) { for (int y = yA; y <= yB; y++) {
final byte b = getCurrentWorld().getBlockIdAt(x + 1, y); final byte b = getCurrentWorld().getBlockIdAt(x + 1, y);
if (MarioBlock.isSolid(b)) { if (MarioBlock.isSolid(b)) {
@ -186,8 +178,7 @@ public class MarioGame {
break; break;
} }
} }
} else
} else {
for (int y = yA; y <= yB; y++) { for (int y = yA; y <= yB; y++) {
final byte b = getCurrentWorld().getBlockIdAt(x0 + 1, y); final byte b = getCurrentWorld().getBlockIdAt(x0 + 1, y);
if (MarioBlock.isSolid(b)) { if (MarioBlock.isSolid(b)) {
@ -199,14 +190,12 @@ public class MarioGame {
} }
} }
} }
} if (!collisionRight)
if (!collisionRight) {
e.collisionRight = false; e.collisionRight = false;
}
} }
} }
private void checkCollisionLeft(MarioEntity e, float dt) { private void checkCollisionLeft(final MarioEntity e, final float dt) {
if (e.subjectToGravity) { if (e.subjectToGravity) {
final int yA = (int) Math.floor(e.getY()); final int yA = (int) Math.floor(e.getY());
final int yB = (int) Math.ceil(e.getY()); final int yB = (int) Math.ceil(e.getY());
@ -220,39 +209,34 @@ public class MarioGame {
e.setPosition(0, e.getY()); e.setPosition(0, e.getY());
} }
e.collisionLeft = true; e.collisionLeft = true;
} else { } else if (x1 < x0)
if (x1 < x0) { for (int x = x0; x >= x1; x--)
for (int x = x0; x >= x1; x--) {
for (int y = yA; y <= yB; y++) {
final byte b = getCurrentWorld().getBlockIdAt(x - 1, y);
if (MarioBlock.isSolid(b)) {
collisionLeft = true;
if (e.forceX < 0 && x1double <= x) {
e.forceX = 0;
e.setPosition(x, e.getY());
e.collisionLeft = true;
}
break;
}
}
}
} else {
for (int y = yA; y <= yB; y++) { for (int y = yA; y <= yB; y++) {
final byte b = getCurrentWorld().getBlockIdAt(x0 - 1, y); final byte b = getCurrentWorld().getBlockIdAt(x - 1, y);
if (MarioBlock.isSolid(b)) { if (MarioBlock.isSolid(b)) {
collisionLeft = true; collisionLeft = true;
if (e.forceX < 0 && x1double <= x0) { if (e.forceX < 0 && x1double <= x) {
e.forceX = 0; e.forceX = 0;
e.setPosition(x0, e.getY()); e.setPosition(x, e.getY());
e.collisionLeft = true; e.collisionLeft = true;
} }
break;
}
}
else
for (int y = yA; y <= yB; y++) {
final byte b = getCurrentWorld().getBlockIdAt(x0 - 1, y);
if (MarioBlock.isSolid(b)) {
collisionLeft = true;
if (e.forceX < 0 && x1double <= x0) {
e.forceX = 0;
e.setPosition(x0, e.getY());
e.collisionLeft = true;
} }
} }
} }
} if (!collisionLeft)
if (!collisionLeft) {
e.collisionLeft = false; e.collisionLeft = false;
}
} }
} }

View File

@ -17,7 +17,7 @@ public class MarioWorld {
* @param events * @param events
* @param marioEnemies * @param marioEnemies
*/ */
public MarioWorld(int[] spawnPoint, int width, int height, byte[][] data, MarioEvent[] events, MarioEntity[] entities) { public MarioWorld(final int[] spawnPoint, final int width, final int height, final byte[][] data, final MarioEvent[] events, final MarioEntity[] entities) {
this.spawnPoint = spawnPoint; this.spawnPoint = spawnPoint;
this.width = width; this.width = width;
this.height = height; this.height = height;
@ -26,19 +26,17 @@ public class MarioWorld {
this.entities = entities; this.entities = entities;
} }
public byte getBlockIdAt(int x, int y) { public byte getBlockIdAt(final int x, final int y) {
final int idy = (height - 1 - y); final int idy = height - 1 - y;
if (idy < 0 || idy >= data.length) { if (idy < 0 || idy >= data.length)
return 0b0; return 0b0;
}
final int idx = x; final int idx = x;
if (idx < 0 || idx >= data[0].length) { if (idx < 0 || idx >= data[0].length)
return 0b0; return 0b0;
}
return data[idy][idx]; return data[idy][idx];
} }
public MarioBlock getBlockAt(int x, int y) { public MarioBlock getBlockAt(final int x, final int y) {
return new MarioBlock(x, y, getBlockIdAt(x, y)); return new MarioBlock(x, y, getBlockIdAt(x, y));
} }

View File

@ -14,13 +14,13 @@ public class PlayerEntity extends MarioEntity {
private double controllerDX; private double controllerDX;
private double controllerDY; private double controllerDY;
public PlayerEntity(double x, double y, int life) { public PlayerEntity(final double x, final double y, final int life) {
super(x, y, 0, 0, true, true); super(x, y, 0, 0, true, true);
this.life = life; this.life = life;
} }
@Override @Override
public void gameTick(double dt) { public void gameTick(final double dt) {
walkAnimation += dt; walkAnimation += dt;
x += computeFutureDX(dt); x += computeFutureDX(dt);
y += computeFutureDY(dt); y += computeFutureDY(dt);
@ -48,87 +48,79 @@ public class PlayerEntity extends MarioEntity {
if (jumptime <= 0.5f && !jumping && collisionDown) { if (jumptime <= 0.5f && !jumping && collisionDown) {
jumping = true; jumping = true;
collisionDown = false; collisionDown = false;
} else if (jumptime <= 0.5f) {} else { } else if (jumptime <= 0.5f) {} else
jumping = false; jumping = false;
}
} else { } else {
jumping = false; jumping = false;
if (collisionDown) { if (collisionDown)
jumptime = 0; jumptime = 0;
} else { else
jumptime = Float.MAX_VALUE; jumptime = Float.MAX_VALUE;
}
} }
if (!walking & !running & !jumping) { if (!walking & !running & !jumping) {
marioSkinPos[0] = 0; marioSkinPos[0] = 0;
marioSkinPos[1] = 0; marioSkinPos[1] = 0;
} else if (collisionDown & walking & !running & !jumping && walkAnimation >= 0.08) { } else if (collisionDown & walking & !running & !jumping && walkAnimation >= 0.08)
while (walkAnimation > 0.08) { while (walkAnimation > 0.08) {
walkAnimation -= 0.08; walkAnimation -= 0.08;
if (marioSkinPos[0] == 1 & marioSkinPos[1] == 0) { if (marioSkinPos[0] == 1 & marioSkinPos[1] == 0)
marioSkinPos[0] += 2; marioSkinPos[0] += 2;
} else if (marioSkinPos[0] == 3 & marioSkinPos[1] == 0) { else if (marioSkinPos[0] == 3 & marioSkinPos[1] == 0)
marioSkinPos[0] -= 1; marioSkinPos[0] -= 1;
} else if (marioSkinPos[0] == 2 & marioSkinPos[1] == 0) { else if (marioSkinPos[0] == 2 & marioSkinPos[1] == 0)
marioSkinPos[0] -= 1; marioSkinPos[0] -= 1;
} else { else {
marioSkinPos[0] = 1; marioSkinPos[0] = 1;
marioSkinPos[1] = 0; marioSkinPos[1] = 0;
} }
} }
} else if (jumping) { else if (jumping) {
marioSkinPos[0] = 5; marioSkinPos[0] = 5;
marioSkinPos[1] = 1; marioSkinPos[1] = 1;
} }
} }
@Override @Override
public double computeFutureDX(double dt) { public double computeFutureDX(final double dt) {
return super.computeFutureDX(dt); return super.computeFutureDX(dt);
} }
public double computeFuturedDY(double dt) { public double computeFuturedDY(final double dt) {
return super.computeFutureDY(dt); return super.computeFutureDY(dt);
} }
@Override @Override
public double computeFutureForceDX(double dt) { public double computeFutureForceDX(final double dt) {
double forceX = this.forceX; double forceX = this.forceX;
if (controllerDX == 0) {} else { if (controllerDX == 0) {} else {
if (controllerDX > 0) { //RIGHT if (controllerDX > 0)
if (forceX < 500f / 16f) { if (forceX < 500f / 16f)
forceX += dt * 500f / 16f; forceX += dt * 500f / 16f;
} if (controllerDX < 0)
} if (forceX > -500f / 16f)
if (controllerDX < 0) { //LEFT
if (forceX > -500f / 16f) {
forceX -= dt * 500f / 16f; forceX -= dt * 500f / 16f;
}
}
} }
return (forceX + super.computeFutureForceDX(dt)) - this.forceX; return forceX + super.computeFutureForceDX(dt) - this.forceX;
} }
@Override @Override
public double computeFutureForceDY(double dt) { public double computeFutureForceDY(final double dt) {
float jumptime = this.jumptime; float jumptime = this.jumptime;
double forceY = this.forceY; double forceY = this.forceY;
if (controllerDY > 0) { //JUMP if (controllerDY > 0) { //JUMP
if (collisionUp) { if (collisionUp)
jumptime = Float.MAX_VALUE; jumptime = Float.MAX_VALUE;
}
jumptime += dt; jumptime += dt;
if (jumptime <= 0.5f && !jumping && collisionDown) { if (jumptime <= 0.5f && !jumping && collisionDown)
forceY = dt * (4 * 1569.6f) / 16f; forceY = dt * (4 * 1569.6f) / 16f;
} else if (jumptime <= 0.5f) { else if (jumptime <= 0.5f)
forceY = dt * (4 * 1569.6f) / 16f; forceY = dt * (4 * 1569.6f) / 16f;
}
} }
return (forceY + super.computeFutureForceDY(dt)) - this.forceY; return forceY + super.computeFutureForceDY(dt) - this.forceY;
} }
public void move(float dt, double dX, double dY) { public void move(final float dt, final double dX, final double dY) {
walkAnimation += dt; walkAnimation += dt;
controllerDX = dX; controllerDX = dX;

View File

@ -11,7 +11,7 @@ public class BehaviorSubject<T> extends Subject<T> {
lastValueSet = false; lastValueSet = false;
} }
protected BehaviorSubject(T initialValue) { protected BehaviorSubject(final T initialValue) {
super(); super();
lastValue = initialValue; lastValue = initialValue;
lastValueSet = true; lastValueSet = true;
@ -21,31 +21,28 @@ public class BehaviorSubject<T> extends Subject<T> {
return new BehaviorSubject<>(); return new BehaviorSubject<>();
} }
public final static <T> BehaviorSubject<T> create(T initialValue) { public final static <T> BehaviorSubject<T> create(final T initialValue) {
return new BehaviorSubject<T>(initialValue); return new BehaviorSubject<>(initialValue);
} }
@Override @Override
public void onComplete() { public void onComplete() {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onComplete(); sub.onComplete();
}
} }
@Override @Override
public void onError(Throwable e) { public void onError(final Throwable e) {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
} }
@Override @Override
public void onNext(T t) { public void onNext(final T t) {
lastValue = t; lastValue = t;
lastValueSet = true; lastValueSet = true;
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onNext(t); sub.onNext(t);
}
} }
@Override @Override
@ -79,13 +76,12 @@ public class BehaviorSubject<T> extends Subject<T> {
} }
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(final Disposable d) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
DisposableOfSubscriber ds = (DisposableOfSubscriber) d; final DisposableOfSubscriber ds = (DisposableOfSubscriber) d;
Subscriber<? super T> s = ds.getSubscriber(); final Subscriber<? super T> s = ds.getSubscriber();
if (lastValueSet) { if (lastValueSet)
s.onNext(lastValue); s.onNext(lastValue);
}
} }
public T getLastValue() { public T getLastValue() {

View File

@ -26,9 +26,9 @@ public interface Consumer<T> {
* @throws NullPointerException * @throws NullPointerException
* if {@code after} is null * if {@code after} is null
*/ */
default Consumer<T> andThen(Consumer<? super T> after) { default Consumer<T> andThen(final Consumer<? super T> after) {
Objects.requireNonNull(after); Objects.requireNonNull(after);
return (T t) -> { return (final T t) -> {
accept(t); accept(t);
after.accept(t); after.accept(t);
}; };

View File

@ -1,7 +1,7 @@
package it.cavallium.warppi.flow; package it.cavallium.warppi.flow;
public interface Disposable { public interface Disposable {
public void dispose(); void dispose();
public boolean isDisposed(); boolean isDisposed();
} }

View File

@ -9,35 +9,31 @@ public class IntervalsManager {
private static List<ObservableInterval> intervals = new LinkedList<>(); private static List<ObservableInterval> intervals = new LinkedList<>();
static { static {
startChecker(); IntervalsManager.startChecker();
} }
private IntervalsManager() { private IntervalsManager() {
} }
public static void register(ObservableInterval t) { public static void register(final ObservableInterval t) {
synchronized (intervals) { synchronized (IntervalsManager.intervals) {
if (!intervals.contains(t)) { if (!IntervalsManager.intervals.contains(t))
intervals.add(t); IntervalsManager.intervals.add(t);
}
} }
} }
private static void startChecker() { private static void startChecker() {
Thread t = new Thread(() -> { final Thread t = new Thread(() -> {
try { try {
while (true) { while (true) {
Thread.sleep(1000); Thread.sleep(1000);
for (ObservableInterval interval : intervals) { for (final ObservableInterval interval : IntervalsManager.intervals)
if (interval.running) { if (interval.running)
if (interval.subscribers.size() <= 0) { if (interval.subscribers.size() <= 0)
interval.stopInterval(); interval.stopInterval();
}
}
}
} }
} catch (InterruptedException e) { } catch (final InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
}); });

View File

@ -14,69 +14,75 @@ public abstract class Observable<T> implements ObservableSource<T> {
return null; return null;
} }
public Disposable subscribe(Action1<? super T> onNext) { public Disposable subscribe(final Action1<? super T> onNext) {
return subscribe(createSubscriber(onNext)); return subscribe(createSubscriber(onNext));
} }
protected Observable<T>.DisposableOfSubscriber createDisposable(Subscriber<? super T> sub) { protected Observable<T>.DisposableOfSubscriber createDisposable(final Subscriber<? super T> sub) {
return new DisposableOfSubscriber(sub); return new DisposableOfSubscriber(sub);
} }
public Disposable subscribe(Action1<? super T> onNext, Action1<Throwable> onError) { public Disposable subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError) {
return subscribe(createSubscriber(onNext, onError)); return subscribe(createSubscriber(onNext, onError));
} }
public Disposable subscribe(Action1<? super T> onNext, Action1<Throwable> onError, Action0 onCompleted) { public Disposable subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError,
final Action0 onCompleted) {
return subscribe(createSubscriber(onNext, onError, onCompleted)); return subscribe(createSubscriber(onNext, onError, onCompleted));
} }
public void subscribe(Observer<? super T> obs) { @Override
public void subscribe(final Observer<? super T> obs) {
subscribe(createSubscriber(obs)); subscribe(createSubscriber(obs));
} }
public Disposable subscribe(Subscriber<? super T> sub) { public Disposable subscribe(final Subscriber<? super T> sub) {
subscribers.add(sub); subscribers.add(sub);
return createDisposable(sub); return createDisposable(sub);
} }
protected Subscriber<T> createSubscriber(Action1<? super T> onNext) { protected Subscriber<T> createSubscriber(final Action1<? super T> onNext) {
return new Subscriber<T>() { return new Subscriber<T>() {
@Override @Override
public void onSubscribe(Subscription s) {} public void onSubscribe(final Subscription s) {}
public void onNext(T t) { @Override
public void onNext(final T t) {
onNext.call(t); onNext.call(t);
} }
}; };
} }
protected Subscriber<T> createSubscriber(Action1<? super T> onNext, Action1<Throwable> onError) { protected Subscriber<T> createSubscriber(final Action1<? super T> onNext, final Action1<Throwable> onError) {
return new Subscriber<T>() { return new Subscriber<T>() {
@Override @Override
public void onSubscribe(Subscription s) {} public void onSubscribe(final Subscription s) {}
public void onNext(T t) { @Override
public void onNext(final T t) {
onNext.call(t); onNext.call(t);
} }
@Override @Override
public void onError(Throwable t) { public void onError(final Throwable t) {
onError.call(t); onError.call(t);
} }
}; };
} }
protected Subscriber<T> createSubscriber(Action1<? super T> onNext, Action1<Throwable> onError, Action0 onCompl) { protected Subscriber<T> createSubscriber(final Action1<? super T> onNext, final Action1<Throwable> onError,
final Action0 onCompl) {
return new Subscriber<T>() { return new Subscriber<T>() {
@Override @Override
public void onSubscribe(Subscription s) {} public void onSubscribe(final Subscription s) {}
public void onNext(T t) { @Override
public void onNext(final T t) {
onNext.call(t); onNext.call(t);
} }
@Override @Override
public void onError(Throwable t) { public void onError(final Throwable t) {
onError.call(t); onError.call(t);
} }
@ -87,17 +93,18 @@ public abstract class Observable<T> implements ObservableSource<T> {
}; };
} }
protected Subscriber<T> createSubscriber(Observer<? super T> obs) { protected Subscriber<T> createSubscriber(final Observer<? super T> obs) {
return new Subscriber<T>() { return new Subscriber<T>() {
@Override @Override
public void onSubscribe(Subscription s) {} public void onSubscribe(final Subscription s) {}
public void onNext(T t) { @Override
public void onNext(final T t) {
obs.onNext(t); obs.onNext(t);
} }
@Override @Override
public void onError(Throwable t) { public void onError(final Throwable t) {
obs.onError(t); obs.onError(t);
} }
@ -108,32 +115,32 @@ public abstract class Observable<T> implements ObservableSource<T> {
}; };
} }
public static final <T> Observable<T> merge(Observable<T> a, Observable<T> b) { public static final <T> Observable<T> merge(final Observable<T> a, final Observable<T> b) {
return new ObservableMerged<>(a, b); return new ObservableMerged<>(a, b);
} }
@Deprecated @Deprecated
public static final <T> Observable<T> of(Observable<T> a) { public static final <T> Observable<T> of(final Observable<T> a) {
return null; return null;
} }
public final <U> Observable<U> map(Function<T, U> f) { public final <U> Observable<U> map(final Function<T, U> f) {
return new ObservableMap<T, U>(this, f); return new ObservableMap<>(this, f);
} }
public static final <T, U> Observable<Pair<T, U>> combineLatest(Observable<T> a, Observable<U> b) { public static final <T, U> Observable<Pair<T, U>> combineLatest(final Observable<T> a, final Observable<U> b) {
return new ObservableCombinedLatest<>(a, b); return new ObservableCombinedLatest<>(a, b);
} }
public static final <T, U> Observable<Pair<T, U>> combineChanged(Observable<T> a, Observable<U> b) { public static final <T, U> Observable<Pair<T, U>> combineChanged(final Observable<T> a, final Observable<U> b) {
return new ObservableCombinedChanged<>(a, b); return new ObservableCombinedChanged<>(a, b);
} }
public static final <T, U> Observable<Pair<T, U>> zip(Observable<T> a, Observable<U> b) { public static final <T, U> Observable<Pair<T, U>> zip(final Observable<T> a, final Observable<U> b) {
return new ObservableZipped<>(a, b); return new ObservableZipped<>(a, b);
} }
public static final Observable<Long> interval(long interval) { public static final Observable<Long> interval(final long interval) {
return new ObservableInterval(interval); return new ObservableInterval(interval);
} }
@ -141,7 +148,7 @@ public abstract class Observable<T> implements ObservableSource<T> {
private final Subscriber<? super T> sub; private final Subscriber<? super T> sub;
public DisposableOfSubscriber(Subscriber<? super T> sub) { public DisposableOfSubscriber(final Subscriber<? super T> sub) {
this.sub = sub; this.sub = sub;
} }
@ -155,9 +162,8 @@ public abstract class Observable<T> implements ObservableSource<T> {
@Override @Override
public void dispose() { public void dispose() {
if (isDisposed()) { if (isDisposed())
throw new RuntimeException("Already disposed!"); throw new RuntimeException("Already disposed!");
}
subscribers.remove(sub); subscribers.remove(sub);
Observable.this.onDisposed(sub); Observable.this.onDisposed(sub);
} }
@ -169,8 +175,8 @@ public abstract class Observable<T> implements ObservableSource<T> {
} }
public Observable<T> doOnNext(Action1<T> onNext) { public Observable<T> doOnNext(final Action1<T> onNext) {
Subject<T> onNextSubject = BehaviorSubject.create(); final Subject<T> onNextSubject = BehaviorSubject.create();
this.subscribe((val) -> { this.subscribe((val) -> {
onNext.call(val); onNext.call(val);
onNextSubject.onNext(val); onNextSubject.onNext(val);
@ -178,7 +184,7 @@ public abstract class Observable<T> implements ObservableSource<T> {
return onNextSubject; return onNextSubject;
} }
public void onDisposed(Subscriber<? super T> sub) { public void onDisposed(final Subscriber<? super T> sub) {
} }
} }

View File

@ -4,12 +4,12 @@ import org.apache.commons.lang3.tuple.Pair;
public class ObservableCombinedChanged<T, U> extends Observable<Pair<T, U>> { public class ObservableCombinedChanged<T, U> extends Observable<Pair<T, U>> {
private volatile boolean initialized = false; private volatile boolean initialized = false;
private Observable<T> a; private final Observable<T> a;
private Observable<U> b; private final Observable<U> b;
private Disposable disposableA; private Disposable disposableA;
private Disposable disposableB; private Disposable disposableB;
public ObservableCombinedChanged(Observable<T> a, Observable<U> b) { public ObservableCombinedChanged(final Observable<T> a, final Observable<U> b) {
super(); super();
this.a = a; this.a = a;
this.b = b; this.b = b;
@ -17,30 +17,24 @@ public class ObservableCombinedChanged<T, U> extends Observable<Pair<T, U>> {
private void initialize() { private void initialize() {
this.disposableA = a.subscribe((t) -> { this.disposableA = a.subscribe((t) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onNext(Pair.of(t, null)); sub.onNext(Pair.of(t, null));
}
}, (e) -> { }, (e) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
this.disposableB = b.subscribe((t) -> { this.disposableB = b.subscribe((t) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onNext(Pair.of(null, t)); sub.onNext(Pair.of(null, t));;
} ;
}, (e) -> { }, (e) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
} }
@ -52,14 +46,14 @@ public class ObservableCombinedChanged<T, U> extends Observable<Pair<T, U>> {
} }
@Override @Override
public Disposable subscribe(Subscriber<? super Pair<T, U>> sub) { public Disposable subscribe(final Subscriber<? super Pair<T, U>> sub) {
Disposable disp = super.subscribe(sub); final Disposable disp = super.subscribe(sub);
chechInitialized(); chechInitialized();
return disp; return disp;
} }
@Override @Override
public void onDisposed(Subscriber<? super Pair<T, U>> sub) { public void onDisposed(final Subscriber<? super Pair<T, U>> sub) {
super.onDisposed(sub); super.onDisposed(sub);
this.disposableA.dispose(); this.disposableA.dispose();
this.disposableB.dispose(); this.disposableB.dispose();

View File

@ -4,8 +4,8 @@ import org.apache.commons.lang3.tuple.Pair;
public class ObservableCombinedLatest<T, U> extends Observable<Pair<T, U>> { public class ObservableCombinedLatest<T, U> extends Observable<Pair<T, U>> {
private volatile boolean initialized = false; private volatile boolean initialized = false;
private Observable<T> a; private final Observable<T> a;
private Observable<U> b; private final Observable<U> b;
private Disposable disposableA; private Disposable disposableA;
private Disposable disposableB; private Disposable disposableB;
private volatile T lastA; private volatile T lastA;
@ -13,7 +13,7 @@ public class ObservableCombinedLatest<T, U> extends Observable<Pair<T, U>> {
private volatile boolean didAOneTime; private volatile boolean didAOneTime;
private volatile boolean didBOneTime; private volatile boolean didBOneTime;
public ObservableCombinedLatest(Observable<T> a, Observable<U> b) { public ObservableCombinedLatest(final Observable<T> a, final Observable<U> b) {
super(); super();
this.a = a; this.a = a;
this.b = b; this.b = b;
@ -25,35 +25,30 @@ public class ObservableCombinedLatest<T, U> extends Observable<Pair<T, U>> {
didAOneTime = true; didAOneTime = true;
receivedNext(); receivedNext();
}, (e) -> { }, (e) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
this.disposableB = b.subscribe((t) -> { this.disposableB = b.subscribe((t) -> {
lastB = t; lastB = t;
didBOneTime = true; didBOneTime = true;
receivedNext(); receivedNext();
}, (e) -> { }, (e) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
} }
private void receivedNext() { private void receivedNext() {
if (didAOneTime && didBOneTime) { if (didAOneTime && didBOneTime)
this.subscribers.forEach(sub -> { subscribers.forEach(sub -> {
sub.onNext(Pair.of(lastA, lastB)); sub.onNext(Pair.of(lastA, lastB));
}); });
}
} }
private void chechInitialized() { private void chechInitialized() {
@ -64,14 +59,14 @@ public class ObservableCombinedLatest<T, U> extends Observable<Pair<T, U>> {
} }
@Override @Override
public Disposable subscribe(Subscriber<? super Pair<T, U>> sub) { public Disposable subscribe(final Subscriber<? super Pair<T, U>> sub) {
Disposable disp = super.subscribe(sub); final Disposable disp = super.subscribe(sub);
chechInitialized(); chechInitialized();
return disp; return disp;
} }
@Override @Override
public void onDisposed(Subscriber<? super Pair<T, U>> sub) { public void onDisposed(final Subscriber<? super Pair<T, U>> sub) {
super.onDisposed(sub); super.onDisposed(sub);
this.disposableA.dispose(); this.disposableA.dispose();
this.disposableB.dispose(); this.disposableB.dispose();

View File

@ -7,12 +7,12 @@ public class ObservableInterval extends Observable<Long> {
volatile boolean running; volatile boolean running;
volatile Thread timeThread; volatile Thread timeThread;
protected ObservableInterval(long interval) { protected ObservableInterval(final long interval) {
super(); super();
this.interval = interval; this.interval = interval;
try { try {
startInterval(); startInterval();
} catch (InterruptedException e) { } catch (final InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -20,15 +20,15 @@ public class ObservableInterval extends Observable<Long> {
void stopInterval() { void stopInterval() {
if (running) { if (running) {
running = false; running = false;
this.timeThread.interrupt(); timeThread.interrupt();
} }
} }
@Override @Override
public Disposable subscribe(Subscriber<? super Long> sub) { public Disposable subscribe(final Subscriber<? super Long> sub) {
try { try {
startInterval(); startInterval();
} catch (InterruptedException e) { } catch (final InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
return super.subscribe(sub); return super.subscribe(sub);
@ -36,18 +36,16 @@ public class ObservableInterval extends Observable<Long> {
void startInterval() throws InterruptedException { void startInterval() throws InterruptedException {
if (running == false) { if (running == false) {
while (timeThread != null) { while (timeThread != null)
Thread.sleep(100); Thread.sleep(100);
}
timeThread = new Thread(() -> { timeThread = new Thread(() -> {
try { try {
while (!Thread.interrupted()) { while (!Thread.interrupted()) {
for (Subscriber<? super Long> sub : this.subscribers) { for (final Subscriber<? super Long> sub : subscribers)
sub.onNext(System.currentTimeMillis()); sub.onNext(System.currentTimeMillis());
}
Thread.sleep(interval); Thread.sleep(interval);
} }
} catch (InterruptedException e) {} } catch (final InterruptedException e) {}
timeThread = null; timeThread = null;
}); });
Engine.getPlatform().setThreadName(timeThread, "ObservableTimer"); Engine.getPlatform().setThreadName(timeThread, "ObservableTimer");
@ -56,12 +54,12 @@ public class ObservableInterval extends Observable<Long> {
} }
} }
public static ObservableInterval create(long l) { public static ObservableInterval create(final long l) {
return new ObservableInterval(l); return new ObservableInterval(l);
} }
@Override @Override
public void onDisposed(Subscriber<? super Long> sub) { public void onDisposed(final Subscriber<? super Long> sub) {
super.onDisposed(sub); super.onDisposed(sub);
stopInterval(); stopInterval();
} }

View File

@ -3,12 +3,12 @@ package it.cavallium.warppi.flow;
import java.util.function.Function; import java.util.function.Function;
public class ObservableMap<T, U> extends Observable<U> { public class ObservableMap<T, U> extends Observable<U> {
private Observable<T> originalObservable; private final Observable<T> originalObservable;
private Function<T, U> mapAction; private final Function<T, U> mapAction;
private volatile boolean initialized = false; private volatile boolean initialized = false;
private Disposable mapDisposable; private Disposable mapDisposable;
public ObservableMap(Observable<T> originalObservable, Function<T, U> mapAction) { public ObservableMap(final Observable<T> originalObservable, final Function<T, U> mapAction) {
super(); super();
this.originalObservable = originalObservable; this.originalObservable = originalObservable;
this.mapAction = mapAction; this.mapAction = mapAction;
@ -16,17 +16,14 @@ public class ObservableMap<T, U> extends Observable<U> {
private void initialize() { private void initialize() {
this.mapDisposable = originalObservable.subscribe((t) -> { this.mapDisposable = originalObservable.subscribe((t) -> {
for (Subscriber<? super U> sub : this.subscribers) { for (final Subscriber<? super U> sub : subscribers)
sub.onNext(mapAction.apply(t)); sub.onNext(mapAction.apply(t));;
} ;
}, (e) -> { }, (e) -> {
for (Subscriber<? super U> sub : this.subscribers) { for (final Subscriber<? super U> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super U> sub : this.subscribers) { for (final Subscriber<? super U> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
} }
@ -38,14 +35,14 @@ public class ObservableMap<T, U> extends Observable<U> {
} }
@Override @Override
public Disposable subscribe(Subscriber<? super U> sub) { public Disposable subscribe(final Subscriber<? super U> sub) {
Disposable disp = super.subscribe(sub); final Disposable disp = super.subscribe(sub);
chechInitialized(); chechInitialized();
return disp; return disp;
} }
@Override @Override
public void onDisposed(Subscriber<? super U> sub) { public void onDisposed(final Subscriber<? super U> sub) {
super.onDisposed(sub); super.onDisposed(sub);
mapDisposable.dispose(); mapDisposable.dispose();
} }

View File

@ -1,13 +1,13 @@
package it.cavallium.warppi.flow; package it.cavallium.warppi.flow;
public class ObservableMerged<T> extends Observable<T> { public class ObservableMerged<T> extends Observable<T> {
private Observable<T> originalObservableA; private final Observable<T> originalObservableA;
private Observable<T> originalObservableB; private final Observable<T> originalObservableB;
private volatile boolean initialized = false; private volatile boolean initialized = false;
private Disposable mapDisposableA; private Disposable mapDisposableA;
private Disposable mapDisposableB; private Disposable mapDisposableB;
public ObservableMerged(Observable<T> originalObservableA, Observable<T> originalObservableB) { public ObservableMerged(final Observable<T> originalObservableA, final Observable<T> originalObservableB) {
super(); super();
this.originalObservableA = originalObservableA; this.originalObservableA = originalObservableA;
this.originalObservableB = originalObservableB; this.originalObservableB = originalObservableB;
@ -15,30 +15,24 @@ public class ObservableMerged<T> extends Observable<T> {
private void initialize() { private void initialize() {
this.mapDisposableA = originalObservableA.subscribe((t) -> { this.mapDisposableA = originalObservableA.subscribe((t) -> {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onNext(t); sub.onNext(t);;
} ;
}, (e) -> { }, (e) -> {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
this.mapDisposableB = originalObservableB.subscribe((t) -> { this.mapDisposableB = originalObservableB.subscribe((t) -> {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onNext(t); sub.onNext(t);;
} ;
}, (e) -> { }, (e) -> {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
} }
@ -50,14 +44,14 @@ public class ObservableMerged<T> extends Observable<T> {
} }
@Override @Override
public Disposable subscribe(Subscriber<? super T> sub) { public Disposable subscribe(final Subscriber<? super T> sub) {
Disposable disp = super.subscribe(sub); final Disposable disp = super.subscribe(sub);
chechInitialized(); chechInitialized();
return disp; return disp;
} }
@Override @Override
public void onDisposed(Subscriber<? super T> sub) { public void onDisposed(final Subscriber<? super T> sub) {
super.onDisposed(sub); super.onDisposed(sub);
this.mapDisposableA.dispose(); this.mapDisposableA.dispose();
this.mapDisposableB.dispose(); this.mapDisposableB.dispose();

View File

@ -1,5 +1,5 @@
package it.cavallium.warppi.flow; package it.cavallium.warppi.flow;
public interface ObservableSource<T> { public interface ObservableSource<T> {
public void subscribe(Observer<? super T> observer); void subscribe(Observer<? super T> observer);
} }

View File

@ -4,8 +4,8 @@ import org.apache.commons.lang3.tuple.Pair;
public class ObservableZipped<T, U> extends Observable<Pair<T, U>> { public class ObservableZipped<T, U> extends Observable<Pair<T, U>> {
private volatile boolean initialized = false; private volatile boolean initialized = false;
private Observable<T> a; private final Observable<T> a;
private Observable<U> b; private final Observable<U> b;
private Disposable disposableA; private Disposable disposableA;
private Disposable disposableB; private Disposable disposableB;
private volatile T lastA; private volatile T lastA;
@ -13,7 +13,7 @@ public class ObservableZipped<T, U> extends Observable<Pair<T, U>> {
private volatile boolean didA; private volatile boolean didA;
private volatile boolean didB; private volatile boolean didB;
public ObservableZipped(Observable<T> a, Observable<U> b) { public ObservableZipped(final Observable<T> a, final Observable<U> b) {
super(); super();
this.a = a; this.a = a;
this.b = b; this.b = b;
@ -25,26 +25,22 @@ public class ObservableZipped<T, U> extends Observable<Pair<T, U>> {
didA = true; didA = true;
receivedNext(); receivedNext();
}, (e) -> { }, (e) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
this.disposableB = b.subscribe((t) -> { this.disposableB = b.subscribe((t) -> {
lastB = t; lastB = t;
didB = true; didB = true;
receivedNext(); receivedNext();
}, (e) -> { }, (e) -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
}, () -> { }, () -> {
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
}); });
} }
@ -52,9 +48,8 @@ public class ObservableZipped<T, U> extends Observable<Pair<T, U>> {
if (didA && didB) { if (didA && didB) {
didA = false; didA = false;
didB = false; didB = false;
for (Subscriber<? super Pair<T, U>> sub : this.subscribers) { for (final Subscriber<? super Pair<T, U>> sub : subscribers)
sub.onNext(Pair.of(lastA, lastB)); sub.onNext(Pair.of(lastA, lastB));;
} ;
} }
} }
@ -66,14 +61,14 @@ public class ObservableZipped<T, U> extends Observable<Pair<T, U>> {
} }
@Override @Override
public Disposable subscribe(Subscriber<? super Pair<T, U>> sub) { public Disposable subscribe(final Subscriber<? super Pair<T, U>> sub) {
Disposable disp = super.subscribe(sub); final Disposable disp = super.subscribe(sub);
chechInitialized(); chechInitialized();
return disp; return disp;
} }
@Override @Override
public void onDisposed(Subscriber<? super Pair<T, U>> sub) { public void onDisposed(final Subscriber<? super Pair<T, U>> sub) {
super.onDisposed(sub); super.onDisposed(sub);
this.disposableA.dispose(); this.disposableA.dispose();
this.disposableB.dispose(); this.disposableB.dispose();

View File

@ -1,11 +1,11 @@
package it.cavallium.warppi.flow; package it.cavallium.warppi.flow;
public interface Observer<T> { public interface Observer<T> {
public void onComplete(); void onComplete();
public void onError(Throwable e); void onError(Throwable e);
public void onNext(T t); void onNext(T t);
public void onSubscribe(Disposable d); void onSubscribe(Disposable d);
} }

View File

@ -10,23 +10,20 @@ public class SimpleSubject<T> extends Subject<T> {
@Override @Override
public void onComplete() { public void onComplete() {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onComplete(); sub.onComplete();;
} ;
} }
@Override @Override
public void onError(Throwable e) { public void onError(final Throwable e) {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onError(e); sub.onError(e);;
} ;
} }
@Override @Override
public void onNext(T t) { public void onNext(final T t) {
for (Subscriber<? super T> sub : this.subscribers) { for (final Subscriber<? super T> sub : subscribers)
sub.onNext(t); sub.onNext(t);;
} ;
} }
@Override @Override
@ -60,6 +57,6 @@ public class SimpleSubject<T> extends Subject<T> {
} }
@Override @Override
public void onSubscribe(Disposable d) {} public void onSubscribe(final Disposable d) {}
} }

View File

@ -12,29 +12,30 @@ public abstract class Subject<T> extends Observable<T> implements Observer<T> {
abstract Subject<T> toSerialized(); abstract Subject<T> toSerialized();
@Override @Override
public Disposable subscribe(Action1<? super T> onNext) { public Disposable subscribe(final Action1<? super T> onNext) {
return subscribe(createSubscriber(onNext)); return subscribe(createSubscriber(onNext));
} }
@Override @Override
public Disposable subscribe(Action1<? super T> onNext, Action1<Throwable> onError) { public Disposable subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError) {
return subscribe(createSubscriber(onNext, onError)); return subscribe(createSubscriber(onNext, onError));
} }
@Override @Override
public Disposable subscribe(Action1<? super T> onNext, Action1<Throwable> onError, Action0 onCompl) { public Disposable subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError,
final Action0 onCompl) {
return subscribe(createSubscriber(onNext, onError, onCompl)); return subscribe(createSubscriber(onNext, onError, onCompl));
} }
@Override @Override
public void subscribe(Observer<? super T> obs) { public void subscribe(final Observer<? super T> obs) {
subscribe(createSubscriber(obs)); subscribe(createSubscriber(obs));
} }
@Override @Override
public Disposable subscribe(Subscriber<? super T> sub) { public Disposable subscribe(final Subscriber<? super T> sub) {
Disposable disp = super.subscribe(sub); final Disposable disp = super.subscribe(sub);
this.onSubscribe(disp); onSubscribe(disp);
return disp; return disp;
} }
} }

View File

@ -3,7 +3,7 @@ package it.cavallium.warppi.flow;
public interface Subscriber<T> { public interface Subscriber<T> {
default void onComplete() {} default void onComplete() {}
default void onError(Throwable t) {} default void onError(final Throwable t) {}
void onNext(T t); void onNext(T t);

View File

@ -3,12 +3,12 @@ package it.cavallium.warppi.flow;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
public class TestFlow { public class TestFlow {
public static void main(String[] args) { public static void main(final String[] args) {
try { try {
BehaviorSubject<Float> subject0 = BehaviorSubject.create(0f); final BehaviorSubject<Float> subject0 = BehaviorSubject.create(0f);
Disposable s00 = subject0.subscribe((val) -> { final Disposable s00 = subject0.subscribe((val) -> {
System.out.println(val); System.out.println(val);
}); });
Thread.sleep(100); Thread.sleep(100);
@ -25,9 +25,9 @@ public class TestFlow {
subject0.onComplete(); subject0.onComplete();
System.out.println("items sent."); System.out.println("items sent.");
Subject<Float> subject1 = BehaviorSubject.create(0f); final Subject<Float> subject1 = BehaviorSubject.create(0f);
Disposable s01 = subject1.map((val) -> val + 1).subscribe((val) -> { final Disposable s01 = subject1.map((val) -> val + 1).subscribe((val) -> {
System.out.println(val); System.out.println(val);
}); });
Thread.sleep(100); Thread.sleep(100);
@ -44,11 +44,11 @@ public class TestFlow {
subject1.onComplete(); subject1.onComplete();
System.out.println("items sent."); System.out.println("items sent.");
BehaviorSubject<Float> subjectA = BehaviorSubject.create(); final BehaviorSubject<Float> subjectA = BehaviorSubject.create();
BehaviorSubject<Float> subjectB = BehaviorSubject.create(); final BehaviorSubject<Float> subjectB = BehaviorSubject.create();
Observable<Float> observable = Observable.merge(subjectA, subjectB); final Observable<Float> observable = Observable.merge(subjectA, subjectB);
Disposable s1 = observable.subscribe((val) -> { final Disposable s1 = observable.subscribe((val) -> {
System.out.println(val); System.out.println(val);
}); });
Thread.sleep(100); Thread.sleep(100);
@ -67,11 +67,11 @@ public class TestFlow {
Thread.sleep(100); Thread.sleep(100);
System.out.println("no more news subscribers left, closing publisher.."); System.out.println("no more news subscribers left, closing publisher..");
BehaviorSubject<Float> subjectC = BehaviorSubject.create(); final BehaviorSubject<Float> subjectC = BehaviorSubject.create();
BehaviorSubject<Float> subjectD = BehaviorSubject.create(); final BehaviorSubject<Float> subjectD = BehaviorSubject.create();
Observable<Pair<Float, Float>> observableCombined = Observable.combineLatest(subjectC, subjectD); final Observable<Pair<Float, Float>> observableCombined = Observable.combineLatest(subjectC, subjectD);
System.out.println("Combined observable: " + observableCombined.toString()); System.out.println("Combined observable: " + observableCombined.toString());
Disposable s2 = observableCombined.subscribe((val) -> { final Disposable s2 = observableCombined.subscribe((val) -> {
System.out.println(val); System.out.println(val);
}); });
Thread.sleep(100); Thread.sleep(100);
@ -89,8 +89,8 @@ public class TestFlow {
subjectC.onComplete(); subjectC.onComplete();
System.out.println("items sent."); System.out.println("items sent.");
ObservableInterval timA = ObservableInterval.create(100L); final ObservableInterval timA = ObservableInterval.create(100L);
Disposable d = timA.subscribe((t) -> { final Disposable d = timA.subscribe((t) -> {
System.out.println(t); System.out.println(t);
}); });
@ -98,11 +98,11 @@ public class TestFlow {
d.dispose(); d.dispose();
System.out.println("items sent."); System.out.println("items sent.");
ObservableInterval subjectE = ObservableInterval.create(100L); final ObservableInterval subjectE = ObservableInterval.create(100L);
BehaviorSubject<Float> subjectF = BehaviorSubject.create(); final BehaviorSubject<Float> subjectF = BehaviorSubject.create();
Observable<Pair<Long, Float>> observableZipped = Observable.zip(subjectE, subjectF); final Observable<Pair<Long, Float>> observableZipped = Observable.zip(subjectE, subjectF);
System.out.println("Zipped observable: " + observableZipped.toString()); System.out.println("Zipped observable: " + observableZipped.toString());
Disposable s3 = observableZipped.subscribe((val) -> { final Disposable s3 = observableZipped.subscribe((val) -> {
System.out.println(val); System.out.println(val);
}); });
Thread.sleep(100); Thread.sleep(100);
@ -127,7 +127,7 @@ public class TestFlow {
subjectF.onComplete(); subjectF.onComplete();
System.out.println("items sent."); System.out.println("items sent.");
} catch (Exception ex) { } catch (final Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }

View File

@ -48,43 +48,22 @@ public class CalculatorHUD extends HUD {
renderer.glDrawLine(0, 20, engine.getWidth() - 1, 20); renderer.glDrawLine(0, 20, engine.getWidth() - 1, 20);
renderer.glColor3i(255, 255, 255); renderer.glColor3i(255, 255, 255);
guiSkin.use(engine); guiSkin.use(engine);
if (Keyboard.shift) { if (Keyboard.shift)
renderer.glFillRect(2 + 18 * 0, 2, 16, 16, 16 * 2, 16 * 0, 16, 16); renderer.glFillRect(2 + 18 * 0, 2, 16, 16, 16 * 2, 16 * 0, 16, 16);
} else { else
renderer.glFillRect(2 + 18 * 0, 2, 16, 16, 16 * 3, 16 * 0, 16, 16); renderer.glFillRect(2 + 18 * 0, 2, 16, 16, 16 * 3, 16 * 0, 16, 16);
} if (Keyboard.alpha)
if (Keyboard.alpha) {
renderer.glFillRect(2 + 18 * 1, 2, 16, 16, 16 * 0, 16 * 0, 16, 16); renderer.glFillRect(2 + 18 * 1, 2, 16, 16, 16 * 0, 16 * 0, 16, 16);
} else { else
renderer.glFillRect(2 + 18 * 1, 2, 16, 16, 16 * 1, 16 * 0, 16, 16); renderer.glFillRect(2 + 18 * 1, 2, 16, 16, 16 * 1, 16 * 0, 16, 16);
}
/*
if (Calculator.angleMode == AngleMode.DEG) {
drawSkinPart(8 + 18 * 2, 2, 16 * 4, 16 * 0, 16 + 16 * 4, 16 + 16 * 0);
drawSkinPart(8 + 18 * 3, 2, 16 * 7, 16 * 0, 16 + 16 * 7, 16 + 16 * 0);
drawSkinPart(8 + 18 * 4, 2, 16 * 9, 16 * 0, 16 + 16 * 9, 16 + 16 * 0);
} else if (Calculator.angleMode == AngleMode.RAD) {
drawSkinPart(8 + 18 * 2, 2, 16 * 5, 16 * 0, 16 + 16 * 5, 16 + 16 * 0);
drawSkinPart(8 + 18 * 3, 2, 16 * 6, 16 * 0, 16 + 16 * 6, 16 + 16 * 0);
drawSkinPart(8 + 18 * 4, 2, 16 * 9, 16 * 0, 16 + 16 * 9, 16 + 16 * 0);
} else if (Calculator.angleMode == AngleMode.GRA) {
drawSkinPart(8 + 18 * 2, 2, 16 * 5, 16 * 0, 16 + 16 * 5, 16 + 16 * 0);
drawSkinPart(8 + 18 * 3, 2, 16 * 7, 16 * 0, 16 + 16 * 7, 16 + 16 * 0);
drawSkinPart(8 + 18 * 4, 2, 16 * 8, 16 * 0, 16 + 16 * 8, 16 + 16 * 0);
} else {
drawSkinPart(8 + 18 * 2, 2, 16 * 5, 16 * 0, 16 + 16 * 5, 16 + 16 * 0);
drawSkinPart(8 + 18 * 3, 2, 16 * 7, 16 * 0, 16 + 16 * 7, 16 + 16 * 0);
drawSkinPart(8 + 18 * 4, 2, 16 * 9, 16 * 0, 16 + 16 * 9, 16 + 16 * 0);
}*/
int padding = 2; int padding = 2;
final int brightness = (int) (Math.ceil(Engine.INSTANCE.getHardwareDevice().getDisplayManager().getBrightness() * 9)); final int brightness = (int) Math.ceil(Engine.INSTANCE.getHardwareDevice().getDisplayManager().getBrightness() * 9);
if (brightness <= 10) { if (brightness <= 10)
renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * brightness, 16 * 1, 16, 16); renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * brightness, 16 * 1, 16, 16);
} else { else
Engine.getPlatform().getConsoleUtils().out().println(1, "Brightness error"); Engine.getPlatform().getConsoleUtils().out().println(1, "Brightness error");
}
padding += 18 + 6; padding += 18 + 6;
@ -96,15 +75,14 @@ public class CalculatorHUD extends HUD {
padding += 18 + 6; padding += 18 + 6;
} }
if (canGoBack && canGoForward) { if (canGoBack && canGoForward)
renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 14, 16 * 0, 16, 16); renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 14, 16 * 0, 16, 16);
} else if (canGoBack) { else if (canGoBack)
renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 15, 16 * 0, 16, 16); renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 15, 16 * 0, 16, 16);
} else if (canGoForward) { else if (canGoForward)
renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 16, 16 * 0, 16, 16); renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 16, 16 * 0, 16, 16);
} else { else
renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 17, 16 * 0, 16, 16); renderer.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 17, 16 * 0, 16, 16);
}
padding += 18; padding += 18;
@ -123,7 +101,7 @@ public class CalculatorHUD extends HUD {
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }

View File

@ -51,12 +51,12 @@ public final class DisplayManager implements RenderingLoop {
*/ */
public boolean forceRefresh; public boolean forceRefresh;
public DisplayManager(HardwareDisplay monitor, HUD hud, Screen screen, String title) { public DisplayManager(final HardwareDisplay monitor, final HUD hud, final Screen screen, final String title) {
this.monitor = monitor; this.monitor = monitor;
this.hud = hud; this.hud = hud;
this.initialTitle = title; initialTitle = title;
this.initialScreen = screen; initialScreen = screen;
screenChange = Engine.getPlatform().newSemaphore(); screenChange = Engine.getPlatform().newSemaphore();
engine = chooseGraphicEngine(); engine = chooseGraphicEngine();
supportsPauses = engine.doesRefreshPauses(); supportsPauses = engine.doesRefreshPauses();
@ -72,9 +72,8 @@ public final class DisplayManager implements RenderingLoop {
try { try {
hud.d = this; hud.d = this;
hud.create(); hud.create();
if (!hud.initialized) { if (!hud.initialized)
hud.initialize(); hud.initialize();
}
} catch (final Exception e) { } catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
Engine.getPlatform().exit(0); Engine.getPlatform().exit(0);
@ -97,18 +96,18 @@ public final class DisplayManager implements RenderingLoop {
* skin_tex = glGenTextures(); * skin_tex = glGenTextures();
* glBindTexture(GL_TEXTURE_2D, skin_tex); * glBindTexture(GL_TEXTURE_2D, skin_tex);
* glPixelStorei(GL_UNPACK_ALIGNMENT, 1); * glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
* *
* InputStream in = new FileInputStream("skin.png"); * InputStream in = new FileInputStream("skin.png");
* PNGDecoder decoder = new PNGDecoder(in); * PNGDecoder decoder = new PNGDecoder(in);
* *
* System.out.println("width="+decoder.getWidth()); * System.out.println("width="+decoder.getWidth());
* System.out.println("height="+decoder.getHeight()); * System.out.println("height="+decoder.getHeight());
* *
* ByteBuffer buf = * ByteBuffer buf =
* ByteBuffer.allocateDirect(4*decoder.getWidth()*decoder.getHeight()); * ByteBuffer.allocateDirect(4*decoder.getWidth()*decoder.getHeight());
* decoder.decode(buf, decoder.getWidth()*4, Format.RGBA); * decoder.decode(buf, decoder.getWidth()*4, Format.RGBA);
* buf.flip(); * buf.flip();
* *
* skin = buf; * skin = buf;
* skin_w = decoder.getWidth(); * skin_w = decoder.getWidth();
* skin_h = decoder.getHeight(); * skin_h = decoder.getHeight();
@ -165,55 +164,48 @@ public final class DisplayManager implements RenderingLoop {
throw new UnsupportedOperationException("No graphic engines available."); throw new UnsupportedOperationException("No graphic engines available.");
} }
public void setScreen(Screen screen) { public void setScreen(final Screen screen) {
if (screen.initialized == false) { if (screen.initialized == false)
if (screen.canBeInHistory) { if (screen.canBeInHistory) {
if (this.currentSession > 0) { if (currentSession > 0) {
final int sl = this.sessions.length + 5; //TODO: I don't know why if i don't add +5 or more some items disappear final int sl = sessions.length + 5; //TODO: I don't know why if i don't add +5 or more some items disappear
this.sessions = Arrays.copyOfRange(this.sessions, this.currentSession, sl); sessions = Arrays.copyOfRange(sessions, currentSession, sl);
} }
this.currentSession = 0; currentSession = 0;
for (int i = this.sessions.length - 1; i >= 1; i--) { for (int i = sessions.length - 1; i >= 1; i--)
this.sessions[i] = this.sessions[i - 1]; sessions[i] = sessions[i - 1];
} sessions[0] = screen;
this.sessions[0] = screen; } else
} else { currentSession = -1;
this.currentSession = -1;
}
}
screen.d = this; screen.d = this;
try { try {
screen.create(); screen.create();
this.screen = screen; this.screen = screen;
screenChange.release(); screenChange.release();
if (screen.initialized == false) { if (screen.initialized == false)
screen.initialize(); screen.initialize();
}
} catch (final Exception e) { } catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
Engine.getPlatform().exit(0); Engine.getPlatform().exit(0);
} }
} }
public void replaceScreen(Screen screen) { public void replaceScreen(final Screen screen) {
if (screen.initialized == false) { if (screen.initialized == false)
if (screen.canBeInHistory) { if (screen.canBeInHistory)
this.sessions[this.currentSession] = screen; sessions[currentSession] = screen;
} else { else {
this.currentSession = -1; currentSession = -1;
for (int i = 0; i < this.sessions.length - 2; i++) { for (int i = 0; i < sessions.length - 2; i++)
this.sessions[i] = this.sessions[i + 1]; sessions[i] = sessions[i + 1];
}
} }
}
screen.d = this; screen.d = this;
try { try {
screen.create(); screen.create();
this.screen = screen; this.screen = screen;
screenChange.release(); screenChange.release();
if (screen.initialized == false) { if (screen.initialized == false)
screen.initialize(); screen.initialize();
}
} catch (final Exception e) { } catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
Engine.getPlatform().exit(0); Engine.getPlatform().exit(0);
@ -221,65 +213,55 @@ public final class DisplayManager implements RenderingLoop {
} }
public boolean canGoBack() { public boolean canGoBack() {
if (this.currentSession == -1) { if (currentSession == -1)
return this.sessions[0] != null; return sessions[0] != null;
} if (screen != sessions[currentSession]) {
if (this.screen != this.sessions[this.currentSession]) {
} else if (this.currentSession + 1 < this.sessions.length) { } else if (currentSession + 1 < sessions.length) {
if (this.sessions[this.currentSession + 1] != null) { if (sessions[currentSession + 1] != null) {
} else { } else
return false; return false;
} } else
} else {
return false; return false;
} if (sessions[currentSession] != null)
if (this.sessions[this.currentSession] != null) {
return true; return true;
}
return false; return false;
} }
public void goBack() { public void goBack() {
if (canGoBack()) { if (canGoBack()) {
if (this.currentSession >= 0 && this.screen != this.sessions[this.currentSession]) {} else { if (currentSession >= 0 && screen != sessions[currentSession]) {} else
this.currentSession += 1; currentSession += 1;
} screen = sessions[currentSession];
this.screen = this.sessions[this.currentSession];
screenChange.release(); screenChange.release();
} }
} }
public boolean canGoForward() { public boolean canGoForward() {
if (this.currentSession <= 0) { // -1 e 0 if (currentSession <= 0)
return false; return false;
} if (screen != sessions[currentSession]) {
if (this.screen != this.sessions[this.currentSession]) {
} else if (this.currentSession > 0) { } else if (currentSession > 0) {
if (this.sessions[this.currentSession - 1] != null) { if (sessions[currentSession - 1] != null) {
} else { } else
return false; return false;
} } else
} else {
return false; return false;
} if (sessions[currentSession] != null)
if (this.sessions[this.currentSession] != null) {
return true; return true;
}
return false; return false;
} }
public void goForward() { public void goForward() {
if (canGoForward()) { if (canGoForward()) {
if (this.screen != this.sessions[this.currentSession]) { if (screen != sessions[currentSession]) {
} else { } else
this.currentSession -= 1; currentSession -= 1;
} screen = sessions[currentSession];
this.screen = this.sessions[this.currentSession];
screenChange.release(); screenChange.release();
} }
} }
@ -309,11 +291,9 @@ public final class DisplayManager implements RenderingLoop {
private void draw_init() { private void draw_init() {
if (engine.supportsFontRegistering()) { if (engine.supportsFontRegistering()) {
final List<BinaryFont> fontsIterator = engine.getRegisteredFonts(); final List<BinaryFont> fontsIterator = engine.getRegisteredFonts();
for (final BinaryFont f : fontsIterator) { for (final BinaryFont f : fontsIterator)
if (!f.isInitialized()) { if (!f.isInitialized())
f.initialize(engine); f.initialize(engine);
}
}
} }
renderer.glClear(engine.getWidth(), engine.getHeight()); renderer.glClear(engine.getWidth(), engine.getHeight());
} }
@ -323,28 +303,25 @@ public final class DisplayManager implements RenderingLoop {
if (error != null) { if (error != null) {
final BinaryFont fnt = Utils.getFont(false, false); final BinaryFont fnt = Utils.getFont(false, false);
if (fnt != null && fnt != engine.getRenderer().getCurrentFont()) { if (fnt != null && fnt != engine.getRenderer().getCurrentFont())
fnt.use(engine); fnt.use(engine);
}
renderer.glColor3i(129, 28, 22); renderer.glColor3i(129, 28, 22);
renderer.glDrawStringRight(StaticVars.screenSize[0] - 2, StaticVars.screenSize[1] - (fnt.getCharacterHeight() + 2), Engine.getPlatform().getSettings().getCalculatorNameUppercase() + " CALCULATOR"); renderer.glDrawStringRight(StaticVars.screenSize[0] - 2, StaticVars.screenSize[1] - (fnt.getCharacterHeight() + 2), Engine.getPlatform().getSettings().getCalculatorNameUppercase() + " CALCULATOR");
renderer.glColor3i(149, 32, 26); renderer.glColor3i(149, 32, 26);
renderer.glDrawStringCenter((StaticVars.screenSize[0] / 2), 22, error); renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, 22, error);
renderer.glColor3i(164, 34, 28); renderer.glColor3i(164, 34, 28);
int i = 22; int i = 22;
for (final String stackPart : errorStackTrace) { for (final String stackPart : errorStackTrace) {
renderer.glDrawStringLeft(2, 22 + i, stackPart); renderer.glDrawStringLeft(2, 22 + i, stackPart);
i += 11; i += 11;
} }
if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont()) { if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont())
fonts[0].use(engine); fonts[0].use(engine);
}
renderer.glColor3i(129, 28, 22); renderer.glColor3i(129, 28, 22);
renderer.glDrawStringCenter((StaticVars.screenSize[0] / 2), 11, "UNEXPECTED EXCEPTION"); renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, 11, "UNEXPECTED EXCEPTION");
} else { } else {
if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont()) { if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont())
fonts[0].use(engine); fonts[0].use(engine);
}
hud.renderBackground(); hud.renderBackground();
screen.render(); screen.render();
hud.render(); hud.render();
@ -363,7 +340,7 @@ public final class DisplayManager implements RenderingLoop {
@Override @Override
public void refresh() { public void refresh() {
if (supportsPauses == false || (Keyboard.popRefreshRequest() || forceRefresh || screen.mustBeRefreshed())) { if (supportsPauses == false || Keyboard.popRefreshRequest() || forceRefresh || screen.mustBeRefreshed()) {
forceRefresh = false; forceRefresh = false;
draw(); draw();
} }
@ -386,28 +363,26 @@ public final class DisplayManager implements RenderingLoop {
Engine.getPlatform().exit(0); Engine.getPlatform().exit(0);
} }
Observable<Long> workTimer = Observable.interval(tickDuration); final Observable<Long> workTimer = Observable.interval(DisplayManager.tickDuration);
Observable<Integer[]> onResizeObservable = engine.onResize(); final Observable<Integer[]> onResizeObservable = engine.onResize();
Observable<Pair<Long, Integer[]>> refreshObservable; Observable<Pair<Long, Integer[]>> refreshObservable;
if (onResizeObservable == null) { if (onResizeObservable == null)
refreshObservable = workTimer.map((l) -> Pair.of(l, null)); refreshObservable = workTimer.map((l) -> Pair.of(l, null));
} else { else
refreshObservable = Observable.combineChanged(workTimer, engine.onResize()); refreshObservable = Observable.combineChanged(workTimer, engine.onResize());
}
refreshObservable.subscribe((pair) -> { refreshObservable.subscribe((pair) -> {
double dt = 0; double dt = 0;
final long newtime = System.nanoTime(); final long newtime = System.nanoTime();
if (precTime == -1) { if (precTime == -1)
dt = tickDuration; dt = DisplayManager.tickDuration;
} else { else
dt = (newtime - precTime) / 1000d / 1000d; dt = (newtime - precTime) / 1000d / 1000d;
}
precTime = newtime; precTime = newtime;
if (pair.getRight() != null) { if (pair.getRight() != null) {
Integer[] windowSize = pair.getRight(); final Integer[] windowSize = pair.getRight();
StaticVars.screenSize[0] = windowSize[0]; StaticVars.screenSize[0] = windowSize[0];
StaticVars.screenSize[1] = windowSize[1]; StaticVars.screenSize[1] = windowSize[1];
} }
@ -421,26 +396,25 @@ public final class DisplayManager implements RenderingLoop {
} finally {} } finally {}
} }
public void changeBrightness(float change) { public void changeBrightness(final float change) {
setBrightness(brightness + change); setBrightness(brightness + change);
} }
public void setBrightness(float newval) { public void setBrightness(final float newval) {
if (newval >= 0 && newval <= 1) { if (newval >= 0 && newval <= 1) {
brightness = newval; brightness = newval;
monitor.setBrightness(brightness); monitor.setBrightness(brightness);
} }
} }
public void cycleBrightness(boolean reverse) { public void cycleBrightness(final boolean reverse) {
final float step = reverse ? -0.1f : 0.1f; final float step = reverse ? -0.1f : 0.1f;
if (brightness + step > 1f) { if (brightness + step > 1f)
setBrightness(0f); setBrightness(0f);
} else if (brightness + step <= 0f) { else if (brightness + step <= 0f)
setBrightness(1.0f); setBrightness(1.0f);
} else { else
changeBrightness(step); changeBrightness(step);
}
} }
public float getBrightness() { public float getBrightness() {
@ -451,7 +425,7 @@ public final class DisplayManager implements RenderingLoop {
public Screen[] sessions = new Screen[5]; public Screen[] sessions = new Screen[5];
@Deprecated @Deprecated
public void colore(float f1, float f2, float f3, float f4) { public void colore(final float f1, final float f2, final float f3, final float f4) {
renderer.glColor4f(f1, f2, f3, f4); renderer.glColor4f(f1, f2, f3, f4);
} }
@ -460,7 +434,7 @@ public final class DisplayManager implements RenderingLoop {
} }
@Deprecated @Deprecated
public void drawSkinPart(int x, int y, int uvX, int uvY, int uvX2, int uvY2) { public void drawSkinPart(final int x, final int y, final int uvX, final int uvY, final int uvX2, final int uvY2) {
renderer.glFillRect(x, y, uvX2 - uvX, uvY2 - uvY, uvX, uvY, uvX2 - uvX, uvY2 - uvY); renderer.glFillRect(x, y, uvX2 - uvX, uvY2 - uvY, uvX, uvY, uvX2 - uvX, uvY2 - uvY);
} }

View File

@ -10,17 +10,17 @@ public class GUIErrorMessage {
private final String err; private final String err;
private final long creationTime; private final long creationTime;
public GUIErrorMessage(Error e) { public GUIErrorMessage(final Error e) {
err = e.getLocalizedMessage(); err = e.getLocalizedMessage();
creationTime = System.currentTimeMillis(); creationTime = System.currentTimeMillis();
} }
public GUIErrorMessage(Exception ex) { public GUIErrorMessage(final Exception ex) {
err = ex.getLocalizedMessage(); err = ex.getLocalizedMessage();
creationTime = System.currentTimeMillis(); creationTime = System.currentTimeMillis();
} }
public void draw(GraphicEngine g, Renderer r, String msg) { public void draw(final GraphicEngine g, final Renderer r, final String msg) {
final int scrW = g.getWidth(); final int scrW = g.getWidth();
final int scrH = g.getHeight(); final int scrH = g.getHeight();
final int width = 200; final int width = 200;

View File

@ -1,20 +1,20 @@
package it.cavallium.warppi.gui; package it.cavallium.warppi.gui;
public class GraphicUtils { public class GraphicUtils {
public static final float sin(float rad) { public static final float sin(final float rad) {
return sin[(int) (rad * radToIndex) & SIN_MASK]; return GraphicUtils.sin[(int) (rad * GraphicUtils.radToIndex) & GraphicUtils.SIN_MASK];
} }
public static final float cos(float rad) { public static final float cos(final float rad) {
return cos[(int) (rad * radToIndex) & SIN_MASK]; return GraphicUtils.cos[(int) (rad * GraphicUtils.radToIndex) & GraphicUtils.SIN_MASK];
} }
public static final float sinDeg(float deg) { public static final float sinDeg(final float deg) {
return sin[(int) (deg * degToIndex) & SIN_MASK]; return GraphicUtils.sin[(int) (deg * GraphicUtils.degToIndex) & GraphicUtils.SIN_MASK];
} }
public static final float cosDeg(float deg) { public static final float cosDeg(final float deg) {
return cos[(int) (deg * degToIndex) & SIN_MASK]; return GraphicUtils.cos[(int) (deg * GraphicUtils.degToIndex) & GraphicUtils.SIN_MASK];
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
@ -36,26 +36,26 @@ public class GraphicUtils {
DEG = 180.0f / (float) Math.PI; DEG = 180.0f / (float) Math.PI;
SIN_BITS = 8; SIN_BITS = 8;
SIN_MASK = ~(-1 << SIN_BITS); SIN_MASK = ~(-1 << GraphicUtils.SIN_BITS);
SIN_COUNT = SIN_MASK + 1; SIN_COUNT = GraphicUtils.SIN_MASK + 1;
radFull = (float) (Math.PI * 2.0); radFull = (float) (Math.PI * 2.0);
degFull = (float) (360.0); degFull = (float) 360.0;
radToIndex = SIN_COUNT / radFull; radToIndex = GraphicUtils.SIN_COUNT / GraphicUtils.radFull;
degToIndex = SIN_COUNT / degFull; degToIndex = GraphicUtils.SIN_COUNT / GraphicUtils.degFull;
sin = new float[SIN_COUNT]; sin = new float[GraphicUtils.SIN_COUNT];
cos = new float[SIN_COUNT]; cos = new float[GraphicUtils.SIN_COUNT];
for (int i = 0; i < SIN_COUNT; i++) { for (int i = 0; i < GraphicUtils.SIN_COUNT; i++) {
sin[i] = (float) Math.sin((i + 0.5f) / SIN_COUNT * radFull); GraphicUtils.sin[i] = (float) Math.sin((i + 0.5f) / GraphicUtils.SIN_COUNT * GraphicUtils.radFull);
cos[i] = (float) Math.cos((i + 0.5f) / SIN_COUNT * radFull); GraphicUtils.cos[i] = (float) Math.cos((i + 0.5f) / GraphicUtils.SIN_COUNT * GraphicUtils.radFull);
} }
// Four cardinal directions (credits: Nate) // Four cardinal directions (credits: Nate)
for (int i = 0; i < 360; i += 90) { for (int i = 0; i < 360; i += 90) {
sin[(int) (i * degToIndex) & SIN_MASK] = (float) Math.sin(i * Math.PI / 180.0); GraphicUtils.sin[(int) (i * GraphicUtils.degToIndex) & GraphicUtils.SIN_MASK] = (float) Math.sin(i * Math.PI / 180.0);
cos[(int) (i * degToIndex) & SIN_MASK] = (float) Math.cos(i * Math.PI / 180.0); GraphicUtils.cos[(int) (i * GraphicUtils.degToIndex) & GraphicUtils.SIN_MASK] = (float) Math.cos(i * Math.PI / 180.0);
} }
} }
} }

View File

@ -7,24 +7,24 @@ public interface GraphicalElement {
* <strong>height</strong>, <strong>line</strong> or * <strong>height</strong>, <strong>line</strong> or
* <strong>length</strong>. * <strong>length</strong>.
*/ */
public void recomputeDimensions(); void recomputeDimensions();
/** /**
* *
* @return Width of the element. * @return Width of the element.
*/ */
public int getWidth(); int getWidth();
/** /**
* *
* @return Height of the element. * @return Height of the element.
*/ */
public int getHeight(); int getHeight();
/** /**
* *
* @return Position of the vertical alignment line of the element, relative * @return Position of the vertical alignment line of the element, relative
* to itself. * to itself.
*/ */
public int getLine(); int getLine();
} }

View File

@ -1,15 +1,15 @@
package it.cavallium.warppi.gui; package it.cavallium.warppi.gui;
public interface GraphicalInterface { public interface GraphicalInterface {
public void create() throws InterruptedException; void create() throws InterruptedException;
public void initialize() throws InterruptedException; void initialize() throws InterruptedException;
public void render(); void render();
public void renderTopmost(); void renderTopmost();
public void beforeRender(float dt); void beforeRender(float dt);
public boolean mustBeRefreshed(); boolean mustBeRefreshed();
} }

View File

@ -1,9 +1,9 @@
package it.cavallium.warppi.gui; package it.cavallium.warppi.gui;
public interface HardwareDisplay { public interface HardwareDisplay {
public void initialize(); void initialize();
public void shutdown(); void shutdown();
public void setBrightness(double value); void setBrightness(double value);
} }

View File

@ -8,11 +8,11 @@ public class Caret {
private final int[] lastSize; private final int[] lastSize;
private final int[] lastLocation; private final int[] lastLocation;
public Caret(CaretState state, int pos) { public Caret(final CaretState state, final int pos) {
this(state, pos, new int[] { 0, 0 }, new int[] { 2, 5 }); this(state, pos, new int[] { 0, 0 }, new int[] { 2, 5 });
} }
public Caret(CaretState state, int pos, int[] lastLocation, int[] lastSize) { public Caret(final CaretState state, final int pos, final int[] lastLocation, final int[] lastSize) {
this.state = state; this.state = state;
this.pos = pos; this.pos = pos;
remaining = pos; remaining = pos;
@ -20,7 +20,7 @@ public class Caret {
this.lastSize = lastSize; this.lastSize = lastSize;
} }
public void skip(int i) { public void skip(final int i) {
remaining -= i; remaining -= i;
} }
@ -37,20 +37,18 @@ public class Caret {
} }
public void flipState() { public void flipState() {
if (state == CaretState.VISIBLE_ON) { if (state == CaretState.VISIBLE_ON)
state = CaretState.VISIBLE_OFF; state = CaretState.VISIBLE_OFF;
} else if (state == CaretState.VISIBLE_OFF) { else if (state == CaretState.VISIBLE_OFF)
state = CaretState.VISIBLE_ON; state = CaretState.VISIBLE_ON;
}
} }
public void turnOn() { public void turnOn() {
if (state == CaretState.VISIBLE_OFF) { if (state == CaretState.VISIBLE_OFF)
state = CaretState.VISIBLE_ON; state = CaretState.VISIBLE_ON;
}
} }
public void setPosition(int i) { public void setPosition(final int i) {
pos = i; pos = i;
} }
@ -58,7 +56,7 @@ public class Caret {
remaining = pos; remaining = pos;
} }
public void setLastLocation(int x, int y) { public void setLastLocation(final int x, final int y) {
lastLocation[0] = x; lastLocation[0] = x;
lastLocation[1] = y; lastLocation[1] = y;
} }
@ -67,7 +65,7 @@ public class Caret {
return new int[] { lastLocation[0], lastLocation[1] }; return new int[] { lastLocation[0], lastLocation[1] };
} }
public void setLastSize(int w, int h) { public void setLastSize(final int w, final int h) {
lastSize[0] = w; lastSize[0] = w;
lastSize[1] = h; lastSize[1] = h;
} }

View File

@ -11,7 +11,7 @@ public abstract class ExtraMenu<T extends Block> implements Serializable, Keyboa
private static final long serialVersionUID = -6944683477814944299L; private static final long serialVersionUID = -6944683477814944299L;
public ExtraMenu(T block) { public ExtraMenu(final T block) {
this.block = block; this.block = block;
this.location = new int[] { 0, 0 }; this.location = new int[] { 0, 0 };
this.width = 0; this.width = 0;
@ -29,7 +29,7 @@ public abstract class ExtraMenu<T extends Block> implements Serializable, Keyboa
public abstract void close(); public abstract void close();
public boolean beforeRender(float delta, Caret caret) { public boolean beforeRender(final float delta, final Caret caret) {
final int[] l = caret.getLastLocation(); final int[] l = caret.getLastLocation();
final int[] cs = caret.getLastSize(); final int[] cs = caret.getLastSize();
location[0] = l[0] - block.getWidth() / 2 - width / 2; location[0] = l[0] - block.getWidth() / 2 - width / 2;

View File

@ -16,7 +16,7 @@ public class InputContext {
variableTypes.put(MathematicalSymbols.EULER_NUMBER, V_TYPE.CONSTANT); variableTypes.put(MathematicalSymbols.EULER_NUMBER, V_TYPE.CONSTANT);
} }
public InputContext(HashMap<Character, V_TYPE> variableTypes) { public InputContext(final HashMap<Character, V_TYPE> variableTypes) {
this.variableTypes = variableTypes; this.variableTypes = variableTypes;
} }
} }

View File

@ -17,7 +17,7 @@ public abstract class Block implements GraphicalElement {
protected int line; protected int line;
/** /**
* *
* @param r * @param r
* Graphic Renderer class. * Graphic Renderer class.
* @param x * @param x
@ -53,7 +53,7 @@ public abstract class Block implements GraphicalElement {
public int getLine() { public int getLine() {
return line; return line;
} }
public int getCaretDeltaPositionAfterCreation() { public int getCaretDeltaPositionAfterCreation() {
return 1; return 1;
} }

View File

@ -11,30 +11,30 @@ public class BlockChar extends Block {
private final char ch; private final char ch;
public BlockChar(char ch) { public BlockChar(final char ch) {
this.ch = ch; this.ch = ch;
recomputeDimensions(); recomputeDimensions();
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge); BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
r.glDrawCharLeft(x, y, ch); r.glDrawCharLeft(x, y, ch);
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
return false; return false;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
return false; return false;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
return null; return null;
} }
@ -46,7 +46,7 @@ public class BlockChar extends Block {
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
recomputeDimensions(); recomputeDimensions();
} }
@ -61,7 +61,7 @@ public class BlockChar extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) { public Feature toFeature(final MathContext context) {
return new FeatureChar(getChar()); return new FeatureChar(getChar());
} }

View File

@ -34,83 +34,78 @@ public class BlockContainer implements GraphicalElement {
autoMinimums = true; autoMinimums = true;
} }
public BlockContainer(boolean small) { public BlockContainer(final boolean small) {
this(small, BlockContainer.getDefaultCharWidth(small), BlockContainer.getDefaultCharHeight(small), true); this(small, BlockContainer.getDefaultCharWidth(small), BlockContainer.getDefaultCharHeight(small), true);
autoMinimums = true; autoMinimums = true;
} }
public BlockContainer(boolean small, ObjectArrayList<Block> content) { public BlockContainer(final boolean small, final ObjectArrayList<Block> content) {
this(small, BlockContainer.getDefaultCharWidth(small), BlockContainer.getDefaultCharHeight(small), content, true); this(small, BlockContainer.getDefaultCharWidth(small), BlockContainer.getDefaultCharHeight(small), content, true);
autoMinimums = true; autoMinimums = true;
} }
public BlockContainer(boolean small, boolean withBorder) { public BlockContainer(final boolean small, final boolean withBorder) {
this(small, BlockContainer.getDefaultCharWidth(small), BlockContainer.getDefaultCharHeight(small), withBorder); this(small, BlockContainer.getDefaultCharWidth(small), BlockContainer.getDefaultCharHeight(small), withBorder);
autoMinimums = true; autoMinimums = true;
} }
public BlockContainer(boolean small, int minWidth, int minHeight, boolean withBorder) { public BlockContainer(final boolean small, final int minWidth, final int minHeight, final boolean withBorder) {
this(small, minWidth, minHeight, new ObjectArrayList<>(), withBorder); this(small, minWidth, minHeight, new ObjectArrayList<>(), withBorder);
autoMinimums = false; autoMinimums = false;
} }
public BlockContainer(boolean small, int minWidth, int minHeight, ObjectArrayList<Block> content, boolean withBorder) { public BlockContainer(final boolean small, final int minWidth, final int minHeight, final ObjectArrayList<Block> content, final boolean withBorder) {
this.small = small; this.small = small;
this.minWidth = minWidth; this.minWidth = minWidth;
this.minHeight = minHeight; this.minHeight = minHeight;
this.withBorder = withBorder; this.withBorder = withBorder;
for (final Block b : content) { for (final Block b : content)
if (b.isSmall() != small) { if (b.isSmall() != small)
b.setSmall(small); b.setSmall(small);
}
}
this.content = content; this.content = content;
recomputeDimensions(); recomputeDimensions();
} }
public void addBlock(int position, Block b) { public void addBlock(final int position, final Block b) {
addBlockUnsafe(position, b); addBlockUnsafe(position, b);
recomputeDimensions(); recomputeDimensions();
} }
public void addBlockUnsafe(int position, Block b) { public void addBlockUnsafe(final int position, final Block b) {
if (b.isSmall() != small) { if (b.isSmall() != small)
b.setSmall(small); b.setSmall(small);
} if (position >= content.size())
if (position >= content.size()) {
content.add(b); content.add(b);
} else { else
content.add(position, b); content.add(position, b);
}
} }
public void appendBlock(Block b) { public void appendBlock(final Block b) {
appendBlockUnsafe(b); appendBlockUnsafe(b);
recomputeDimensions(); recomputeDimensions();
} }
public void appendBlockUnsafe(Block b) { public void appendBlockUnsafe(final Block b) {
if (b.isSmall() != small) { if (b.isSmall() != small)
b.setSmall(small); b.setSmall(small);
}
content.add(b); content.add(b);
} }
public void removeBlock(Block b) { public void removeBlock(final Block b) {
removeBlockUnsafe(b); removeBlockUnsafe(b);
recomputeDimensions(); recomputeDimensions();
} }
public void removeBlockUnsafe(Block b) { public void removeBlockUnsafe(final Block b) {
content.remove(b); content.remove(b);
} }
public void removeAt(int i) { public void removeAt(final int i) {
content.remove(i); content.remove(i);
recomputeDimensions(); recomputeDimensions();
} }
public BlockReference<?> getBlockAt(int i) { public BlockReference<?> getBlockAt(final int i) {
final Block b = content.get(i); final Block b = content.get(i);
return new BlockReference<>(b, i, this); return new BlockReference<>(b, i, this);
} }
@ -125,7 +120,7 @@ public class BlockContainer implements GraphicalElement {
} }
/** /**
* *
* @param ge * @param ge
* Graphic Engine class. * Graphic Engine class.
* @param r * @param r
@ -137,16 +132,14 @@ public class BlockContainer implements GraphicalElement {
* @param caret * @param caret
* Position of the caret. * Position of the caret.
*/ */
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
int paddingX = 1; int paddingX = 1;
if (caret.getRemaining() == 0) { if (caret.getRemaining() == 0)
if (content.size() > 0) { if (content.size() > 0)
BlockContainer.drawCaret(ge, r, caret, small, x, y + line - content.get(0).line, content.get(0).height); BlockContainer.drawCaret(ge, r, caret, small, x, y + line - content.get(0).line, content.get(0).height);
} else { else
BlockContainer.drawCaret(ge, r, caret, small, x, y, height); BlockContainer.drawCaret(ge, r, caret, small, x, y, height);
}
}
if (withBorder && content.size() == 0) { if (withBorder && content.size() == 0) {
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
@ -154,21 +147,19 @@ public class BlockContainer implements GraphicalElement {
r.glDrawLine(x + paddingX, y, x + paddingX, y + height - 1); r.glDrawLine(x + paddingX, y, x + paddingX, y + height - 1);
r.glDrawLine(x + paddingX + width - 1, y, x + paddingX + width - 1, y + height - 1); r.glDrawLine(x + paddingX + width - 1, y, x + paddingX + width - 1, y + height - 1);
r.glDrawLine(x + paddingX, y + height - 1, x + paddingX + width - 1, y + height - 1); r.glDrawLine(x + paddingX, y + height - 1, x + paddingX + width - 1, y + height - 1);
} else { } else
for (final Block b : content) { for (final Block b : content) {
caret.skip(1); caret.skip(1);
b.draw(ge, r, x + paddingX, y + line - b.line, caret); b.draw(ge, r, x + paddingX, y + line - b.line, caret);
paddingX += b.getWidth(); paddingX += b.getWidth();
if (caret.getRemaining() == 0) { if (caret.getRemaining() == 0)
BlockContainer.drawCaret(ge, r, caret, small, x + paddingX, y + line - b.line, b.height); BlockContainer.drawCaret(ge, r, caret, small, x + paddingX, y + line - b.line, b.height);
}
paddingX += 1; paddingX += 1;
} }
}
caret.skip(1); caret.skip(1);
} }
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
boolean added = false; boolean added = false;
if (caret.getRemaining() == 0) { if (caret.getRemaining() == 0) {
@ -187,13 +178,12 @@ public class BlockContainer implements GraphicalElement {
} }
} }
caret.skip(1); caret.skip(1);
if (added) { if (added)
recomputeDimensions(); recomputeDimensions();
}
return added; return added;
} }
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
boolean removed = false; boolean removed = false;
int pos = 0; int pos = 0;
@ -202,20 +192,19 @@ public class BlockContainer implements GraphicalElement {
pos++; pos++;
final int deltaCaret = caret.getRemaining(); final int deltaCaret = caret.getRemaining();
removed = removed | b.delBlock(caret); removed = removed | b.delBlock(caret);
if (caret.getRemaining() == 0 || (removed == false && deltaCaret >= 0 && caret.getRemaining() < 0)) { if (caret.getRemaining() == 0 || removed == false && deltaCaret >= 0 && caret.getRemaining() < 0) {
removeAt(pos - 1); removeAt(pos - 1);
caret.setPosition(caret.getPosition() - deltaCaret); caret.setPosition(caret.getPosition() - deltaCaret);
removed = true; removed = true;
} }
} }
caret.skip(1); caret.skip(1);
if (removed) { if (removed)
recomputeDimensions(); recomputeDimensions();
}
return removed; return removed;
} }
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
BlockReference<?> block = null; BlockReference<?> block = null;
int pos = 0; int pos = 0;
@ -225,10 +214,9 @@ public class BlockContainer implements GraphicalElement {
final int deltaCaret = caret.getRemaining(); final int deltaCaret = caret.getRemaining();
block = b.getBlock(caret); block = b.getBlock(caret);
if (block != null) { if (block != null)
return block; return block;
} if (caret.getRemaining() == 0 || deltaCaret >= 0 && caret.getRemaining() < 0) {
if (caret.getRemaining() == 0 || (deltaCaret >= 0 && caret.getRemaining() < 0)) {
block = getBlockAt(pos - 1); block = getBlockAt(pos - 1);
return block; return block;
} }
@ -249,29 +237,25 @@ public class BlockContainer implements GraphicalElement {
final int bl = b.getLine(); final int bl = b.getLine();
final int bh = b.getHeight(); final int bh = b.getHeight();
final int bh2 = bh - bl; final int bh2 = bh - bl;
if (bl > l) { if (bl > l)
l = bl; l = bl;
} if (bh2 > h2)
if (bh2 > h2) {
h2 = bh2; h2 = bh2;
}
} }
if (content.size() > 0) { if (content.size() > 0)
w -= 1; w -= 1;
}
h = h2 + l; h = h2 + l;
line = l; line = l;
if (w > minWidth) { if (w > minWidth)
width = w; width = w;
} else { else
width = minWidth; width = minWidth;
} if (h > minHeight)
if (h > minHeight) {
height = h; height = h;
} else { else {
height = minHeight; height = minHeight;
line = height / 2; line = height / 2;
} }
@ -296,53 +280,53 @@ public class BlockContainer implements GraphicalElement {
private static final int[] defFontSizes = new int[4]; private static final int[] defFontSizes = new int[4];
private static final int defColor = 0xFF000000; private static final int defColor = 0xFF000000;
public static void initializeFonts(BinaryFont big, BinaryFont small) { public static void initializeFonts(final BinaryFont big, final BinaryFont small) {
defFonts[0] = big; BlockContainer.defFonts[0] = big;
defFonts[1] = small; BlockContainer.defFonts[1] = small;
defFontSizes[0] = big.getCharacterWidth(); BlockContainer.defFontSizes[0] = big.getCharacterWidth();
defFontSizes[1] = big.getCharacterHeight(); BlockContainer.defFontSizes[1] = big.getCharacterHeight();
defFontSizes[2] = small.getCharacterWidth(); BlockContainer.defFontSizes[2] = small.getCharacterWidth();
defFontSizes[3] = small.getCharacterHeight(); BlockContainer.defFontSizes[3] = small.getCharacterHeight();
initialized = true; BlockContainer.initialized = true;
} }
public static BinaryFont getDefaultFont(boolean small) { public static BinaryFont getDefaultFont(final boolean small) {
checkInitialized(); BlockContainer.checkInitialized();
return defFonts[small ? 1 : 0]; return BlockContainer.defFonts[small ? 1 : 0];
} }
public static int getDefaultColor() { public static int getDefaultColor() {
return defColor; return BlockContainer.defColor;
} }
public static int getDefaultCharWidth(boolean b) { public static int getDefaultCharWidth(final boolean b) {
checkInitialized(); BlockContainer.checkInitialized();
return defFontSizes[b ? 2 : 0]; return BlockContainer.defFontSizes[b ? 2 : 0];
} }
public static int getDefaultCharHeight(boolean b) { public static int getDefaultCharHeight(final boolean b) {
checkInitialized(); BlockContainer.checkInitialized();
return defFontSizes[b ? 3 : 1]; return BlockContainer.defFontSizes[b ? 3 : 1];
} }
public static void drawCaret(GraphicEngine ge, Renderer r, Caret caret, boolean small, int x, int y, int height) { public static void drawCaret(final GraphicEngine ge, final Renderer r, final Caret caret, final boolean small,
final int x, final int y, final int height) {
if (caret.getState() == CaretState.VISIBLE_ON) { if (caret.getState() == CaretState.VISIBLE_ON) {
r.glColor(getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
r.glFillColor(x, y, small ? 2 : 3, height); r.glFillColor(x, y, small ? 2 : 3, height);
caret.setLastLocation(x, y); caret.setLastLocation(x, y);
caret.setLastSize(small ? 2 : 3, height); caret.setLastSize(small ? 2 : 3, height);
} }
} }
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
if (autoMinimums) { if (autoMinimums) {
minWidth = BlockContainer.getDefaultCharWidth(small); minWidth = BlockContainer.getDefaultCharWidth(small);
minHeight = BlockContainer.getDefaultCharHeight(small); minHeight = BlockContainer.getDefaultCharHeight(small);
} }
for (final Block b : content) { for (final Block b : content)
b.setSmall(small); b.setSmall(small);
}
recomputeDimensions(); recomputeDimensions();
} }
@ -351,28 +335,25 @@ public class BlockContainer implements GraphicalElement {
} }
private static void checkInitialized() { private static void checkInitialized() {
if (!initialized) { if (!BlockContainer.initialized)
Engine.getPlatform().throwNewExceptionInInitializerError("Please initialize BlockContainer by running the method BlockContainer.initialize(...) first!"); Engine.getPlatform().throwNewExceptionInInitializerError("Please initialize BlockContainer by running the method BlockContainer.initialize(...) first!");
}
} }
public int computeCaretMaxBound() { public int computeCaretMaxBound() {
int maxpos = 0; int maxpos = 0;
for (final Block b : content) { for (final Block b : content)
maxpos += 1 + b.computeCaretMaxBound(); maxpos += 1 + b.computeCaretMaxBound();
}
return maxpos + 1; return maxpos + 1;
} }
public Function toFunction(MathContext context) throws Error { public Function toFunction(final MathContext context) throws Error {
final ObjectArrayList<Block> blocks = getContent(); final ObjectArrayList<Block> blocks = getContent();
final ObjectArrayList<Feature> blockFeatures = new ObjectArrayList<>(); final ObjectArrayList<Feature> blockFeatures = new ObjectArrayList<>();
for (final Block block : blocks) { for (final Block block : blocks) {
final Feature blockFeature = block.toFeature(context); final Feature blockFeature = block.toFeature(context);
if (blockFeature == null) { if (blockFeature == null)
throw new Error(Errors.NOT_IMPLEMENTED, "The block " + block.getClass().getSimpleName() + " isn't a known Block"); throw new Error(Errors.NOT_IMPLEMENTED, "The block " + block.getClass().getSimpleName() + " isn't a known Block");
}
blockFeatures.add(blockFeature); blockFeatures.add(blockFeature);
} }

View File

@ -25,7 +25,7 @@ public class BlockDivision extends Block {
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge); BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
containerUp.draw(ge, r, x + 1 + paddingLeftUpper, y, caret); containerUp.draw(ge, r, x + 1 + paddingLeftUpper, y, caret);
@ -35,34 +35,31 @@ public class BlockDivision extends Block {
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
boolean added = false; boolean added = false;
added = added | containerUp.putBlock(caret, newBlock); added = added | containerUp.putBlock(caret, newBlock);
added = added | containerDown.putBlock(caret, newBlock); added = added | containerDown.putBlock(caret, newBlock);
if (added) { if (added)
recomputeDimensions(); recomputeDimensions();
}
return added; return added;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
boolean removed = false; boolean removed = false;
removed = removed | containerUp.delBlock(caret); removed = removed | containerUp.delBlock(caret);
removed = removed | containerDown.delBlock(caret); removed = removed | containerDown.delBlock(caret);
if (removed) { if (removed)
recomputeDimensions(); recomputeDimensions();
}
return removed; return removed;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
BlockReference<?> bl = null; BlockReference<?> bl = null;
bl = containerUp.getBlock(caret); bl = containerUp.getBlock(caret);
if (bl != null) { if (bl != null)
return bl; return bl;
}
bl = containerDown.getBlock(caret); bl = containerDown.getBlock(caret);
return bl; return bl;
} }
@ -92,7 +89,7 @@ public class BlockDivision extends Block {
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
containerUp.setSmall(small); containerUp.setSmall(small);
containerDown.setSmall(small); containerDown.setSmall(small);
@ -113,7 +110,7 @@ public class BlockDivision extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
final Function upper = getUpperContainer().toFunction(context); final Function upper = getUpperContainer().toFunction(context);
final Function lower = getLowerContainer().toFunction(context); final Function lower = getLowerContainer().toFunction(context);
return new FeatureDivision(upper, lower); return new FeatureDivision(upper, lower);

View File

@ -9,7 +9,7 @@ public class BlockExponentialNotation extends BlockPower {
private int bh; private int bh;
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge); BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
r.glDrawStringLeft(x, y + height - bh, ""); r.glDrawStringLeft(x, y + height - bh, "");

View File

@ -33,19 +33,18 @@ public class BlockLogarithm extends Block {
recomputeDimensions(); recomputeDimensions();
} }
public BlockLogarithm(ObjectArrayList<Block> blocks) { public BlockLogarithm(final ObjectArrayList<Block> blocks) {
containerBase = new BlockContainer(true); containerBase = new BlockContainer(true);
containerNumber = new BlockContainer(false, blocks); containerNumber = new BlockContainer(false, blocks);
recomputeDimensions(); recomputeDimensions();
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge); BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
if (prefix != null) { if (prefix != null)
r.glDrawStringLeft(x + 1, y + line - chh / 2, prefix); r.glDrawStringLeft(x + 1, y + line - chh / 2, prefix);
}
r.glDrawCharLeft(x + bw + prw, y + toph, '╭'); r.glDrawCharLeft(x + bw + prw, y + toph, '╭');
r.glDrawCharLeft(x + bw + prw, y + toph + nmbh - chh, '╰'); r.glDrawCharLeft(x + bw + prw, y + toph + nmbh - chh, '╰');
if (small) { if (small) {
@ -64,45 +63,41 @@ public class BlockLogarithm extends Block {
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
boolean added = false; boolean added = false;
added = added | containerBase.putBlock(caret, newBlock); added = added | containerBase.putBlock(caret, newBlock);
added = added | containerNumber.putBlock(caret, newBlock); added = added | containerNumber.putBlock(caret, newBlock);
if (added) { if (added)
recomputeDimensions(); recomputeDimensions();
}
return added; return added;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
boolean removed = false; boolean removed = false;
removed = removed | containerBase.delBlock(caret); removed = removed | containerBase.delBlock(caret);
removed = removed | containerNumber.delBlock(caret); removed = removed | containerNumber.delBlock(caret);
if (removed) { if (removed)
recomputeDimensions(); recomputeDimensions();
}
return removed; return removed;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
BlockReference<?> bl = null; BlockReference<?> bl = null;
bl = containerBase.getBlock(caret); bl = containerBase.getBlock(caret);
if (bl != null) { if (bl != null)
return bl; return bl;
}
bl = containerNumber.getBlock(caret); bl = containerNumber.getBlock(caret);
return bl; return bl;
} }
@Override @Override
public void recomputeDimensions() { public void recomputeDimensions() {
if (prefix == null) { if (prefix == null)
prw = 0; prw = 0;
} else { else
prw = 1 + BlockContainer.getDefaultCharWidth(small) * prefix.length(); prw = 1 + BlockContainer.getDefaultCharWidth(small) * prefix.length();
}
bw = containerBase.getWidth(); bw = containerBase.getWidth();
bh = containerBase.getHeight(); bh = containerBase.getHeight();
bl = containerBase.getLine(); bl = containerBase.getLine();
@ -115,25 +110,23 @@ public class BlockLogarithm extends Block {
if (bl > nmbh) { if (bl > nmbh) {
toph = bl - nmbh; toph = bl - nmbh;
line = toph + nl; line = toph + nl;
if (bl + (bh - bl) > toph + nmbh) { if (bl + bh - bl > toph + nmbh)
height = bl + (bh - bl); height = bl + bh - bl;
} else { else
height = toph + nmbh; height = toph + nmbh;
}
} else { } else {
System.out.println("b"); System.out.println("b");
toph = 0; toph = 0;
line = toph + nl; line = toph + nl;
if (nmbh + bh - bl > toph + nmbh) { if (nmbh + bh - bl > toph + nmbh)
height = nmbh + (bh - bl); height = nmbh + bh - bl;
} else { else
height = toph + nmbh; height = toph + nmbh;
}
} }
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
containerBase.setSmall(small); containerBase.setSmall(small);
containerNumber.setSmall(small); containerNumber.setSmall(small);
@ -154,7 +147,7 @@ public class BlockLogarithm extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
final Function base = getBaseContainer().toFunction(context); final Function base = getBaseContainer().toFunction(context);
final Function number = getNumberContainer().toFunction(context); final Function number = getNumberContainer().toFunction(context);
return new FeatureLogarithm(base, number); return new FeatureLogarithm(base, number);

View File

@ -2,7 +2,7 @@ package it.cavallium.warppi.gui.expression.blocks;
public class BlockNumericChar extends BlockChar { public class BlockNumericChar extends BlockChar {
public BlockNumericChar(char ch) { public BlockNumericChar(final char ch) {
super(ch); super(ch);
} }

View File

@ -12,12 +12,12 @@ public class BlockParenthesis extends BlockParenthesisAbstract {
super(); super();
} }
public BlockParenthesis(ObjectArrayList<Block> blocks) { public BlockParenthesis(final ObjectArrayList<Block> blocks) {
super(blocks); super(blocks);
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
final Function cont = getNumberContainer().toFunction(context); final Function cont = getNumberContainer().toFunction(context);
return new FeatureParenthesis(cont); return new FeatureParenthesis(cont);
} }

View File

@ -17,7 +17,7 @@ public abstract class BlockParenthesisAbstract extends Block {
private int chw; private int chw;
private int chh; private int chh;
protected BlockParenthesisAbstract(String prefix) { protected BlockParenthesisAbstract(final String prefix) {
containerNumber = new BlockContainer(false); containerNumber = new BlockContainer(false);
this.prefix = prefix; this.prefix = prefix;
@ -30,19 +30,18 @@ public abstract class BlockParenthesisAbstract extends Block {
recomputeDimensions(); recomputeDimensions();
} }
public BlockParenthesisAbstract(ObjectArrayList<Block> blocks) { public BlockParenthesisAbstract(final ObjectArrayList<Block> blocks) {
containerNumber = new BlockContainer(false, blocks); containerNumber = new BlockContainer(false, blocks);
prefix = null; prefix = null;
recomputeDimensions(); recomputeDimensions();
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge); BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
if (prefix != null) { if (prefix != null)
r.glDrawStringLeft(x + 1, y + line - chh / 2, prefix); r.glDrawStringLeft(x + 1, y + line - chh / 2, prefix);
}
r.glDrawCharLeft(x + prw, y, '╭'); r.glDrawCharLeft(x + prw, y, '╭');
r.glDrawCharLeft(x + prw, y + height - chh, '╰'); r.glDrawCharLeft(x + prw, y + height - chh, '╰');
if (small) { if (small) {
@ -58,37 +57,34 @@ public abstract class BlockParenthesisAbstract extends Block {
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
boolean added = false; boolean added = false;
added = added | containerNumber.putBlock(caret, newBlock); added = added | containerNumber.putBlock(caret, newBlock);
if (added) { if (added)
recomputeDimensions(); recomputeDimensions();
}
return added; return added;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
boolean removed = false; boolean removed = false;
removed = removed | containerNumber.delBlock(caret); removed = removed | containerNumber.delBlock(caret);
if (removed) { if (removed)
recomputeDimensions(); recomputeDimensions();
}
return removed; return removed;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
return containerNumber.getBlock(caret); return containerNumber.getBlock(caret);
} }
@Override @Override
public void recomputeDimensions() { public void recomputeDimensions() {
if (prefix == null) { if (prefix == null)
prw = 0; prw = 0;
} else { else
prw = 1 + BlockContainer.getDefaultCharWidth(small) * prefix.length() + 2; prw = 1 + BlockContainer.getDefaultCharWidth(small) * prefix.length() + 2;
}
chw = BlockContainer.getDefaultCharWidth(small); chw = BlockContainer.getDefaultCharWidth(small);
chh = BlockContainer.getDefaultCharHeight(small); chh = BlockContainer.getDefaultCharHeight(small);
width = prw + chw + containerNumber.getWidth() + chw + 3; width = prw + chw + containerNumber.getWidth() + chw + 3;
@ -97,7 +93,7 @@ public abstract class BlockParenthesisAbstract extends Block {
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
containerNumber.setSmall(small); containerNumber.setSmall(small);
recomputeDimensions(); recomputeDimensions();

View File

@ -19,34 +19,32 @@ public class BlockPower extends Block {
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(true).use(ge); BlockContainer.getDefaultFont(true).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
containerExponent.draw(ge, r, x, y, caret); containerExponent.draw(ge, r, x, y, caret);
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
boolean added = false; boolean added = false;
added = added | containerExponent.putBlock(caret, newBlock); added = added | containerExponent.putBlock(caret, newBlock);
if (added) { if (added)
recomputeDimensions(); recomputeDimensions();
}
return added; return added;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
boolean removed = false; boolean removed = false;
removed = removed | containerExponent.delBlock(caret); removed = removed | containerExponent.delBlock(caret);
if (removed) { if (removed)
recomputeDimensions(); recomputeDimensions();
}
return removed; return removed;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
return containerExponent.getBlock(caret); return containerExponent.getBlock(caret);
} }
@ -60,7 +58,7 @@ public class BlockPower extends Block {
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
containerExponent.setSmall(true); containerExponent.setSmall(true);
recomputeDimensions(); recomputeDimensions();
@ -76,7 +74,7 @@ public class BlockPower extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
final Function exp = getExponentContainer().toFunction(context); final Function exp = getExponentContainer().toFunction(context);
return new FeaturePowerChar(exp); return new FeaturePowerChar(exp);
} }

View File

@ -18,41 +18,39 @@ public class BlockPower2 extends Block {
containerExponent.addBlock(0, new BlockNumericChar('2')); containerExponent.addBlock(0, new BlockNumericChar('2'));
recomputeDimensions(); recomputeDimensions();
} }
@Override @Override
public int getCaretDeltaPositionAfterCreation() { public int getCaretDeltaPositionAfterCreation() {
return 3; return 3;
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(true).use(ge); BlockContainer.getDefaultFont(true).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
containerExponent.draw(ge, r, x, y, caret); containerExponent.draw(ge, r, x, y, caret);
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
boolean added = false; boolean added = false;
added = added | containerExponent.putBlock(caret, newBlock); added = added | containerExponent.putBlock(caret, newBlock);
if (added) { if (added)
recomputeDimensions(); recomputeDimensions();
}
return added; return added;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
boolean removed = false; boolean removed = false;
removed = removed | containerExponent.delBlock(caret); removed = removed | containerExponent.delBlock(caret);
if (removed) { if (removed)
recomputeDimensions(); recomputeDimensions();
}
return removed; return removed;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
return containerExponent.getBlock(caret); return containerExponent.getBlock(caret);
} }
@ -66,7 +64,7 @@ public class BlockPower2 extends Block {
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
containerExponent.setSmall(true); containerExponent.setSmall(true);
recomputeDimensions(); recomputeDimensions();
@ -82,7 +80,7 @@ public class BlockPower2 extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
final Function exp = getExponentContainer().toFunction(context); final Function exp = getExponentContainer().toFunction(context);
return new FeaturePowerChar(exp); return new FeaturePowerChar(exp);
} }

View File

@ -5,7 +5,7 @@ public class BlockReference<T extends Block> {
private final BlockContainer container; private final BlockContainer container;
private final int blockPosition; private final int blockPosition;
public BlockReference(T block, int blockPosition, BlockContainer container) { public BlockReference(final T block, final int blockPosition, final BlockContainer container) {
this.block = block; this.block = block;
this.blockPosition = blockPosition; this.blockPosition = blockPosition;
this.container = container; this.container = container;
@ -39,14 +39,13 @@ public class BlockReference<T extends Block> {
return isInsideBounds(this.blockPosition - 1); return isInsideBounds(this.blockPosition - 1);
} }
private BlockReference<?> getBlockAtSafe(int i) { private BlockReference<?> getBlockAtSafe(final int i) {
if (isInsideBounds(i)) { if (isInsideBounds(i))
return container.getBlockAt(i); return container.getBlockAt(i);
}
return null; return null;
} }
private boolean isInsideBounds(int i) { private boolean isInsideBounds(final int i) {
return i < container.getSize() && i >= 0; return i < container.getSize() && i >= 0;
} }

View File

@ -12,7 +12,7 @@ public class BlockSine extends BlockParenthesisAbstract {
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
final Function cont = getNumberContainer().toFunction(context); final Function cont = getNumberContainer().toFunction(context);
return new FeatureSine(cont); return new FeatureSine(cont);
} }

View File

@ -21,7 +21,7 @@ public class BlockSquareRoot extends Block {
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge); BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
r.glDrawLine(x, y + height - 10 + 1, x, y + height - 10 + 2); // / r.glDrawLine(x, y + height - 10 + 1, x, y + height - 10 + 2); // /
@ -36,27 +36,25 @@ public class BlockSquareRoot extends Block {
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
boolean added = false; boolean added = false;
added = added | containerNumber.putBlock(caret, newBlock); added = added | containerNumber.putBlock(caret, newBlock);
if (added) { if (added)
recomputeDimensions(); recomputeDimensions();
}
return added; return added;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
boolean removed = false; boolean removed = false;
removed = removed | containerNumber.delBlock(caret); removed = removed | containerNumber.delBlock(caret);
if (removed) { if (removed)
recomputeDimensions(); recomputeDimensions();
}
return removed; return removed;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
return containerNumber.getBlock(caret); return containerNumber.getBlock(caret);
} }
@ -70,12 +68,12 @@ public class BlockSquareRoot extends Block {
line = 3 + l1; line = 3 + l1;
if (height < 9) { if (height < 9) {
height = 9; height = 9;
line += (9 - (3 + h1)); line += 9 - (3 + h1);
} }
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
containerNumber.setSmall(small); containerNumber.setSmall(small);
recomputeDimensions(); recomputeDimensions();
@ -91,7 +89,7 @@ public class BlockSquareRoot extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
final Function contnt = getNumberContainer().toFunction(context); final Function contnt = getNumberContainer().toFunction(context);
return new FeatureSquareRoot(contnt); return new FeatureSquareRoot(contnt);
} }

View File

@ -15,24 +15,24 @@ public class BlockUndefined extends Block {
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge); BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor()); r.glColor(BlockContainer.getDefaultColor());
r.glDrawStringLeft(x, y, "UNDEFINED"); r.glDrawStringLeft(x, y, "UNDEFINED");
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
return false; return false;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
return false; return false;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
return null; return null;
} }
@ -44,7 +44,7 @@ public class BlockUndefined extends Block {
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
recomputeDimensions(); recomputeDimensions();
} }
@ -55,7 +55,7 @@ public class BlockUndefined extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) { public Feature toFeature(final MathContext context) {
return new FeatureChar(MathematicalSymbols.UNDEFINED); return new FeatureChar(MathematicalSymbols.UNDEFINED);
} }

View File

@ -26,11 +26,11 @@ public class BlockVariable extends Block {
private BlockVariable typeDirtyID; private BlockVariable typeDirtyID;
private final boolean typeLocked; private final boolean typeLocked;
public BlockVariable(InputContext ic, char ch) { public BlockVariable(final InputContext ic, final char ch) {
this(ic, ch, false); this(ic, ch, false);
} }
public BlockVariable(InputContext ic, char ch, boolean typeLocked) { public BlockVariable(final InputContext ic, final char ch, final boolean typeLocked) {
this.ic = ic; this.ic = ic;
this.ch = ch; this.ch = ch;
type = V_TYPE.VARIABLE; type = V_TYPE.VARIABLE;
@ -44,13 +44,11 @@ public class BlockVariable extends Block {
private void retrieveValue() { private void retrieveValue() {
type = ic.variableTypes.get(ch); type = ic.variableTypes.get(ch);
if (type == null) { if (type == null)
type = V_TYPE.VARIABLE; type = V_TYPE.VARIABLE;
}
typeDirtyID = ic.variableTypeDirtyID; typeDirtyID = ic.variableTypeDirtyID;
if (menu != null) { if (menu != null)
menu.mustRefreshMenu = true; menu.mustRefreshMenu = true;
}
mustRefresh = true; mustRefresh = true;
System.out.println("retrieve:" + type.toString()); System.out.println("retrieve:" + type.toString());
} }
@ -68,10 +66,9 @@ public class BlockVariable extends Block {
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
if (ic.variableTypeDirtyID != typeDirtyID) { if (ic.variableTypeDirtyID != typeDirtyID)
retrieveValue(); retrieveValue();
}
if (mustRefresh) { if (mustRefresh) {
mustRefresh = false; mustRefresh = false;
switch (type) { switch (type) {
@ -94,17 +91,17 @@ public class BlockVariable extends Block {
} }
@Override @Override
public boolean putBlock(Caret caret, Block newBlock) { public boolean putBlock(final Caret caret, final Block newBlock) {
return false; return false;
} }
@Override @Override
public boolean delBlock(Caret caret) { public boolean delBlock(final Caret caret) {
return false; return false;
} }
@Override @Override
public BlockReference<?> getBlock(Caret caret) { public BlockReference<?> getBlock(final Caret caret) {
return null; return null;
} }
@ -116,7 +113,7 @@ public class BlockVariable extends Block {
} }
@Override @Override
public void setSmall(boolean small) { public void setSmall(final boolean small) {
this.small = small; this.small = small;
recomputeDimensions(); recomputeDimensions();
} }
@ -140,7 +137,7 @@ public class BlockVariable extends Block {
String text = ""; String text = "";
boolean mustRefreshMenu = true; boolean mustRefreshMenu = true;
public VariableMenu(BlockVariable var) { public VariableMenu(final BlockVariable var) {
super(var); super(var);
} }
@ -155,7 +152,7 @@ public class BlockVariable extends Block {
public void close() {} public void close() {}
@Override @Override
public boolean onKeyPressed(KeyPressedEvent k) { public boolean onKeyPressed(final KeyPressedEvent k) {
switch (k.getKey()) { switch (k.getKey()) {
case LEFT: case LEFT:
case UP: case UP:
@ -200,12 +197,12 @@ public class BlockVariable extends Block {
} }
@Override @Override
public boolean onKeyReleased(KeyReleasedEvent k) { public boolean onKeyReleased(final KeyReleasedEvent k) {
return false; return false;
} }
@Override @Override
public boolean beforeRender(float delta, Caret caret) { public boolean beforeRender(final float delta, final Caret caret) {
if (mustRefreshMenu) { if (mustRefreshMenu) {
mustRefreshMenu = false; mustRefreshMenu = false;
text = block.type.toString(); text = block.type.toString();
@ -220,24 +217,20 @@ public class BlockVariable extends Block {
} }
@Override @Override
public void draw(GraphicEngine ge, Renderer r, Caret caret) { public void draw(final GraphicEngine ge, final Renderer r, final Caret caret) {
r.glColor3f(1.0f, 1.0f, 1.0f); r.glColor3f(1.0f, 1.0f, 1.0f);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(ge); Engine.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(ge);
int popupX = location[0]; int popupX = location[0];
int popupY = location[1]; int popupY = location[1];
if (popupX < 0) { if (popupX < 0)
popupX = 0; popupX = 0;
} if (popupY < 0)
if (popupY < 0) {
popupY = 0; popupY = 0;
}
final int[] screenSize = ge.getSize(); final int[] screenSize = ge.getSize();
if (popupX + width >= screenSize[0]) { if (popupX + width >= screenSize[0])
popupX = screenSize[0] - width - 1; popupX = screenSize[0] - width - 1;
} if (popupY + height >= screenSize[1])
if (popupY + height >= screenSize[1]) {
popupY = screenSize[1] - height - 1; popupY = screenSize[1] - height - 1;
}
r.glFillRect(location[0] + width / 2 - 5, popupY + 1, 10, 5, 163, 16, 10, 5); r.glFillRect(location[0] + width / 2 - 5, popupY + 1, 10, 5, 163, 16, 10, 5);
r.glFillColor(popupX, popupY + 5, width, height); r.glFillColor(popupX, popupY + 5, width, height);
r.glFillColor(popupX + 2, popupY + 4, width - 4, height + 2); r.glFillColor(popupX + 2, popupY + 4, width - 4, height + 2);
@ -252,7 +245,7 @@ public class BlockVariable extends Block {
} }
@Override @Override
public Feature toFeature(MathContext context) throws Error { public Feature toFeature(final MathContext context) throws Error {
return new FeatureVariable(ch, type); return new FeatureVariable(ch, type);
} }
} }

View File

@ -16,20 +16,20 @@ public class InlineInputContainer extends InputContainer {
super(); super();
} }
public InlineInputContainer(InputContext ic) { public InlineInputContainer(final InputContext ic) {
super(ic); super(ic);
} }
public InlineInputContainer(InputContext ic, boolean small) { public InlineInputContainer(final InputContext ic, final boolean small) {
super(ic, small); super(ic, small);
} }
public InlineInputContainer(InputContext ic, boolean small, int minWidth, int minHeight) { public InlineInputContainer(final InputContext ic, final boolean small, final int minWidth, final int minHeight) {
super(ic, small, minWidth, minHeight); super(ic, small, minWidth, minHeight);
} }
@Override @Override
public Block parseChar(char c) { public Block parseChar(final char c) {
return new BlockChar(c); return new BlockChar(c);
} }
} }

View File

@ -42,26 +42,26 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
this(new InputContext()); this(new InputContext());
} }
public InputContainer(InputContext ic) { public InputContainer(final InputContext ic) {
this(ic, false); this(ic, false);
} }
public InputContainer(InputContext ic, boolean small) { public InputContainer(final InputContext ic, final boolean small) {
this(ic, small, 0, 0); this(ic, small, 0, 0);
} }
public InputContainer(InputContext ic, boolean small, int minWidth, int minHeight) { public InputContainer(final InputContext ic, final boolean small, final int minWidth, final int minHeight) {
inputContext = ic; inputContext = ic;
caret = new Caret(CaretState.VISIBLE_ON, 0); caret = new Caret(CaretState.VISIBLE_ON, 0);
root = new BlockContainer(small, false); root = new BlockContainer(small, false);
} }
public void typeChar(char c) { public void typeChar(final char c) {
final Block b = parseChar(c); final Block b = parseChar(c);
typeBlock(b); typeBlock(b);
} }
public void typeBlock(Block b) { public void typeBlock(final Block b) {
if (b != null) { if (b != null) {
caret.resetRemaining(); caret.resetRemaining();
if (root.putBlock(caret, b)) { if (root.putBlock(caret, b)) {
@ -75,15 +75,14 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
closeExtra(); closeExtra();
} }
public void typeChar(String c) { public void typeChar(final String c) {
typeChar(c.charAt(0)); typeChar(c.charAt(0));
} }
public void del() { public void del() {
caret.resetRemaining(); caret.resetRemaining();
if (root.delBlock(caret)) { if (root.delBlock(caret))
root.recomputeDimensions(); root.recomputeDimensions();
}
if (caret.getPosition() > 0) { if (caret.getPosition() > 0) {
caret.setPosition(caret.getPosition() - 1); caret.setPosition(caret.getPosition() - 1);
maxPosition = root.computeCaretMaxBound(); maxPosition = root.computeCaretMaxBound();
@ -101,11 +100,10 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
public void moveLeft() { public void moveLeft() {
final int curPos = caret.getPosition(); final int curPos = caret.getPosition();
if (curPos > 0) { if (curPos > 0)
caret.setPosition(curPos - 1); caret.setPosition(curPos - 1);
} else { else
caret.setPosition(maxPosition - 1); caret.setPosition(maxPosition - 1);
}
caret.turnOn(); caret.turnOn();
caretTime = 0; caretTime = 0;
closeExtra(); closeExtra();
@ -113,11 +111,10 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
public void moveRight() { public void moveRight() {
final int curPos = caret.getPosition(); final int curPos = caret.getPosition();
if (curPos + 1 < maxPosition) { if (curPos + 1 < maxPosition)
caret.setPosition(curPos + 1); caret.setPosition(curPos + 1);
} else { else
caret.setPosition(0); caret.setPosition(0);
}
caret.turnOn(); caret.turnOn();
caretTime = 0; caretTime = 0;
closeExtra(); closeExtra();
@ -144,31 +141,29 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
} }
/** /**
* *
* @param delta * @param delta
* Time, in seconds * Time, in seconds
* @return true if something changed * @return true if something changed
*/ */
public boolean beforeRender(float delta) { public boolean beforeRender(final float delta) {
boolean somethingChanged = false; boolean somethingChanged = false;
caretTime += delta; caretTime += delta;
if (caretTime >= CARET_DURATION) { if (caretTime >= InputContainer.CARET_DURATION)
while (caretTime >= CARET_DURATION) { while (caretTime >= InputContainer.CARET_DURATION) {
caretTime -= CARET_DURATION; caretTime -= InputContainer.CARET_DURATION;
caret.flipState(); caret.flipState();
somethingChanged = true; somethingChanged = true;
} }
}
if (extra != null) { if (extra != null)
somethingChanged = somethingChanged | extra.beforeRender(delta, caret); somethingChanged = somethingChanged | extra.beforeRender(delta, caret);
}
return somethingChanged; return somethingChanged;
} }
/** /**
* *
* @param ge * @param ge
* Graphic Engine class. * Graphic Engine class.
* @param r * @param r
@ -178,12 +173,11 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
* @param y * @param y
* Position relative to the window. * Position relative to the window.
*/ */
public void draw(GraphicEngine ge, Renderer r, int x, int y) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y) {
caret.resetRemaining(); caret.resetRemaining();
root.draw(ge, r, x, y, caret); root.draw(ge, r, x, y, caret);
if (extra != null) { if (extra != null)
extra.draw(ge, r, caret); extra.draw(ge, r, caret);
}
} }
public void clear() { public void clear() {
@ -201,16 +195,15 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
return maxPosition; return maxPosition;
} }
public void setCaretPosition(int pos) { public void setCaretPosition(final int pos) {
if (pos > 0 && pos < maxPosition) { if (pos > 0 && pos < maxPosition)
caret.setPosition(pos); caret.setPosition(pos);
}
caret.turnOn(); caret.turnOn();
caretTime = 0; caretTime = 0;
closeExtra(); closeExtra();
} }
public void setParsed(boolean parsed) { public void setParsed(final boolean parsed) {
this.parsed = parsed; this.parsed = parsed;
} }
@ -220,7 +213,7 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
/** /**
* <strong>WARNING! DO NOT MODIFY THIS ARRAY!!!</strong> * <strong>WARNING! DO NOT MODIFY THIS ARRAY!!!</strong>
* *
* @return an arraylist representing the content * @return an arraylist representing the content
*/ */
public ObjectArrayList<Block> getContent() { public ObjectArrayList<Block> getContent() {
@ -232,9 +225,8 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
final BlockReference<?> selectedBlock = getSelectedBlock(); final BlockReference<?> selectedBlock = getSelectedBlock();
if (selectedBlock != null) { if (selectedBlock != null) {
extra = selectedBlock.get().getExtraMenu(); extra = selectedBlock.get().getExtraMenu();
if (extra != null) { if (extra != null)
extra.open(); extra.open();
}
} }
} else { } else {
extra.close(); extra.close();
@ -257,7 +249,7 @@ public abstract class InputContainer implements GraphicalElement, InputLayout, S
return extra; return extra;
} }
public Function toFunction(MathContext context) throws Error { public Function toFunction(final MathContext context) throws Error {
return root.toFunction(context); return root.toFunction(context);
} }

View File

@ -28,20 +28,20 @@ public class NormalInputContainer extends InputContainer {
super(); super();
} }
public NormalInputContainer(InputContext ic) { public NormalInputContainer(final InputContext ic) {
super(ic); super(ic);
} }
public NormalInputContainer(InputContext ic, boolean small) { public NormalInputContainer(final InputContext ic, final boolean small) {
super(ic, small); super(ic, small);
} }
public NormalInputContainer(InputContext ic, boolean small, int minWidth, int minHeight) { public NormalInputContainer(final InputContext ic, final boolean small, final int minWidth, final int minHeight) {
super(ic, small, minWidth, minHeight); super(ic, small, minWidth, minHeight);
} }
@Override @Override
public Block parseChar(char c) { public Block parseChar(final char c) {
switch (c) { switch (c) {
case MathematicalSymbols.DIVISION: case MathematicalSymbols.DIVISION:
return new BlockDivision(); return new BlockDivision();
@ -81,17 +81,15 @@ public class NormalInputContainer extends InputContainer {
case MathematicalSymbols.EULER_NUMBER: case MathematicalSymbols.EULER_NUMBER:
return new BlockVariable(inputContext, c, true); return new BlockVariable(inputContext, c, true);
default: default:
for (final char v : MathematicalSymbols.variables) { for (final char v : MathematicalSymbols.variables)
if (c == v) { if (c == v)
return new BlockVariable(inputContext, c); return new BlockVariable(inputContext, c);
}
}
return new BlockChar(c); return new BlockChar(c);
} }
} }
@Override @Override
public void typeChar(char c) { public void typeChar(final char c) {
super.typeChar(c); super.typeChar(c);
switch (c) { switch (c) {
case MathematicalSymbols.PARENTHESIS_CLOSE: case MathematicalSymbols.PARENTHESIS_CLOSE:
@ -106,18 +104,15 @@ public class NormalInputContainer extends InputContainer {
int before = 0; int before = 0;
while (true) { while (true) {
currentBlock = currentBlock.getPreviousBlock(); currentBlock = currentBlock.getPreviousBlock();
if (currentBlock == null) { if (currentBlock == null)
break; break;
}
final Block b = currentBlock.get(); final Block b = currentBlock.get();
if (b instanceof BlockNumericChar || b instanceof BlockVariable) { if (b instanceof BlockNumericChar || b instanceof BlockVariable) {
if (!groupedBefore) { if (!groupedBefore)
groupedBefore = true; groupedBefore = true;
}
before++; before++;
} else { } else
break; break;
}
} }
if (groupedBefore) { if (groupedBefore) {
moveLeft(); moveLeft();
@ -129,9 +124,8 @@ public class NormalInputContainer extends InputContainer {
moveLeft(); moveLeft();
moveLeft(); moveLeft();
} }
for (int i = 0; i < before + 1; i++) { for (int i = 0; i < before + 1; i++)
moveRight(); moveRight();
}
moveRight();// Move to the divisor moveRight();// Move to the divisor
} }

View File

@ -8,11 +8,11 @@ public class NormalOutputContainer extends OutputContainer {
super(); super();
} }
public NormalOutputContainer(boolean small) { public NormalOutputContainer(final boolean small) {
super(small); super(small);
} }
public NormalOutputContainer(boolean small, int minWidth, int minHeight) { public NormalOutputContainer(final boolean small, final int minWidth, final int minHeight) {
super(small, minWidth, minHeight); super(small, minWidth, minHeight);
} }
} }

View File

@ -22,39 +22,37 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout,
roots.add(new BlockContainer()); roots.add(new BlockContainer());
} }
public OutputContainer(boolean small) { public OutputContainer(final boolean small) {
roots = new ObjectArrayList<>(); roots = new ObjectArrayList<>();
roots.add(new BlockContainer(small)); roots.add(new BlockContainer(small));
} }
public OutputContainer(boolean small, int minWidth, int minHeight) { public OutputContainer(final boolean small, final int minWidth, final int minHeight) {
roots = new ObjectArrayList<>(); roots = new ObjectArrayList<>();
roots.add(new BlockContainer(small)); roots.add(new BlockContainer(small));
} }
public void setContentAsSingleGroup(ObjectArrayList<Block> blocks) { public void setContentAsSingleGroup(final ObjectArrayList<Block> blocks) {
roots.clear(); roots.clear();
final BlockContainer bcnt = new BlockContainer(); final BlockContainer bcnt = new BlockContainer();
for (final Block block : blocks) { for (final Block block : blocks)
bcnt.appendBlockUnsafe(block); bcnt.appendBlockUnsafe(block);
}
roots.add(bcnt); roots.add(bcnt);
recomputeDimensions(); recomputeDimensions();
} }
public void setContentAsMultipleGroups(ObjectArrayList<ObjectArrayList<Block>> roots) { public void setContentAsMultipleGroups(final ObjectArrayList<ObjectArrayList<Block>> roots) {
this.roots.clear(); this.roots.clear();
for (final ObjectArrayList<Block> blocks : roots) { for (final ObjectArrayList<Block> blocks : roots) {
final BlockContainer bcnt = new BlockContainer(); final BlockContainer bcnt = new BlockContainer();
for (final Block block : blocks) { for (final Block block : blocks)
bcnt.appendBlockUnsafe(block); bcnt.appendBlockUnsafe(block);
}
this.roots.add(bcnt); this.roots.add(bcnt);
} }
recomputeDimensions(); recomputeDimensions();
} }
public void setContentAsMultipleElements(ObjectArrayList<Block> elems) { public void setContentAsMultipleElements(final ObjectArrayList<Block> elems) {
roots.clear(); roots.clear();
for (final Block block : elems) { for (final Block block : elems) {
final BlockContainer bcnt = new BlockContainer(); final BlockContainer bcnt = new BlockContainer();
@ -66,9 +64,8 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout,
@Override @Override
public void recomputeDimensions() { public void recomputeDimensions() {
for (final BlockContainer root : roots) { for (final BlockContainer root : roots)
root.recomputeDimensions(); root.recomputeDimensions();
}
} }
@Override @Override
@ -76,9 +73,8 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout,
int maxw = 0; int maxw = 0;
for (final BlockContainer root : roots) { for (final BlockContainer root : roots) {
final int w = root.getWidth(); final int w = root.getWidth();
if (w > maxw) { if (w > maxw)
maxw = w; maxw = w;
}
} }
return maxw; return maxw;
} }
@ -86,14 +82,12 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout,
@Override @Override
public int getHeight() { public int getHeight() {
int h = 0; int h = 0;
for (final BlockContainer root : roots) { for (final BlockContainer root : roots)
h += root.getHeight() + 2; h += root.getHeight() + 2;
} if (h > 0)
if (h > 0) {
return h - 2; return h - 2;
} else { else
return h; return h;
}
} }
@Override @Override
@ -102,16 +96,16 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout,
} }
/** /**
* *
* @param delta * @param delta
* Time, in seconds * Time, in seconds
*/ */
public void beforeRender(double delta) { public void beforeRender(final double delta) {
} }
/** /**
* *
* @param ge * @param ge
* Graphic Engine class. * Graphic Engine class.
* @param r * @param r
@ -121,7 +115,7 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout,
* @param y * @param y
* Position relative to the window. * Position relative to the window.
*/ */
public void draw(GraphicEngine ge, Renderer r, int x, int y) { public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y) {
int offset = 0; int offset = 0;
for (final BlockContainer root : roots) { for (final BlockContainer root : roots) {
root.draw(ge, r, x, y + offset, caret); root.draw(ge, r, x, y + offset, caret);
@ -138,9 +132,8 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout,
public boolean isContentEmpty() { public boolean isContentEmpty() {
for (final BlockContainer root : roots) { for (final BlockContainer root : roots) {
final ObjectArrayList<Block> cnt = root.getContent(); final ObjectArrayList<Block> cnt = root.getContent();
if (cnt != null && !cnt.isEmpty()) { if (cnt != null && !cnt.isEmpty())
return false; return false;
}
} }
return true; return true;
} }

View File

@ -3,5 +3,5 @@ package it.cavallium.warppi.gui.expression.layouts;
import it.cavallium.warppi.gui.expression.blocks.Block; import it.cavallium.warppi.gui.expression.blocks.Block;
public interface InputLayout { public interface InputLayout {
public Block parseChar(char c); Block parseChar(char c);
} }

View File

@ -6,9 +6,9 @@ package it.cavallium.warppi.gui.graphicengine;
*/ */
public interface BinaryFont extends Skin { public interface BinaryFont extends Skin {
public int getStringWidth(String text); int getStringWidth(String text);
public int getCharacterWidth(); int getCharacterWidth();
public int getCharacterHeight(); int getCharacterHeight();
} }

View File

@ -7,53 +7,53 @@ import it.cavallium.warppi.flow.Observable;
public interface GraphicEngine { public interface GraphicEngine {
public int[] getSize(); int[] getSize();
public boolean isInitialized(); boolean isInitialized();
public void setTitle(String title); void setTitle(String title);
public void setResizable(boolean r); void setResizable(boolean r);
public void setDisplayMode(final int ww, final int wh); void setDisplayMode(final int ww, final int wh);
public default void create() { default void create() {
create(null); create(null);
}; };
public void create(Runnable object); void create(Runnable object);
public Observable<Integer[]> onResize(); Observable<Integer[]> onResize();
public int getWidth(); int getWidth();
public int getHeight(); int getHeight();
public void destroy(); void destroy();
public void start(RenderingLoop d); void start(RenderingLoop d);
public void repaint(); void repaint();
public Renderer getRenderer(); Renderer getRenderer();
public BinaryFont loadFont(String fontName) throws IOException; BinaryFont loadFont(String fontName) throws IOException;
public BinaryFont loadFont(String path, String fontName) throws IOException; BinaryFont loadFont(String path, String fontName) throws IOException;
public Skin loadSkin(String file) throws IOException; Skin loadSkin(String file) throws IOException;
public void waitForExit(); void waitForExit();
public boolean isSupported(); boolean isSupported();
public boolean doesRefreshPauses(); boolean doesRefreshPauses();
public default boolean supportsFontRegistering() { default boolean supportsFontRegistering() {
return false; return false;
} }
public default List<BinaryFont> getRegisteredFonts() { default List<BinaryFont> getRegisteredFonts() {
return null; return null;
} }
} }

View File

@ -1,46 +1,45 @@
package it.cavallium.warppi.gui.graphicengine; package it.cavallium.warppi.gui.graphicengine;
public interface Renderer { public interface Renderer {
public void glColor3i(int r, int gg, int b); void glColor3i(int r, int gg, int b);
public void glColor(int c); void glColor(int c);
public void glColor4i(int red, int green, int blue, int alpha); void glColor4i(int red, int green, int blue, int alpha);
public void glColor3f(float red, float green, float blue); void glColor3f(float red, float green, float blue);
public void glColor4f(float red, float green, float blue, float alpha); void glColor4f(float red, float green, float blue, float alpha);
public void glClearColor4i(int red, int green, int blue, int alpha); void glClearColor4i(int red, int green, int blue, int alpha);
public void glClearColor4f(float red, float green, float blue, float alpha); void glClearColor4f(float red, float green, float blue, float alpha);
public int glGetClearColor(); int glGetClearColor();
public void glClearColor(int c); void glClearColor(int c);
public void glClear(int screenWidth, int screenHeight); void glClear(int screenWidth, int screenHeight);
public void glDrawLine(float x0, float y0, float x1, float y1); void glDrawLine(float x0, float y0, float x1, float y1);
public void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, float uvHeight);
float uvHeight);
public void glFillColor(float x, float y, float width, float height); void glFillColor(float x, float y, float width, float height);
public void glDrawCharLeft(int x, int y, char ch); void glDrawCharLeft(int x, int y, char ch);
public void glDrawCharCenter(int x, int y, char ch); void glDrawCharCenter(int x, int y, char ch);
public void glDrawCharRight(int x, int y, char ch); void glDrawCharRight(int x, int y, char ch);
public void glDrawStringLeft(float x, float y, String text); void glDrawStringLeft(float x, float y, String text);
public void glDrawStringCenter(float x, float y, String text); void glDrawStringCenter(float x, float y, String text);
public void glDrawStringRight(float x, float y, String text); void glDrawStringRight(float x, float y, String text);
public void glClearSkin(); void glClearSkin();
public BinaryFont getCurrentFont(); BinaryFont getCurrentFont();
} }

View File

@ -1,5 +1,5 @@
package it.cavallium.warppi.gui.graphicengine; package it.cavallium.warppi.gui.graphicengine;
public interface RenderingLoop { public interface RenderingLoop {
public void refresh(); void refresh();
} }

View File

@ -5,15 +5,15 @@ import java.net.URISyntaxException;
public interface Skin { public interface Skin {
public void load(String file) throws IOException, URISyntaxException; void load(String file) throws IOException, URISyntaxException;
public void initialize(GraphicEngine d); void initialize(GraphicEngine d);
public boolean isInitialized(); boolean isInitialized();
public void use(GraphicEngine d); void use(GraphicEngine d);
public int getSkinWidth(); int getSkinWidth();
public int getSkinHeight(); int getSkinHeight();
} }

View File

@ -19,25 +19,24 @@ public abstract class PngSkin implements Skin {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final boolean isResource; private final boolean isResource;
public PngSkin(String file) throws IOException { public PngSkin(final String file) throws IOException {
isResource = !new File(file).exists(); isResource = !new File(file).exists();
load(file); load(file);
} }
@SuppressWarnings("unused")
@Override @Override
public void load(String file) throws IOException { public void load(String file) throws IOException {
if (!file.startsWith("/")) if (!file.startsWith("/"))
file = "/" + file; file = "/" + file;
try { try {
if (!file.endsWith(".png")) { if (!file.endsWith(".png")) {
File f = File.createTempFile("picalculator-png", ".png"); final File f = File.createTempFile("picalculator-png", ".png");
f.deleteOnExit(); f.deleteOnExit();
BufferedImage img = ImageIO.read(Engine.getPlatform().getStorageUtils().getResourceStream(file)); final BufferedImage img = ImageIO.read(Engine.getPlatform().getStorageUtils().getResourceStream(file));
ImageIO.write(img, "PNG", f); ImageIO.write(img, "PNG", f);
file = f.toString(); file = f.toString();
} }
PngReader r = Engine.getPlatform().getPngUtils().load(Engine.getPlatform().getStorageUtils().getResourceStream(file)); final PngReader r = Engine.getPlatform().getPngUtils().load(Engine.getPlatform().getStorageUtils().getResourceStream(file));
if (r == null) { if (r == null) {
skinData = new int[0]; skinData = new int[0];
skinSize = new int[] { 0, 0 }; skinSize = new int[] { 0, 0 };
@ -46,15 +45,15 @@ public abstract class PngSkin implements Skin {
skinData = r.getImageMatrix(); skinData = r.getImageMatrix();
skinSize = r.getSize(); skinSize = r.getSize();
} }
} catch (URISyntaxException e) { } catch (final URISyntaxException e) {
IOException ex = new IOException(); final IOException ex = new IOException();
ex.initCause(e); ex.initCause(e);
throw ex; throw ex;
} }
} }
@Override @Override
public void initialize(GraphicEngine d) { public void initialize(final GraphicEngine d) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }

View File

@ -34,49 +34,49 @@ public abstract class RFTFont implements BinaryFont {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final boolean isResource; private final boolean isResource;
public RFTFont(String fontName) throws IOException { public RFTFont(final String fontName) throws IOException {
this(fontName, false); this(fontName, false);
} }
RFTFont(String fontName, boolean onlyRaw) throws IOException { RFTFont(final String fontName, final boolean onlyRaw) throws IOException {
isResource = true; isResource = true;
load("/font_" + fontName + ".rft", onlyRaw); load("/font_" + fontName + ".rft", onlyRaw);
} }
public RFTFont(String path, String fontName) throws IOException { public RFTFont(final String path, final String fontName) throws IOException {
this(path, fontName, false); this(path, fontName, false);
} }
RFTFont(String path, String fontName, boolean onlyRaw) throws IOException { RFTFont(final String path, final String fontName, final boolean onlyRaw) throws IOException {
isResource = false; isResource = false;
load(path + "/font_" + fontName + ".rft", onlyRaw); load(path + "/font_" + fontName + ".rft", onlyRaw);
} }
public static RFTFont loadTemporaryFont(String name) throws IOException { public static RFTFont loadTemporaryFont(final String name) throws IOException {
return new BlankRFTFont(name, true); return new BlankRFTFont(name, true);
} }
public static RFTFont loadTemporaryFont(String path, String name) throws IOException { public static RFTFont loadTemporaryFont(final String path, final String name) throws IOException {
return new BlankRFTFont(path, name, true); return new BlankRFTFont(path, name, true);
} }
@Override @Override
public void load(String path) throws IOException { public void load(final String path) throws IOException {
load(path, false); load(path, false);
} }
private void load(String path, boolean onlyRaw) throws IOException { private void load(final String path, final boolean onlyRaw) throws IOException {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN + 1, "Loading font " + path); Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN + 1, "Loading font " + path);
loadFont(path); loadFont(path);
if (!onlyRaw) { if (!onlyRaw) {
chars32 = new int[(intervalsTotalSize) * charIntCount]; chars32 = new int[intervalsTotalSize * charIntCount];
for (int charCompressedIndex = 0; charCompressedIndex < intervalsTotalSize; charCompressedIndex++) { for (int charCompressedIndex = 0; charCompressedIndex < intervalsTotalSize; charCompressedIndex++) {
final boolean[] currentChar = rawchars[charCompressedIndex]; final boolean[] currentChar = rawchars[charCompressedIndex];
if (currentChar == null) { if (currentChar == null) {
int currentInt = 0; int currentInt = 0;
int currentBit = 0; int currentBit = 0;
for (int i = 0; i < charS; i++) { for (int i = 0; i < charS; i++) {
if (currentInt * intBits + currentBit >= (currentInt + 1) * intBits) { if (currentInt * RFTFont.intBits + currentBit >= (currentInt + 1) * RFTFont.intBits) {
currentInt += 1; currentInt += 1;
currentBit = 0; currentBit = 0;
} }
@ -87,11 +87,11 @@ public abstract class RFTFont implements BinaryFont {
int currentInt = 0; int currentInt = 0;
int currentBit = 0; int currentBit = 0;
for (int i = 0; i < charS; i++) { for (int i = 0; i < charS; i++) {
if (currentBit >= intBits) { if (currentBit >= RFTFont.intBits) {
currentInt += 1; currentInt += 1;
currentBit = 0; currentBit = 0;
} }
chars32[charCompressedIndex * charIntCount + currentInt] = (chars32[charCompressedIndex * charIntCount + currentInt]) | ((currentChar[i] ? 1 : 0) << currentBit); chars32[charCompressedIndex * charIntCount + currentInt] = chars32[charCompressedIndex * charIntCount + currentInt] | (currentChar[i] ? 1 : 0) << currentBit;
currentBit++; currentBit++;
} }
} }
@ -107,8 +107,8 @@ public abstract class RFTFont implements BinaryFont {
if (!string.startsWith("/")) if (!string.startsWith("/"))
string = "/" + string; string = "/" + string;
res = Engine.getPlatform().getStorageUtils().getResourceStream(string); res = Engine.getPlatform().getStorageUtils().getResourceStream(string);
} catch (URISyntaxException e) { } catch (final URISyntaxException e) {
IOException ex = new IOException(); final IOException ex = new IOException();
ex.initCause(e); ex.initCause(e);
throw ex; throw ex;
} }
@ -119,32 +119,28 @@ public abstract class RFTFont implements BinaryFont {
charW = file[0x4] << 8 | file[0x5]; charW = file[0x4] << 8 | file[0x5];
charH = file[0x6] << 8 | file[0x7]; charH = file[0x6] << 8 | file[0x7];
charS = charW * charH; charS = charW * charH;
charIntCount = (int) Math.ceil(((double) charS) / ((double) intBits)); charIntCount = (int) Math.ceil((double) charS / (double) RFTFont.intBits);
minBound = file[0x9] << 24 | file[0xA] << 16 | file[0xB] << 8 | file[0xC]; minBound = file[0x9] << 24 | file[0xA] << 16 | file[0xB] << 8 | file[0xC];
maxBound = file[0xE] << 24 | file[0xF] << 16 | file[0x10] << 8 | file[0x11]; maxBound = file[0xE] << 24 | file[0xF] << 16 | file[0x10] << 8 | file[0x11];
if (maxBound <= minBound) { if (maxBound <= minBound)
maxBound = 66000; //TODO remove it: temp fix maxBound = 66000; //TODO remove it: temp fix
}
rawchars = new boolean[maxBound - minBound][]; rawchars = new boolean[maxBound - minBound][];
int index = 0x12; int index = 0x12;
while (index < filelength) { while (index < filelength)
try { try {
final int charIndex = file[index] << 8 | file[index + 1]; final int charIndex = file[index] << 8 | file[index + 1];
final boolean[] rawchar = new boolean[charS]; final boolean[] rawchar = new boolean[charS];
int charbytescount = 0; int charbytescount = 0;
while (charbytescount * 8 < charS) { while (charbytescount * 8 < charS)
charbytescount += 1; charbytescount += 1;
}
int currentBit = 0; int currentBit = 0;
for (int i = 0; i <= charbytescount; i++) { for (int i = 0; i <= charbytescount; i++)
for (int bit = 0; bit < 8; bit++) { for (int bit = 0; bit < 8; bit++) {
if (currentBit >= charS) { if (currentBit >= charS)
break; break;
} rawchar[currentBit] = (file[index + 2 + i] >> 8 - 1 - bit & 0x1) == 1 ? true : false;
rawchar[currentBit] = (((file[index + 2 + i] >> (8 - 1 - bit)) & 0x1) == 1) ? true : false;
currentBit++; currentBit++;
} }
}
rawchars[charIndex - minBound] = rawchar; rawchars[charIndex - minBound] = rawchar;
index += 2 + charbytescount; index += 2 + charbytescount;
} catch (final Exception ex) { } catch (final Exception ex) {
@ -152,13 +148,10 @@ public abstract class RFTFont implements BinaryFont {
System.out.println(string); System.out.println(string);
Engine.getPlatform().exit(-1); Engine.getPlatform().exit(-1);
} }
} } else
} else {
throw new IOException(); throw new IOException();
} } else
} else {
throw new IOException(); throw new IOException();
}
findIntervals(); findIntervals();
/*int[] screen = new int[rawchars.length * charW * charH]; /*int[] screen = new int[rawchars.length * charW * charH];
for (int i = 0; i < rawchars.length; i++) { for (int i = 0; i < rawchars.length; i++) {
@ -186,13 +179,12 @@ public abstract class RFTFont implements BinaryFont {
int intervalSize = 0; int intervalSize = 0;
@SuppressWarnings("unused") @SuppressWarnings("unused")
final int holeSize = 0; final int holeSize = 0;
for (int i = 0; i < rawchars.length; i++) { for (int i = 0; i < rawchars.length; i++)
if (rawchars[i] != null) { if (rawchars[i] != null) {
beginIndex = i; beginIndex = i;
int firstNull = 0; int firstNull = 0;
while (i + firstNull < rawchars.length && rawchars[i + firstNull] != null) { while (i + firstNull < rawchars.length && rawchars[i + firstNull] != null)
firstNull++; firstNull++;
}
endIndex = beginIndex + firstNull - 1; endIndex = beginIndex + firstNull - 1;
i = endIndex; i = endIndex;
if (endIndex >= 0) { if (endIndex >= 0) {
@ -202,13 +194,12 @@ public abstract class RFTFont implements BinaryFont {
} }
beginIndex = -1; beginIndex = -1;
} }
}
int lastIndex = 0; int lastIndex = 0;
final boolean[][] newrawchars = new boolean[intervalsTotalSize][]; final boolean[][] newrawchars = new boolean[intervalsTotalSize][];
for (final int[] interval : intervals) { for (final int[] interval : intervals) {
if (rawchars.length - (interval[0]) - interval[2] < 0) { if (rawchars.length - interval[0] - interval[2] < 0) {
System.err.println(interval[0] + "-" + interval[1] + "(" + interval[2] + ")"); System.err.println(interval[0] + "-" + interval[1] + "(" + interval[2] + ")");
System.err.println(rawchars.length - (interval[0]) - interval[2]); System.err.println(rawchars.length - interval[0] - interval[2]);
throw new ArrayIndexOutOfBoundsException(); throw new ArrayIndexOutOfBoundsException();
} }
if (newrawchars.length - (lastIndex - 1) - interval[2] < 0) { if (newrawchars.length - (lastIndex - 1) - interval[2] < 0) {
@ -230,7 +221,7 @@ public abstract class RFTFont implements BinaryFont {
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
private void saveArray(int[] screen, int w, int h, String coutputpng) { private void saveArray(final int[] screen, final int w, final int h, final String coutputpng) {
final BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); final BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
final int[] a = ((DataBufferInt) bi.getRaster().getDataBuffer()).getData(); final int[] a = ((DataBufferInt) bi.getRaster().getDataBuffer()).getData();
System.arraycopy(screen, 0, a, 0, screen.length); System.arraycopy(screen, 0, a, 0, screen.length);
@ -241,7 +232,7 @@ public abstract class RFTFont implements BinaryFont {
} }
} }
public int[] getCharIndexes(String txt) { public int[] getCharIndexes(final String txt) {
final int l = txt.length(); final int l = txt.length();
final int[] indexes = new int[l]; final int[] indexes = new int[l];
final char[] chars = txt.toCharArray(); final char[] chars = txt.toCharArray();
@ -252,52 +243,48 @@ public abstract class RFTFont implements BinaryFont {
return indexes; return indexes;
} }
public int getCharIndex(char c) { public int getCharIndex(final char c) {
final int originalIndex = c & 0xFFFF; final int originalIndex = c & 0xFFFF;
return compressIndex(originalIndex); return compressIndex(originalIndex);
} }
protected int compressIndex(int originalIndex) { protected int compressIndex(final int originalIndex) {
int compressedIndex = 0; int compressedIndex = 0;
for (int i = 0; i < intervals.length; i += 3) { for (int i = 0; i < intervals.length; i += 3)
if (intervals[i] > originalIndex) { if (intervals[i] > originalIndex)
break; break;
} else if (originalIndex <= intervals[i + 1]) { else if (originalIndex <= intervals[i + 1]) {
compressedIndex += (originalIndex - intervals[i]); compressedIndex += originalIndex - intervals[i];
break; break;
} else { } else
compressedIndex += intervals[i + 2]; compressedIndex += intervals[i + 2];
}
}
return compressedIndex; return compressedIndex;
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
private int decompressIndex(int compressedIndex) { private int decompressIndex(final int compressedIndex) {
final int originalIndex = 0; final int originalIndex = 0;
int i = 0; int i = 0;
for (int intvl = 0; intvl < intervals.length; intvl += 3) { for (int intvl = 0; intvl < intervals.length; intvl += 3) {
i += intervals[intvl + 2]; i += intervals[intvl + 2];
if (i == compressedIndex) { if (i == compressedIndex)
return intervals[intvl + 1]; return intervals[intvl + 1];
} else if (i > compressedIndex) { else if (i > compressedIndex)
return intervals[intvl + 1] - (i - compressedIndex); return intervals[intvl + 1] - (i - compressedIndex);
}
} }
return originalIndex; return originalIndex;
} }
@Override @Override
public void initialize(GraphicEngine d) {} public void initialize(final GraphicEngine d) {}
@Override @Override
public int getStringWidth(String text) { public int getStringWidth(final String text) {
final int w = charW * text.length(); final int w = charW * text.length();
if (text.length() > 0 && w > 0) { if (text.length() > 0 && w > 0)
return w; return w;
} else { else
return 0; return 0;
}
} }
@Override @Override
@ -324,22 +311,22 @@ public abstract class RFTFont implements BinaryFont {
public int getSkinHeight() { public int getSkinHeight() {
return -1; return -1;
} }
private static class BlankRFTFont extends RFTFont { private static class BlankRFTFont extends RFTFont {
BlankRFTFont(String fontName, boolean onlyRaw) throws IOException { BlankRFTFont(final String fontName, final boolean onlyRaw) throws IOException {
super(fontName, onlyRaw); super(fontName, onlyRaw);
} }
public BlankRFTFont(String path, String name, boolean b) throws IOException { public BlankRFTFont(final String path, final String name, final boolean b) throws IOException {
super(path, name, b); super(path, name, b);
} }
@Override @Override
public void use(GraphicEngine d) { public void use(final GraphicEngine d) {
} }
} }
} }

View File

@ -27,20 +27,19 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public void setTitle(String title) {} public void setTitle(final String title) {}
@Override @Override
public void setResizable(boolean r) {} public void setResizable(final boolean r) {}
@Override @Override
public void setDisplayMode(int ww, int wh) {} public void setDisplayMode(final int ww, final int wh) {}
@Override @Override
public void create(Runnable onInitialized) { public void create(final Runnable onInitialized) {
initialized = true; initialized = true;
if (onInitialized != null) { if (onInitialized != null)
onInitialized.run(); onInitialized.run();
}
} }
@Override @Override
@ -65,7 +64,7 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public void start(RenderingLoop d) {} public void start(final RenderingLoop d) {}
@Override @Override
public void repaint() {} public void repaint() {}
@ -79,62 +78,62 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public void glFillRect(float x, float y, float width, float height, float uvX, float uvY, float uvWidth, public void glFillRect(final float x, final float y, final float width, final float height, final float uvX,
float uvHeight) {} final float uvY, final float uvWidth, final float uvHeight) {}
@Override @Override
public void glFillColor(float x, float y, float width, float height) {} public void glFillColor(final float x, final float y, final float width, final float height) {}
@Override @Override
public void glDrawStringRight(float x, float y, String text) {} public void glDrawStringRight(final float x, final float y, final String text) {}
@Override @Override
public void glDrawStringLeft(float x, float y, String text) {} public void glDrawStringLeft(final float x, final float y, final String text) {}
@Override @Override
public void glDrawStringCenter(float x, float y, String text) {} public void glDrawStringCenter(final float x, final float y, final String text) {}
@Override @Override
public void glDrawLine(float x0, float y0, float x1, float y1) {} public void glDrawLine(final float x0, final float y0, final float x1, final float y1) {}
@Override @Override
public void glDrawCharRight(int x, int y, char ch) {} public void glDrawCharRight(final int x, final int y, final char ch) {}
@Override @Override
public void glDrawCharLeft(int x, int y, char ch) {} public void glDrawCharLeft(final int x, final int y, final char ch) {}
@Override @Override
public void glDrawCharCenter(int x, int y, char ch) {} public void glDrawCharCenter(final int x, final int y, final char ch) {}
@Override @Override
public void glColor4i(int red, int green, int blue, int alpha) {} public void glColor4i(final int red, final int green, final int blue, final int alpha) {}
@Override @Override
public void glColor4f(float red, float green, float blue, float alpha) {} public void glColor4f(final float red, final float green, final float blue, final float alpha) {}
@Override @Override
public void glColor3i(int r, int gg, int b) {} public void glColor3i(final int r, final int gg, final int b) {}
@Override @Override
public void glColor3f(float red, float green, float blue) {} public void glColor3f(final float red, final float green, final float blue) {}
@Override @Override
public void glColor(int c) {} public void glColor(final int c) {}
@Override @Override
public void glClearSkin() {} public void glClearSkin() {}
@Override @Override
public void glClearColor4i(int red, int green, int blue, int alpha) {} public void glClearColor4i(final int red, final int green, final int blue, final int alpha) {}
@Override @Override
public void glClearColor4f(float red, float green, float blue, float alpha) {} public void glClearColor4f(final float red, final float green, final float blue, final float alpha) {}
@Override @Override
public void glClearColor(int c) {} public void glClearColor(final int c) {}
@Override @Override
public void glClear(int screenWidth, int screenHeight) {} public void glClear(final int screenWidth, final int screenHeight) {}
@Override @Override
public BinaryFont getCurrentFont() { public BinaryFont getCurrentFont() {
@ -144,13 +143,13 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public BinaryFont loadFont(String fontName) throws IOException { public BinaryFont loadFont(final String fontName) throws IOException {
return new BinaryFont() { return new BinaryFont() {
@Override @Override
public void use(GraphicEngine d) {} public void use(final GraphicEngine d) {}
@Override @Override
public void load(String file) throws IOException {} public void load(final String file) throws IOException {}
@Override @Override
public boolean isInitialized() { public boolean isInitialized() {
@ -158,10 +157,10 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public void initialize(GraphicEngine d) {} public void initialize(final GraphicEngine d) {}
@Override @Override
public int getStringWidth(String text) { public int getStringWidth(final String text) {
return 1; return 1;
} }
@ -190,13 +189,13 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public BinaryFont loadFont(String path, String fontName) throws IOException { public BinaryFont loadFont(final String path, final String fontName) throws IOException {
return new BinaryFont() { return new BinaryFont() {
@Override @Override
public void use(GraphicEngine d) {} public void use(final GraphicEngine d) {}
@Override @Override
public void load(String file) throws IOException {} public void load(final String file) throws IOException {}
@Override @Override
public boolean isInitialized() { public boolean isInitialized() {
@ -204,10 +203,10 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public void initialize(GraphicEngine d) {} public void initialize(final GraphicEngine d) {}
@Override @Override
public int getStringWidth(String text) { public int getStringWidth(final String text) {
return 1; return 1;
} }
@ -236,13 +235,13 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public Skin loadSkin(String file) throws IOException { public Skin loadSkin(final String file) throws IOException {
return new Skin() { return new Skin() {
@Override @Override
public void use(GraphicEngine d) {} public void use(final GraphicEngine d) {}
@Override @Override
public void load(String file) throws IOException {} public void load(final String file) throws IOException {}
@Override @Override
public boolean isInitialized() { public boolean isInitialized() {
@ -250,7 +249,7 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public void initialize(GraphicEngine d) {} public void initialize(final GraphicEngine d) {}
@Override @Override
public int getSkinWidth() { public int getSkinWidth() {

View File

@ -13,7 +13,7 @@ public class ChooseVariableValueScreen extends Screen {
private final MathInputScreen es; private final MathInputScreen es;
public Function resultNumberValue; public Function resultNumberValue;
public ChooseVariableValueScreen(MathInputScreen es, VariableValue variableValue) { public ChooseVariableValueScreen(final MathInputScreen es, final VariableValue variableValue) {
super(); super();
canBeInHistory = false; canBeInHistory = false;
@ -46,7 +46,7 @@ public class ChooseVariableValueScreen extends Screen {
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
} }
@ -56,7 +56,7 @@ public class ChooseVariableValueScreen extends Screen {
} }
@Override @Override
public boolean onKeyPressed(KeyPressedEvent k) { public boolean onKeyPressed(final KeyPressedEvent k) {
switch (k.getKey()) { switch (k.getKey()) {
case LETTER_X: case LETTER_X:
// PIDisplay.INSTANCE.goBack(); // PIDisplay.INSTANCE.goBack();

View File

@ -24,7 +24,7 @@ public class EmptyScreen extends Screen {
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
} }

View File

@ -36,17 +36,15 @@ public class KeyboardDebugScreen extends Screen {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringLeft(10, 30, "Key position"); renderer.glDrawStringLeft(10, 30, "Key position");
renderer.glDrawStringLeft(10, 45, "X: " + keyX + ", Y:" + keyY); renderer.glDrawStringLeft(10, 45, "X: " + KeyboardDebugScreen.keyX + ", Y:" + KeyboardDebugScreen.keyY);
renderer.glDrawStringLeft(10, 65, "Key value"); renderer.glDrawStringLeft(10, 65, "Key value");
renderer.glDrawStringLeft(10, 80, key); renderer.glDrawStringLeft(10, 80, key);
} }
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++)
if (log[i] != null) { if (KeyboardDebugScreen.log[i] != null)
renderer.glDrawStringLeft(10, 230 + 15 * (i + 1), log[i].toUpperCase()); renderer.glDrawStringLeft(10, 230 + 15 * (i + 1), KeyboardDebugScreen.log[i].toUpperCase());
}
}
//FROM SERIAL //FROM SERIAL
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
@ -54,44 +52,41 @@ public class KeyboardDebugScreen extends Screen {
renderer.glFillColor(-80 + 100, 100, 200, 70); renderer.glFillColor(-80 + 100, 100, 200, 70);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
renderer.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); renderer.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
renderer.glDrawStringCenter(-80 + 100 + 200 / 2, 100 + 70 / 2 - (renderer.getCurrentFont().getCharacterHeight() / 2), "FROM SERIAL"); renderer.glDrawStringCenter(-80 + 100 + 200 / 2, 100 + 70 / 2 - renderer.getCurrentFont().getCharacterHeight() / 2, "FROM SERIAL");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if (pinsA[i] == 1) { if (KeyboardDebugScreen.pinsA[i] == 1)
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else if (pinsA[i] == 2) { else if (KeyboardDebugScreen.pinsA[i] == 2)
renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f); renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
} else if (pinsA[i] == -1) { else if (KeyboardDebugScreen.pinsA[i] == -1)
renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f); renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f);
} else if (pinsA[i] == 0) { else if (KeyboardDebugScreen.pinsA[i] == 0)
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
}
renderer.glFillColor(-80 + 103 + 25 * (7 - i), 80, 20, 20); renderer.glFillColor(-80 + 103 + 25 * (7 - i), 80, 20, 20);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringCenter(-80 + 113 + 25 * (7 - i), 90 - (renderer.getCurrentFont().getCharacterHeight() / 2), "" + (i + 1)); renderer.glDrawStringCenter(-80 + 113 + 25 * (7 - i), 90 - renderer.getCurrentFont().getCharacterHeight() / 2, "" + (i + 1));
} }
for (int i = 15; i >= 8; i--) { for (int i = 15; i >= 8; i--) {
if (pinsA[i] == 1) { if (KeyboardDebugScreen.pinsA[i] == 1)
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else if (pinsA[i] == 2) { else if (KeyboardDebugScreen.pinsA[i] == 2)
renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f); renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
} else if (pinsA[i] == -1) { else if (KeyboardDebugScreen.pinsA[i] == -1)
renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f); renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f);
} else if (pinsA[i] == 0) { else if (KeyboardDebugScreen.pinsA[i] == 0)
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
}
renderer.glFillColor(-80 + 103 + 25 * (i - 8), 170, 20, 20); renderer.glFillColor(-80 + 103 + 25 * (i - 8), 170, 20, 20);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringCenter(-80 + 113 + 25 * (i - 8), 180 - (renderer.getCurrentFont().getCharacterHeight() / 2), "" + (i + 1)); renderer.glDrawStringCenter(-80 + 113 + 25 * (i - 8), 180 - renderer.getCurrentFont().getCharacterHeight() / 2, "" + (i + 1));
} }
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if (dataA[i]) { if (KeyboardDebugScreen.dataA[i])
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else { else
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
} renderer.glFillColor(-80 + 160 + 10 * i, 150, 8, 8);
renderer.glFillColor(-80 + 160 + 10 * (i), 150, 8, 8);
} }
//TO SERIAL //TO SERIAL
@ -100,57 +95,53 @@ public class KeyboardDebugScreen extends Screen {
renderer.glFillColor(150 + 100, 100, 200, 70); renderer.glFillColor(150 + 100, 100, 200, 70);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
renderer.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); renderer.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
renderer.glDrawStringCenter(150 + 100 + 200 / 2, 100 + 70 / 2 - (renderer.getCurrentFont().getCharacterHeight() / 2), "TO SERIAL"); renderer.glDrawStringCenter(150 + 100 + 200 / 2, 100 + 70 / 2 - renderer.getCurrentFont().getCharacterHeight() / 2, "TO SERIAL");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
for (int i = 15; i >= 8; i--) { for (int i = 15; i >= 8; i--) {
if (pinsB[i] == 1) { if (KeyboardDebugScreen.pinsB[i] == 1)
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else if (pinsB[i] == 2) { else if (KeyboardDebugScreen.pinsB[i] == 2)
renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f); renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
} else if (pinsB[i] == -1) { else if (KeyboardDebugScreen.pinsB[i] == -1)
renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f); renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f);
} else if (pinsB[i] == 0) { else if (KeyboardDebugScreen.pinsB[i] == 0)
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
}
renderer.glFillColor(150 + 103 + 25 * (15 - i), 80, 20, 20); renderer.glFillColor(150 + 103 + 25 * (15 - i), 80, 20, 20);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringCenter(150 + 113 + 25 * (15 - i), 90 - (renderer.getCurrentFont().getCharacterHeight() / 2), "" + (i + 1)); renderer.glDrawStringCenter(150 + 113 + 25 * (15 - i), 90 - renderer.getCurrentFont().getCharacterHeight() / 2, "" + (i + 1));
} }
for (int i = 7; i >= 0; i--) { for (int i = 7; i >= 0; i--) {
if (pinsB[i] == 1) { if (KeyboardDebugScreen.pinsB[i] == 1)
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else if (pinsB[i] == 2) { else if (KeyboardDebugScreen.pinsB[i] == 2)
renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f); renderer.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
} else if (pinsB[i] == -1) { else if (KeyboardDebugScreen.pinsB[i] == -1)
renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f); renderer.glColor4f(0.7f, 0.7f, 0.7f, 1.0f);
} else if (pinsB[i] == 0) { else if (KeyboardDebugScreen.pinsB[i] == 0)
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
} renderer.glFillColor(150 + 103 + 25 * i, 170, 20, 20);
renderer.glFillColor(150 + 103 + 25 * (i), 170, 20, 20);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringCenter(150 + 113 + 25 * (i), 180 - (renderer.getCurrentFont().getCharacterHeight() / 2), "" + (i + 1)); renderer.glDrawStringCenter(150 + 113 + 25 * i, 180 - renderer.getCurrentFont().getCharacterHeight() / 2, "" + (i + 1));
} }
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if (dataB[i]) { if (KeyboardDebugScreen.dataB[i])
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else { else
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
} renderer.glFillColor(150 + 160 + 10 * i, 150, 8, 8);
renderer.glFillColor(150 + 160 + 10 * (i), 150, 8, 8);
} }
//GPIO //GPIO
for (int i = 0; i < 40; i++) { for (int i = 0; i < 40; i++) {
if (gpio[i] == true) { if (KeyboardDebugScreen.gpio[i] == true)
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else { else
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
}
if (i % 2 == 0) { if (i % 2 == 0) {
renderer.glFillColor(53 + 15 * ((i) / 2), 50, 5, 5); renderer.glFillColor(53 + 15 * (i / 2), 50, 5, 5);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringCenter(55 + 15 * ((i) / 2), 60, "" + (i + 1)); renderer.glDrawStringCenter(55 + 15 * (i / 2), 60, "" + (i + 1));
} else { } else {
renderer.glFillColor(53 + 15 * ((i - 1) / 2), 40, 5, 5); renderer.glFillColor(53 + 15 * ((i - 1) / 2), 40, 5, 5);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
@ -159,24 +150,22 @@ public class KeyboardDebugScreen extends Screen {
} }
//KEYS //KEYS
for (int c = 0; c < 8; c++) { for (int c = 0; c < 8; c++)
for (int r = 0; r < 8; r++) { for (int r = 0; r < 8; r++) {
if (ks[c][r]) { if (KeyboardDebugScreen.ks[c][r])
renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); renderer.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
} else { else
renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); renderer.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
}
renderer.glFillColor(250 + 6 * c, 250 + 6 * r, 5, 5); renderer.glFillColor(250 + 6 * c, 250 + 6 * r, 5, 5);
} }
}
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
if (System.currentTimeMillis() - beforetime >= 1000) { if (System.currentTimeMillis() - beforetime >= 1000) {
keyevent = "NONE"; keyevent = "NONE";
keyX = 0; KeyboardDebugScreen.keyX = 0;
keyY = 0; KeyboardDebugScreen.keyY = 0;
key = ""; key = "";
} }
} }
@ -187,21 +176,21 @@ public class KeyboardDebugScreen extends Screen {
} }
@Override @Override
public boolean onKeyPressed(KeyPressedEvent k) { public boolean onKeyPressed(final KeyPressedEvent k) {
beforetime = System.currentTimeMillis(); beforetime = System.currentTimeMillis();
keyevent = "PRESSED"; keyevent = "PRESSED";
keyX = 0; KeyboardDebugScreen.keyX = 0;
keyY = 0; KeyboardDebugScreen.keyY = 0;
key = k.toString(); key = k.toString();
return false; return false;
} }
@Override @Override
public boolean onKeyReleased(KeyReleasedEvent k) { public boolean onKeyReleased(final KeyReleasedEvent k) {
beforetime = System.currentTimeMillis(); beforetime = System.currentTimeMillis();
keyevent = "RELEASED"; keyevent = "RELEASED";
keyX = 0; KeyboardDebugScreen.keyX = 0;
keyY = 0; KeyboardDebugScreen.keyY = 0;
key = k.toString(); key = k.toString();
return false; return false;
} }
@ -213,13 +202,12 @@ public class KeyboardDebugScreen extends Screen {
public static boolean[][] ks = new boolean[8][8]; public static boolean[][] ks = new boolean[8][8];
public static boolean[] gpio = new boolean[40]; public static boolean[] gpio = new boolean[40];
public static void log(String str) { public static void log(final String str) {
final String[] newlog = log; final String[] newlog = KeyboardDebugScreen.log;
for (int i = 1; i < 5; i++) { for (int i = 1; i < 5; i++)
newlog[i - 1] = newlog[i]; newlog[i - 1] = newlog[i];
}
newlog[4] = "[" + System.currentTimeMillis() + "]" + str; newlog[4] = "[" + System.currentTimeMillis() + "]" + str;
log = newlog; KeyboardDebugScreen.log = newlog;
} }
} }

View File

@ -32,7 +32,7 @@ public class LoadingScreen extends Screen {
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
loadingTextTranslation = GraphicUtils.sinDeg(endLoading * 90f) * 10f; loadingTextTranslation = GraphicUtils.sinDeg(endLoading * 90f) * 10f;
endLoading += dt; endLoading += dt;
@ -60,9 +60,8 @@ public class LoadingScreen extends Screen {
if (mustRefresh) { if (mustRefresh) {
mustRefresh = false; mustRefresh = false;
return true; return true;
} else { } else
return false; return false;
}
} }
} }

View File

@ -44,35 +44,30 @@ public class MarioScreen extends Screen {
@Override @Override
public void initialized() { public void initialized() {
try { try {
if (skin == null) { if (MarioScreen.skin == null)
skin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("marioskin.png"); MarioScreen.skin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("marioskin.png");
} if (MarioScreen.groundskin == null)
if (groundskin == null) { MarioScreen.groundskin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("marioground.png");
groundskin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("marioground.png"); if (MarioScreen.gpuTest2 == null)
}
if (gpuTest2 == null) {
try { try {
gpuTest2 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("gputest2"); MarioScreen.gpuTest2 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("gputest2");
} catch (final Exception ex) {} } catch (final Exception ex) {}
} if (MarioScreen.gpuTest1 == null)
if (gpuTest1 == null) {
try { try {
gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("gputest12"); MarioScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("gputest12");
gpuTest12 = true; MarioScreen.gpuTest12 = true;
} catch (final Exception ex) { } catch (final Exception ex) {
gpuTest12 = false; MarioScreen.gpuTest12 = false;
try { try {
gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("gputest1"); MarioScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("gputest1");
} catch (final Exception ex2) {} } catch (final Exception ex2) {}
} }
} if (MarioScreen.gpuTest3 == null)
if (gpuTest3 == null) {
try { try {
gpuTest3 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("font_gputest3.png"); MarioScreen.gpuTest3 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("font_gputest3.png");
} catch (final Exception ex) { } catch (final Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
}
} catch (final IOException e) { } catch (final IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -80,13 +75,12 @@ public class MarioScreen extends Screen {
@Override @Override
public void created() throws InterruptedException { public void created() throws InterruptedException {
if (!errored) { if (!errored)
g = new MarioGame(); g = new MarioGame();
}
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
if (!errored) { if (!errored) {
final boolean rightPressed = Keyboard.isKeyDown(2, 5); final boolean rightPressed = Keyboard.isKeyDown(2, 5);
final boolean leftPressed = Keyboard.isKeyDown(2, 3); final boolean leftPressed = Keyboard.isKeyDown(2, 3);
@ -111,13 +105,13 @@ public class MarioScreen extends Screen {
@Override @Override
public void render() { public void render() {
if (errored) { if (errored)
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringLeft(0, 20, "ERROR"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringLeft(0, 20, "ERROR");
} else { else {
if (groundskin != null) { if (MarioScreen.groundskin != null) {
final double playerX = g.getPlayer().getX(); final double playerX = g.getPlayer().getX();
final double playerY = g.getPlayer().getY(); final double playerY = g.getPlayer().getY();
groundskin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); MarioScreen.groundskin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
final MarioWorld w = g.getCurrentWorld(); final MarioWorld w = g.getCurrentWorld();
final int width = w.getWidth(); final int width = w.getWidth();
final int height = w.getHeight(); final int height = w.getHeight();
@ -126,11 +120,11 @@ public class MarioScreen extends Screen {
final float shiftX = -8 + 16 * (float) playerX; final float shiftX = -8 + 16 * (float) playerX;
final float shiftY = -8 + 16 * (height - (float) playerY); final float shiftY = -8 + 16 * (height - (float) playerY);
int blue = -1; int blue = -1;
for (int ix = 0; ix < width; ix++) { for (int ix = 0; ix < width; ix++)
for (int iy = 0; iy < height; iy++) { for (int iy = 0; iy < height; iy++) {
final double distX = Math.abs(playerX - ix); final double distX = Math.abs(playerX - ix);
final double distY = Math.abs(playerY - iy - 1.5d); final double distY = Math.abs(playerY - iy - 1.5d);
if ((distX * distX + distY * distY / 2d) < 25d) { if (distX * distX + distY * distY / 2d < 25d) {
final byte b = w.getBlockIdAt(ix, iy); final byte b = w.getBlockIdAt(ix, iy);
if (b == 0) { if (b == 0) {
if (blue != 1) { if (blue != 1) {
@ -147,47 +141,46 @@ public class MarioScreen extends Screen {
} }
} }
} }
}
if (blue != 0) { if (blue != 0) {
blue = 0; blue = 0;
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xffffffff); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xffffffff);
} }
//DRAW MARIO //DRAW MARIO
skin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); MarioScreen.skin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(screenX - (g.getPlayer().flipped ? 3 : 0), screenY, 35, 27, 35 * (g.getPlayer().marioSkinPos[0] + (g.getPlayer().flipped ? 2 : 1)), 27 * g.getPlayer().marioSkinPos[1], 35 * (g.getPlayer().flipped ? -1 : 1), 27); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(screenX - (g.getPlayer().flipped ? 3 : 0), screenY, 35, 27, 35 * (g.getPlayer().marioSkinPos[0] + (g.getPlayer().flipped ? 2 : 1)), 27 * g.getPlayer().marioSkinPos[1], 35 * (g.getPlayer().flipped ? -1 : 1), 27);
// PIDisplay.renderer.glDrawSkin(getPosX() - 18, 25 + getPosY(), 35 * (marioSkinPos[0] + (flipped ? 2 : 1)), 27 * marioSkinPos[1], 35 * (marioSkinPos[0] + (flipped ? 1 : 2)), 27 * (marioSkinPos[1] + 1), true); // PIDisplay.renderer.glDrawSkin(getPosX() - 18, 25 + getPosY(), 35 * (marioSkinPos[0] + (flipped ? 2 : 1)), 27 * marioSkinPos[1], 35 * (marioSkinPos[0] + (flipped ? 1 : 2)), 27 * (marioSkinPos[1] + 1), true);
} }
// GPU PERFORMANCE TEST // GPU PERFORMANCE TEST
if (gpuTest1 != null) { if (MarioScreen.gpuTest1 != null) {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3f(1, 1, 1); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3f(1, 1, 1);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillColor(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - (gpuTest12 ? 512 : 256), Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2 - (gpuTest12 ? 256 : 128), gpuTest12 ? 512 : 256, gpuTest12 ? 512 : 256); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillColor(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - (MarioScreen.gpuTest12 ? 512 : 256), Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2 - (MarioScreen.gpuTest12 ? 256 : 128), MarioScreen.gpuTest12 ? 512 : 256, MarioScreen.gpuTest12 ? 512 : 256);
gpuTest1.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); MarioScreen.gpuTest1.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3f(0, 0, 0); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3f(0, 0, 0);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth(), Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2 - (gpuTest12 ? 256 : 128), gpuCharTest1[gpuCharTest1Num]); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth(), Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2 - (MarioScreen.gpuTest12 ? 256 : 128), gpuCharTest1[gpuCharTest1Num]);
} }
if (gpuTest3 != null) { if (MarioScreen.gpuTest3 != null) {
gpuTest3.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); MarioScreen.gpuTest3.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4f(1, 1, 1, 0.7f); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4f(1, 1, 1, 0.7f);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(0, StaticVars.screenSize[1] - 128, 224, 128, gpuTestNum * 224, 0, 224, 128); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(0, StaticVars.screenSize[1] - 128, 224, 128, gpuTestNum * 224, 0, 224, 128);
} }
if (gpuTest2 != null) { if (MarioScreen.gpuTest2 != null) {
gpuTest2.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); MarioScreen.gpuTest2.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFF000000); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFF000000);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - gpuTest2.getCharacterHeight(), "A"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "A");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFF800000); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFF800000);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - gpuTest2.getCharacterHeight(), "B"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "B");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFeea28e); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFeea28e);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - gpuTest2.getCharacterHeight(), "C"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "C");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFee7255); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFee7255);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - gpuTest2.getCharacterHeight(), "D"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "D");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFeac0b0); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFeac0b0);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - gpuTest2.getCharacterHeight(), "E"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "E");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFf3d8ce); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFf3d8ce);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - gpuTest2.getCharacterHeight(), "F"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "F");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFffede7); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFffede7);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - gpuTest2.getCharacterHeight(), "G"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "G");
} }
} }
} }

View File

@ -83,15 +83,13 @@ public class MathInputScreen extends Screen {
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().error == null) { if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().error == null)
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xFFc5c2af); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xFFc5c2af);
} else { else
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xFFDC3C32); Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xFFDC3C32);
} if (userInput.beforeRender(dt))
if (userInput.beforeRender(dt)) {
mustRefresh = true; mustRefresh = true;
}
if (computingResult) { if (computingResult) {
computingElapsedTime += dt; computingElapsedTime += dt;
computingAnimationElapsedTime += dt; computingAnimationElapsedTime += dt;
@ -100,9 +98,8 @@ public class MathInputScreen extends Screen {
computingAnimationIndex = (computingAnimationIndex + 1) % 16; computingAnimationIndex = (computingAnimationIndex + 1) % 16;
mustRefresh = true; mustRefresh = true;
} }
if (computingElapsedTime > 5) { if (computingElapsedTime > 5)
computingBreakTipVisible = true; computingBreakTipVisible = true;
}
} else { } else {
computingElapsedTime = 0; computingElapsedTime = 0;
computingAnimationElapsedTime = 0; computingAnimationElapsedTime = 0;
@ -114,7 +111,7 @@ public class MathInputScreen extends Screen {
@Override @Override
public void render() { public void render() {
final Renderer renderer = Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer; final Renderer renderer = Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer;
fontBig.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); MathInputScreen.fontBig.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
final int textColor = 0xFF000000; final int textColor = 0xFF000000;
final int padding = 4; final int padding = 4;
renderer.glColor(textColor); renderer.glColor(textColor);
@ -134,11 +131,8 @@ public class MathInputScreen extends Screen {
renderer.glColor3f(0.75f, 0, 0); renderer.glColor3f(0.75f, 0, 0);
renderer.glDrawStringRight(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - 4 - size - 4, Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - size / 2 - renderer.getCurrentFont().getCharacterHeight() / 2 - 4, "Press (=) to stop"); renderer.glDrawStringRight(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - 4 - size - 4, Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - size / 2 - renderer.getCurrentFont().getCharacterHeight() / 2 - 4, "Press (=) to stop");
} }
} else { } else if (!result.isContentEmpty())
if (!result.isContentEmpty()) { result.draw(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine, renderer, Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - result.getWidth() - 2, Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - result.getHeight() - 2);
result.draw(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine, renderer, Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - result.getWidth() - 2, Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - result.getHeight() - 2);
}
}
} }
@Override @Override
@ -148,11 +142,10 @@ public class MathInputScreen extends Screen {
final int pos = 2; final int pos = 2;
final int spacersNumb = 1; final int spacersNumb = 1;
int skinN = 0; int skinN = 0;
if (calc.exactMode) { if (calc.exactMode)
skinN = 22; skinN = 22;
} else { else
skinN = 21; skinN = 21;
}
Engine.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); Engine.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
renderer.glFillRect(2 + 18 * pos + 2 * spacersNumb, 2, 16, 16, 16 * skinN, 16 * 0, 16, 16); renderer.glFillRect(2 + 18 * pos + 2 * spacersNumb, 2, 16, 16, 16 * skinN, 16 * 0, 16, 16);
} }
@ -162,13 +155,12 @@ public class MathInputScreen extends Screen {
if (mustRefresh) { if (mustRefresh) {
mustRefresh = false; mustRefresh = false;
return true; return true;
} else { } else
return false; return false;
}
} }
@Override @Override
public boolean onKeyPressed(KeyPressedEvent k) { public boolean onKeyPressed(final KeyPressedEvent k) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "MathInputScreen", "Pressed key " + k.getKey().toString()); Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "MathInputScreen", "Pressed key " + k.getKey().toString());
try { try {
switch (k.getKey()) { switch (k.getKey()) {
@ -200,9 +192,8 @@ public class MathInputScreen extends Screen {
case STEP: case STEP:
currentStep++; currentStep++;
case SIMPLIFY: case SIMPLIFY:
if (!step) { if (!step)
currentStep = 0; currentStep = 0;
}
if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().error != null) { if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().error != null) {
//TODO: make the error management a global API rather than being relegated to this screen. //TODO: make the error management a global API rather than being relegated to this screen.
Engine.getPlatform().getConsoleUtils().out().println(1, "Resetting after error..."); Engine.getPlatform().getConsoleUtils().out().println(1, "Resetting after error...");
@ -211,65 +202,61 @@ public class MathInputScreen extends Screen {
calc.f2 = null; calc.f2 = null;
calc.resultsCount = 0; calc.resultsCount = 0;
return true; return true;
} else { } else if (!computingResult) {
if (!computingResult) { computingResult = true;
computingResult = true; computingThread = new Thread(() -> {
computingThread = new Thread(() -> { try {
try { try {
try { if (!userInput.isAlreadyParsed() && !userInput.isEmpty()) {
if (!userInput.isAlreadyParsed() && !userInput.isEmpty()) { final Expression expr = MathParser.parseInput(calc, userInput);
final Expression expr = MathParser.parseInput(calc, userInput); if (calc.f == null | calc.f2 == null) {
if (calc.f == null | calc.f2 == null) { calc.f = new ObjectArrayList<>();
calc.f = new ObjectArrayList<>(); calc.f2 = new ObjectArrayList<>();
calc.f2 = new ObjectArrayList<>(); } else {
} else { calc.f.clear();
calc.f.clear(); calc.f2.clear();
calc.f2.clear();
}
calc.f.add(expr);
Engine.getPlatform().getConsoleUtils().out().println(2, "INPUT: " + expr);
final MathSolver ms = new MathSolver(expr);
final ObjectArrayList<ObjectArrayList<Function>> resultSteps = ms.solveAllSteps();
resultSteps.add(0, Utils.newArrayList(expr));
final ObjectArrayList<Function> resultExpressions = resultSteps.get(resultSteps.size() - 1);
for (final Function rr : resultExpressions) {
Engine.getPlatform().getConsoleUtils().out().println(0, "RESULT: " + rr.toString());
}
final ObjectArrayList<ObjectArrayList<Block>> resultBlocks = MathParser.parseOutput(calc, resultExpressions);
result.setContentAsMultipleGroups(resultBlocks);
// showVariablesDialog(() -> {
// currentExpression = newExpression;
// simplify();
// });
} }
} catch (final InterruptedException ex) { calc.f.add(expr);
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "Computing thread stopped."); Engine.getPlatform().getConsoleUtils().out().println(2, "INPUT: " + expr);
} catch (final Exception ex) { final MathSolver ms = new MathSolver(expr);
if (Engine.getPlatform().getSettings().isDebugEnabled()) { final ObjectArrayList<ObjectArrayList<Function>> resultSteps = ms.solveAllSteps();
ex.printStackTrace(); resultSteps.add(0, Utils.newArrayList(expr));
} final ObjectArrayList<Function> resultExpressions = resultSteps.get(resultSteps.size() - 1);
throw new Error(Errors.SYNTAX_ERROR); for (final Function rr : resultExpressions)
Engine.getPlatform().getConsoleUtils().out().println(0, "RESULT: " + rr.toString());
final ObjectArrayList<ObjectArrayList<Block>> resultBlocks = MathParser.parseOutput(calc, resultExpressions);
result.setContentAsMultipleGroups(resultBlocks);
// showVariablesDialog(() -> {
// currentExpression = newExpression;
// simplify();
// });
} }
} catch (final Error e) { } catch (final InterruptedException ex) {
d.errorStackTrace = Engine.getPlatform().stacktraceToString(e); Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "Computing thread stopped.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().error = e.id.toString(); } catch (final Exception ex) {
System.err.println(e.id); if (Engine.getPlatform().getSettings().isDebugEnabled())
ex.printStackTrace();
throw new Error(Errors.SYNTAX_ERROR);
} }
computingResult = false; } catch (final Error e) {
}); d.errorStackTrace = Engine.getPlatform().stacktraceToString(e);
Engine.getPlatform().setThreadName(computingThread, "Computing Thread"); Engine.INSTANCE.getHardwareDevice().getDisplayManager().error = e.id.toString();
Engine.getPlatform().setThreadDaemon(computingThread); System.err.println(e.id);
computingThread.setPriority(Thread.NORM_PRIORITY + 3);
computingThread.start();
return true;
} else {
if (computingThread != null) {
computingThread.interrupt();
computingResult = false;
return true;
} }
return false; computingResult = false;
});
Engine.getPlatform().setThreadName(computingThread, "Computing Thread");
Engine.getPlatform().setThreadDaemon(computingThread);
computingThread.setPriority(Thread.NORM_PRIORITY + 3);
computingThread.start();
return true;
} else {
if (computingThread != null) {
computingThread.interrupt();
computingResult = false;
return true;
} }
return false;
} }
case NUM0: case NUM0:
typeChar('0'); typeChar('0');
@ -448,13 +435,12 @@ public class MathInputScreen extends Screen {
} }
return false; return false;
case DRG_CYCLE: case DRG_CYCLE:
if (calc.angleMode.equals(AngleMode.DEG) == true) { if (calc.angleMode.equals(AngleMode.DEG) == true)
calc.angleMode = AngleMode.RAD; calc.angleMode = AngleMode.RAD;
} else if (calc.angleMode.equals(AngleMode.RAD) == true) { else if (calc.angleMode.equals(AngleMode.RAD) == true)
calc.angleMode = AngleMode.GRA; calc.angleMode = AngleMode.GRA;
} else { else
calc.angleMode = AngleMode.DEG; calc.angleMode = AngleMode.DEG;
}
currentStep = 0; currentStep = 0;
return true; return true;
default: default:
@ -470,7 +456,7 @@ public class MathInputScreen extends Screen {
@SuppressWarnings("unused") @SuppressWarnings("unused")
@Deprecated @Deprecated
private ObjectArrayList<Function> solveExpression(ObjectArrayList<Function> f22) { private ObjectArrayList<Function> solveExpression(final ObjectArrayList<Function> f22) {
return null; return null;
/* /*
try { try {
@ -519,7 +505,7 @@ public class MathInputScreen extends Screen {
partialResults.clear(); partialResults.clear();
} }
} }
if (results.size() == 0) { if (results.size() == 0) {
calc.resultsCount = 0; calc.resultsCount = 0;
} else { } else {
@ -561,7 +547,7 @@ public class MathInputScreen extends Screen {
return; return;
} }
} }
final ObjectArrayList<Function> results = solveExpression(calc.f); final ObjectArrayList<Function> results = solveExpression(calc.f);
if (results.size() == 0) { if (results.size() == 0) {
calc.resultsCount = 0; calc.resultsCount = 0;
@ -596,7 +582,7 @@ public class MathInputScreen extends Screen {
@Deprecated @Deprecated
private void changeEquationScreen() { private void changeEquationScreen() {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
// //
// if (!userInput.isEmpty()) { // if (!userInput.isEmpty()) {
// final MathInputScreen cloned = clone(); // final MathInputScreen cloned = clone();
// cloned.userInput.setCaretPosition(cloned.userInput.getCaretMaxPosition()-1); // cloned.userInput.setCaretPosition(cloned.userInput.getCaretMaxPosition()-1);
@ -607,25 +593,22 @@ public class MathInputScreen extends Screen {
// } // }
} }
public void typeChar(char chr) { public void typeChar(final char chr) {
userInput.typeChar(chr); userInput.typeChar(chr);
mustRefresh = true; mustRefresh = true;
} }
@Override @Override
public boolean onKeyReleased(KeyReleasedEvent k) { public boolean onKeyReleased(final KeyReleasedEvent k) {
if (k.getKey() == Key.OK) { if (k.getKey() == Key.OK)
return true; return true;
} else { else if (userInput.isExtraOpened() && userInput.getExtraKeyboardEventListener().onKeyReleased(k))
if (userInput.isExtraOpened() && userInput.getExtraKeyboardEventListener().onKeyReleased(k)) { return true;
return true; else
} else { switch (k.getKey()) {
switch (k.getKey()) { default:
default: return false;
return false;
}
} }
}
} }
public void showVariablesDialog() { public void showVariablesDialog() {
@ -635,11 +618,9 @@ public class MathInputScreen extends Screen {
public void showVariablesDialog(final Runnable runnable) { public void showVariablesDialog(final Runnable runnable) {
final Thread ct = new Thread(() -> { final Thread ct = new Thread(() -> {
final ObjectArrayList<Function> knownVarsInFunctions = getKnownVariables(calc.f.toArray(new Function[calc.f.size()])); final ObjectArrayList<Function> knownVarsInFunctions = getKnownVariables(calc.f.toArray(new Function[calc.f.size()]));
for (final VariableValue f : calc.variablesValues) { for (final VariableValue f : calc.variablesValues)
if (knownVarsInFunctions.contains(f.v)) { if (knownVarsInFunctions.contains(f.v))
knownVarsInFunctions.remove(f.v); knownVarsInFunctions.remove(f.v);
}
}
boolean cancelled = false; boolean cancelled = false;
for (final Function f : knownVarsInFunctions) { for (final Function f : knownVarsInFunctions) {
@ -653,19 +634,15 @@ public class MathInputScreen extends Screen {
break; break;
} else { } else {
final int is = calc.variablesValues.size(); final int is = calc.variablesValues.size();
for (int i = 0; i < is; i++) { for (int i = 0; i < is; i++)
if (calc.variablesValues.get(i).v == f) { if (calc.variablesValues.get(i).v == f)
calc.variablesValues.remove(i); calc.variablesValues.remove(i);
}
}
calc.variablesValues.add(new VariableValue((Variable) f, (Number) cvs.resultNumberValue)); calc.variablesValues.add(new VariableValue((Variable) f, (Number) cvs.resultNumberValue));
} }
} }
if (!cancelled) { if (!cancelled)
if (runnable != null) { if (runnable != null)
runnable.run(); runnable.run();
}
}
}); });
Engine.getPlatform().setThreadName(ct, "Variables user-input queue thread"); Engine.getPlatform().setThreadName(ct, "Variables user-input queue thread");
ct.setPriority(Thread.MIN_PRIORITY); ct.setPriority(Thread.MIN_PRIORITY);
@ -673,23 +650,19 @@ public class MathInputScreen extends Screen {
ct.start(); ct.start();
} }
private ObjectArrayList<Function> getKnownVariables(Function[] fncs) { private ObjectArrayList<Function> getKnownVariables(final Function[] fncs) {
final ObjectArrayList<Function> res = new ObjectArrayList<>(); final ObjectArrayList<Function> res = new ObjectArrayList<>();
for (final Function f : fncs) { for (final Function f : fncs)
if (f instanceof FunctionOperator) { if (f instanceof FunctionOperator)
res.addAll(getKnownVariables(new Function[] { ((FunctionOperator) f).getParameter1(), ((FunctionOperator) f).getParameter2() })); res.addAll(getKnownVariables(new Function[] { ((FunctionOperator) f).getParameter1(), ((FunctionOperator) f).getParameter2() }));
} else if (f instanceof FunctionDynamic) { else if (f instanceof FunctionDynamic)
res.addAll(getKnownVariables(((FunctionDynamic) f).getParameters())); res.addAll(getKnownVariables(((FunctionDynamic) f).getParameters()));
} else if (f instanceof FunctionSingle) { else if (f instanceof FunctionSingle)
res.addAll(getKnownVariables(new Function[] { ((FunctionSingle) f).getParameter() })); res.addAll(getKnownVariables(new Function[] { ((FunctionSingle) f).getParameter() }));
} else if (f instanceof Variable) { else if (f instanceof Variable)
if (((Variable) f).getType() == Variable.V_TYPE.CONSTANT) { if (((Variable) f).getType() == Variable.V_TYPE.CONSTANT)
if (!res.contains(f)) { if (!res.contains(f))
res.add(f); res.add(f);
}
}
}
}
return res; return res;
} }

View File

@ -9,7 +9,7 @@ public class SolveForXScreen extends Screen {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final MathInputScreen es; private final MathInputScreen es;
public SolveForXScreen(MathInputScreen es) { public SolveForXScreen(final MathInputScreen es) {
super(); super();
canBeInHistory = false; canBeInHistory = false;
@ -33,7 +33,7 @@ public class SolveForXScreen extends Screen {
} }
@Override @Override
public void beforeRender(float dt) { public void beforeRender(final float dt) {
} }
@ -43,7 +43,7 @@ public class SolveForXScreen extends Screen {
} }
@Override @Override
public boolean onKeyPressed(KeyPressedEvent k) { public boolean onKeyPressed(final KeyPressedEvent k) {
switch (k.getKey()) { switch (k.getKey()) {
case LETTER_X: case LETTER_X:
//TODO: far funzionare questa parte //TODO: far funzionare questa parte

View File

@ -9,67 +9,67 @@ public interface Function {
/** /**
* Returns this function and its children in a string form. * Returns this function and its children in a string form.
* *
* @return This function and its children in a string form. * @return This function and its children in a string form.
*/ */
@Override @Override
public String toString(); String toString();
@Override @Override
public boolean equals(Object o); boolean equals(Object o);
/** /**
* Deep clone this function. * Deep clone this function.
* *
* @return A clone of this function. * @return A clone of this function.
*/ */
public Function clone(); Function clone();
/** /**
* Generic method to change a parameter in a known position. * Generic method to change a parameter in a known position.
* *
* @param index * @param index
* parameter index. * parameter index.
* @param var * @param var
* parameter. * parameter.
* @return A new instance of this function. * @return A new instance of this function.
*/ */
public Function setParameter(int index, Function var) throws IndexOutOfBoundsException; Function setParameter(int index, Function var) throws IndexOutOfBoundsException;
/** /**
* Generic method to retrieve a parameter in a known position. * Generic method to retrieve a parameter in a known position.
* *
* @param index * @param index
* parameter index. * parameter index.
* @return The requested parameter. * @return The requested parameter.
*/ */
public Function getParameter(int index) throws IndexOutOfBoundsException; Function getParameter(int index) throws IndexOutOfBoundsException;
/** /**
* Retrieve the current Math Context used by this function * Retrieve the current Math Context used by this function
* *
* @return Calculator mathContext * @return Calculator mathContext
*/ */
public MathContext getMathContext(); MathContext getMathContext();
/** /**
* Simplify the current function or it's children using the specified * Simplify the current function or it's children using the specified
* <b>rule</b> * <b>rule</b>
* *
* @param rule * @param rule
* @return A list of the resulting Functions if the rule is applicable and * @return A list of the resulting Functions if the rule is applicable and
* something changed, <b>null</b> otherwise * something changed, <b>null</b> otherwise
* @throws Error * @throws Error
* @throws InterruptedException * @throws InterruptedException
*/ */
public ObjectArrayList<Function> simplify(Rule rule) throws Error, InterruptedException; ObjectArrayList<Function> simplify(Rule rule) throws Error, InterruptedException;
/** /**
* *
* @param context * @param context
* Mathematical Context * Mathematical Context
* @return An ArrayList of parsed Blocks * @return An ArrayList of parsed Blocks
* @throws Error * @throws Error
*/ */
public ObjectArrayList<Block> toBlock(MathContext context) throws Error; ObjectArrayList<Block> toBlock(MathContext context) throws Error;
} }

Some files were not shown because too many files have changed in this diff Show More