Merge remote-tracking branch 'master/dev'

This commit is contained in:
Andrea Cavalli 2019-11-01 15:39:27 +01:00
commit a9dd7de800
101 changed files with 2834 additions and 2365 deletions

View File

@ -18,8 +18,9 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>

View File

@ -1,145 +0,0 @@
package it.cavallium.warppi;
import java.io.IOException;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.boot.StartupArguments;
import it.cavallium.warppi.device.HardwareDevice;
import it.cavallium.warppi.device.HardwareTouchDevice;
import it.cavallium.warppi.device.InputManager;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.gui.DisplayManager;
import it.cavallium.warppi.gui.HUD;
import it.cavallium.warppi.gui.HardwareDisplay;
import it.cavallium.warppi.gui.screens.Screen;
import it.cavallium.warppi.util.ClassUtils;
import it.cavallium.warppi.util.EventSubmitter;
public class Engine {
public static final Engine INSTANCE = new Engine();
private static Platform platform;
private static boolean running = false;
private static EventSubmitter<LoadingStatus> loadPhase = new EventSubmitter<>();
private final EventSubmitter<Boolean> loaded = new EventSubmitter<>(false);
private HardwareDevice hardwareDevice;
private Engine() {}
/**
* Start an instance of the calculator.
*
* @param platform
* Platform implementation
* @param screen
* Default screen to show at startup
* @param disp
* Hardware display
* @param hud
* Head-up display
* @param args
* Startup arguments
* @throws InterruptedException
* @throws IOException
*/
public static void start(final Platform platform, final Screen screen, final HardwareDisplay disp,
final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args)
throws InterruptedException, IOException {
if (Engine.running) {
throw new RuntimeException("Already running!");
} else {
Engine.running = true;
Engine.INSTANCE.startInstance(platform, screen, disp, touchdevice, hud, args);
}
}
private void startInstance(final Platform platform, final Screen screen, final HardwareDisplay disp,
final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args)
throws InterruptedException, IOException {
Engine.platform = platform;
platform.getConsoleUtils().out().println("WarpPI Calculator");
initializeEnvironment(args);
final Thread currentThread = Thread.currentThread();
currentThread.setPriority(Thread.MAX_PRIORITY);
Engine.getPlatform().setThreadName(currentThread, "Main thread");
final DisplayManager dm = new DisplayManager(disp, hud, screen, "WarpPI Calculator by Andrea Cavalli (@Cavallium)");
final Keyboard k = new Keyboard();
final InputManager im = new InputManager(k, touchdevice);
hardwareDevice = new HardwareDevice(dm, im);
hardwareDevice.setup(() -> Engine.loadPhase.submit(new LoadingStatus()));
}
private void onShutdown() {
Engine.platform.getConsoleUtils().out().println(1, "Shutdown...");
beforeShutdown();
Engine.platform.getConsoleUtils().out().println(1, "");
Engine.platform.getConsoleUtils().out().println(1, "Closed.");
Engine.getPlatform().exit(0);
}
private void initializeEnvironment(final StartupArguments args) throws IOException {
ClassUtils.classLoader = this.getClass();
StaticVars.startupArguments = args;
StaticVars.debugWindow2x = args.isZoomed();
if (args.isVerboseLoggingEnabled() || args.isDebugEnabled()) {
StaticVars.outputLevel = ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE;
}
Engine.platform.getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, args);
checkDeviceType();
if (args.isRaspberryModeAllowed() == false) {
Engine.getPlatform().setRunningOnRaspberry(false);
}
if (Engine.getPlatform().isRunningOnRaspberry()) {
Engine.getPlatform().getGpio().wiringPiSetupPhys();
Engine.getPlatform().getGpio().pinMode(12, Engine.getPlatform().getGpio().valuePwmOutput());
} else {
StaticVars.screenPos = new int[] { 0, 0 };
if (Engine.getPlatform().isJavascript() == false) {
Engine.getPlatform().getSettings().setDebugEnabled(true);
}
}
}
private void checkDeviceType() {
// TODO Auto-generated method stub
}
public void beforeShutdown() {
Keyboard.stopKeyboard();
}
public EventSubmitter<Boolean> isLoaded() {
return loaded;
}
public EventSubmitter<LoadingStatus> getLoadPhase() {
return Engine.loadPhase;
}
public HardwareDevice getHardwareDevice() {
return hardwareDevice;
}
public static Platform getPlatform() {
return Engine.platform;
}
public static class LoadingStatus {
protected LoadingStatus() {
}
public void done() {
Engine.INSTANCE.loaded.submit(true);
Engine.INSTANCE.hardwareDevice.getDisplayManager().waitForExit();
Engine.INSTANCE.onShutdown();
}
public void failed() {
Engine.INSTANCE.onShutdown();
}
}
}

View File

@ -9,7 +9,12 @@ import java.net.URL;
import java.util.List;
import java.util.Map;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.boot.StartupArguments;
import it.cavallium.warppi.device.DeviceStateDevice;
import it.cavallium.warppi.device.display.BacklightOutputDevice;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.input.KeyboardInputDevice;
import it.cavallium.warppi.device.input.TouchInputDevice;
import it.cavallium.warppi.util.Error;
public interface Platform {
@ -52,10 +57,16 @@ public interface Platform {
URLClassLoader newURLClassLoader(URL[] urls);
Map<String, GraphicEngine> getEnginesList();
TouchInputDevice getTouchInputDevice();
KeyboardInputDevice getKeyboardInputDevice();
DisplayOutputDevice getDisplayOutputDevice();
GraphicEngine getEngine(String string) throws NullPointerException;
BacklightOutputDevice getBacklightOutputDevice();
DeviceStateDevice getDeviceStateDevice();
void throwNewExceptionInInitializerError(String text);
String[] stacktraceToString(Error e);
@ -99,7 +110,7 @@ public interface Platform {
Object getBoardType();
}
public interface ConsoleUtils {
int OUTPUTLEVEL_NODEBUG = 0;
int OUTPUTLEVEL_DEBUG_MIN = 1;
@ -206,4 +217,6 @@ public interface Platform {
}
void setArguments(StartupArguments args);
}

View File

@ -10,8 +10,6 @@ import it.cavallium.warppi.util.EventSubmitter;
*/
public class StaticVars {
public static final boolean zoomed = true;
public static int[] screenPos = new int[] { 0, 0 };
public static final int[] screenSize = new int[] { 480, 320 };
public static int outputLevel = 0;
public static boolean debugWindow2x = false;
public static EventSubmitter<Float> windowZoom = new EventSubmitter<>(2F);

View File

@ -0,0 +1,156 @@
package it.cavallium.warppi;
import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.boot.StartupArguments;
import it.cavallium.warppi.device.Device;
import it.cavallium.warppi.device.DeviceStateDevice;
import it.cavallium.warppi.device.display.BacklightOutputDevice;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.input.InputManager;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.device.input.KeyboardInputDevice;
import it.cavallium.warppi.device.input.TouchInputDevice;
import it.cavallium.warppi.flow.BehaviorSubject;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.gui.DisplayManager;
import it.cavallium.warppi.gui.HUD;
import it.cavallium.warppi.gui.screens.Screen;
import it.cavallium.warppi.util.ClassUtils;
import it.cavallium.warppi.util.RunnableWithException;
public class WarpPI {
public static final WarpPI INSTANCE = new WarpPI();
private static Platform platform;
private static boolean running = false;
private final BehaviorSubject<Boolean> loaded = BehaviorSubject.create(false);
private Device device;
private WarpPI() {}
/**
* Start an instance of the calculator.
*
* @param platform
* Platform implementation
* @param screen
* Default screen to show at startup
* @param hud
* Head-up display
* @param args
* Startup arguments
* @throws InterruptedException
* @throws IOException
*/
public static Future<Void> start(final Platform platform, final Screen screen, final HUD hud, final StartupArguments args, final RunnableWithException onLoading) throws IOException {
if (WarpPI.running) {
throw new RuntimeException("Already running!");
} else {
WarpPI.running = true;
return WarpPI.INSTANCE.startInstance(platform, screen, hud, args, onLoading);
}
}
private Future<Void> startInstance(final Platform platform, final Screen screen,
final HUD hud, final StartupArguments args, final RunnableWithException onLoading)
throws IOException {
WarpPI.platform = platform;
// Set arguments on platform before everything else
platform.setArguments(args);
platform.getConsoleUtils().out().println("WarpPI Calculator");
initializeEnvironment(args);
final Thread currentThread = Thread.currentThread();
currentThread.setPriority(Thread.MAX_PRIORITY);
WarpPI.getPlatform().setThreadName(currentThread, "Main thread");
return CompletableFuture.runAsync(() -> {
try {
final DisplayOutputDevice display = platform.getDisplayOutputDevice();
final BacklightOutputDevice backlight = platform.getBacklightOutputDevice();
final DisplayManager dm = new DisplayManager(display, backlight, hud, screen, "WarpPI Calculator by Andrea Cavalli (@Cavallium)");
final KeyboardInputDevice keyboard = platform.getKeyboardInputDevice();
final TouchInputDevice touchscreen = platform.getTouchInputDevice();
final DeviceStateDevice deviceState = platform.getDeviceStateDevice();
final InputManager im = new InputManager(keyboard, touchscreen);
device = new Device(dm, im, deviceState);
device.setup();
onLoading.run();
this.loadingCompleted();
} catch (Exception ex) {
this.loadingFailed(ex);
}
}).thenRun(this::onShutdown);
}
private void onShutdown() {
WarpPI.platform.getConsoleUtils().out().println(1, "Shutdown...");
beforeShutdown();
WarpPI.platform.getConsoleUtils().out().println(1, "");
WarpPI.platform.getConsoleUtils().out().println(1, "Closed.");
WarpPI.getPlatform().exit(0);
}
private void initializeEnvironment(final StartupArguments args) throws IOException {
ClassUtils.classLoader = this.getClass();
StaticVars.startupArguments = args;
StaticVars.debugWindow2x = args.isZoomed();
if (args.isVerboseLoggingEnabled() || args.isDebugEnabled()) {
StaticVars.outputLevel = ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE;
}
WarpPI.platform.getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, args);
checkDeviceType();
if (args.isRaspberryModeAllowed() == false) {
WarpPI.getPlatform().setRunningOnRaspberry(false);
}
if (WarpPI.getPlatform().isRunningOnRaspberry()) {
WarpPI.getPlatform().getGpio().wiringPiSetupPhys();
WarpPI.getPlatform().getGpio().pinMode(12, WarpPI.getPlatform().getGpio().valuePwmOutput());
} else {
if (WarpPI.getPlatform().isJavascript() == false) {
WarpPI.getPlatform().getSettings().setDebugEnabled(true);
}
}
}
private void checkDeviceType() {
// TODO Auto-generated method stub
}
public void beforeShutdown() {
Keyboard.stopKeyboard();
}
public Observable<Boolean> isLoaded() {
return loaded;
}
public Device getHardwareDevice() {
return device;
}
public static Platform getPlatform() {
return WarpPI.platform;
}
private void loadingCompleted() {
try {
WarpPI.INSTANCE.loaded.onNext(true);
WarpPI.INSTANCE.device.getDeviceStateDevice().waitForExit().get();
} catch (InterruptedException | ExecutionException e) {
throw new CompletionException(e);
}
}
private void loadingFailed(Exception e) {
e.printStackTrace();
}
}

View File

@ -1,81 +1,78 @@
package it.cavallium.warppi.boot;
import java.util.Arrays;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.Engine.LoadingStatus;
package it.cavallium.warppi.boot;
import java.util.Arrays;
import java.util.concurrent.Future;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform;
import it.cavallium.warppi.device.PIHardwareDisplay;
import it.cavallium.warppi.device.PIHardwareTouchDevice;
import it.cavallium.warppi.gui.CalculatorHUD;
import it.cavallium.warppi.gui.screens.LoadingScreen;
import it.cavallium.warppi.math.rules.RulesManager;
import it.cavallium.warppi.util.Error;
public class Boot {
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(), Boot.parseStartupArguments(args));
Engine.INSTANCE.getLoadPhase().subscribe(Boot::loadCalculator);
}
private static void loadCalculator(final LoadingStatus loading) {
try {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().setBrightness(0.2f);
RulesManager.initialize();
RulesManager.warmUp();
loading.done();
} catch (InterruptedException | Error e) {
e.printStackTrace();
}
loading.failed();
}
public static StartupArguments parseStartupArguments(final String[] a) {
final StartupArgumentsImpl args = new StartupArgumentsImpl();
Arrays.asList(a).stream().parallel().filter((x) -> x != null).map(String::toLowerCase).forEach(arg -> Boot.parseArgument(args, arg));
return args;
}
public static void parseArgument(final StartupArgumentsImpl args, final String arg) {
switch (arg) {
case "-zoomed":
args.setZoomed(true);
break;
case "-verbose":
args.setVerboseLoggingEnabled(true);
break;
case "-noraspi":
args.setRaspberryModeAllowed(false);
break;
case "nogui":
args.setNoGUIEngineForced(true);
break;
case "ms-dos":
args.setMSDOSModeEnabled(true);
break;
case "html":
args.setHTMLEngineForced(true);
break;
case "gpu":
args.setGPUEngineForced(true);
break;
case "cpu":
args.setCPUEngineForced(true);
break;
case "framebuffer":
args.setFrameBufferEngineForced(true);
break;
case "-debug":
args.setDebugEnabled(true);
break;
case "-uncached":
args.setUncached(true);
break;
default:
// Not using ConsoleUtils because it isn't initialized at this point.
System.out.println("Unrecognized argument " + arg);
break;
}
}
}
import it.cavallium.warppi.gui.CalculatorHUD;
import it.cavallium.warppi.gui.screens.LoadingScreen;
import it.cavallium.warppi.math.rules.RulesManager;
public class Boot {
public static void boot(final Platform platform, final String[] args) throws Exception {
Future<Void> execution = WarpPI.start(
platform,
new LoadingScreen(),
new CalculatorHUD(),
Boot.parseStartupArguments(args),
Boot::loadCalculator);
execution.get();
}
private static void loadCalculator() throws Exception {
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().setBrightness(0.2f);
//TODO: plugins system: PluginsManager.initialize();
RulesManager.initialize();
RulesManager.warmUp();
}
public static StartupArguments parseStartupArguments(final String[] a) {
final StartupArgumentsImpl args = new StartupArgumentsImpl();
Arrays.asList(a).stream().parallel().filter((x) -> x != null).map(String::toLowerCase).forEach(arg -> Boot.parseArgument(args, arg));
return args;
}
public static void parseArgument(final StartupArgumentsImpl args, final String arg) {
switch (arg) {
case "-zoomed":
args.setZoomed(true);
break;
case "-verbose":
args.setVerboseLoggingEnabled(true);
break;
case "-noraspi":
args.setRaspberryModeAllowed(false);
break;
case "nogui":
args.setNoGUIEngineForced(true);
break;
case "ms-dos":
args.setMSDOSModeEnabled(true);
break;
case "html":
args.setHTMLEngineForced(true);
break;
case "gpu":
args.setGPUEngineForced(true);
break;
case "cpu":
args.setCPUEngineForced(true);
break;
case "framebuffer":
args.setFrameBufferEngineForced(true);
break;
case "-debug":
args.setDebugEnabled(true);
break;
case "-uncached":
args.setUncached(true);
break;
default:
// Not using ConsoleUtils because it isn't initialized at this point.
System.out.println("Unrecognized argument " + arg);
break;
}
}
}

View File

@ -8,7 +8,7 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.UUID;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
public class CacheFile {
private String path;
@ -22,7 +22,7 @@ public class CacheFile {
path = UUID.randomUUID().toString() + ".ser";
} while (new File(path).exists());
try {
File.createTempFile(Engine.getPlatform().getSettings().getCalculatorNameLowercase(), "");
File.createTempFile(WarpPI.getPlatform().getSettings().getCalculatorNameLowercase(), "");
} catch (final IOException e) {
e.printStackTrace();
}

View File

@ -0,0 +1,38 @@
package it.cavallium.warppi.device;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.input.InputManager;
import it.cavallium.warppi.gui.DisplayManager;
public class Device {
private final DisplayManager displayManager;
private final InputManager inputManager;
private final DeviceStateDevice deviceState;
public Device(final DisplayManager m, final InputManager im, final DeviceStateDevice dm) {
displayManager = m;
inputManager = im;
deviceState = dm;
}
public DisplayManager getDisplayManager() {
return displayManager;
}
public InputManager getInputManager() {
return inputManager;
}
public DeviceStateDevice getDeviceStateDevice() {
return deviceState;
}
public void setup() {
displayManager.initialize();
inputManager.initialize();
deviceState.initialize();
inputManager.getTouchDevice().listenTouchEvents(displayManager.getTouchEventListener());
}
}

View File

@ -0,0 +1,12 @@
package it.cavallium.warppi.device;
import java.util.concurrent.Future;
public interface DeviceStateDevice {
void initialize();
Future<?> waitForExit();
void powerOff();
}

View File

@ -1,32 +0,0 @@
package it.cavallium.warppi.device;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.gui.DisplayManager;
public class HardwareDevice {
private final DisplayManager displayManager;
private final InputManager inputManager;
public HardwareDevice(final DisplayManager m, final InputManager im) {
displayManager = m;
inputManager = im;
}
public DisplayManager getDisplayManager() {
return displayManager;
}
public InputManager getInputManager() {
return inputManager;
}
public void setup(final Runnable r) {
displayManager.initialize();
inputManager.getKeyboard().startKeyboard();
final Thread t = new Thread(r);
Engine.getPlatform().setThreadDaemon(t, false);
Engine.getPlatform().setThreadName(t, "Main thread (after setup)");
t.start();
}
}

View File

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

View File

@ -1,20 +0,0 @@
package it.cavallium.warppi.device;
public class InputManager {
private final Keyboard keyboard;
private final HardwareTouchDevice touchDevice;
public InputManager(final Keyboard k, final HardwareTouchDevice t) {
keyboard = k;
touchDevice = t;
}
public Keyboard getKeyboard() {
return keyboard;
}
public HardwareTouchDevice getTouchDevice() {
return touchDevice;
}
}

View File

@ -1,24 +0,0 @@
package it.cavallium.warppi.device;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.gui.HardwareDisplay;
public class PIHardwareDisplay implements HardwareDisplay {
@Override
public void initialize() {}
@Override
public void shutdown() {}
@Override
public void setBrightness(final double value) {
if (Engine.getPlatform().isRunningOnRaspberry()) {
Engine.getPlatform().getGpio().pwmWrite(12, (int) Math.ceil(value * 1024f));
// SoftPwm.softPwmWrite(12, (int)(Math.ceil(brightness*10)));
} else {
Engine.getPlatform().getConsoleUtils().out().println(1, "Brightness: " + value);
}
}
}

View File

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

View File

@ -1,6 +1,6 @@
package it.cavallium.warppi.device.chip;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
public class ParallelToSerial {
@ -18,16 +18,16 @@ public class ParallelToSerial {
public boolean[] read() {
final boolean[] data = new boolean[8];
Engine.getPlatform().getGpio().digitalWrite(CLK_INH, Engine.getPlatform().getGpio().valueHigh());
Engine.getPlatform().getGpio().digitalWrite(SH_LD, Engine.getPlatform().getGpio().valueLow());
Engine.getPlatform().getGpio().delayMicroseconds(1);
Engine.getPlatform().getGpio().digitalWrite(SH_LD, Engine.getPlatform().getGpio().valueHigh());
Engine.getPlatform().getGpio().digitalWrite(CLK_INH, Engine.getPlatform().getGpio().valueLow());
WarpPI.getPlatform().getGpio().digitalWrite(CLK_INH, WarpPI.getPlatform().getGpio().valueHigh());
WarpPI.getPlatform().getGpio().digitalWrite(SH_LD, WarpPI.getPlatform().getGpio().valueLow());
WarpPI.getPlatform().getGpio().delayMicroseconds(1);
WarpPI.getPlatform().getGpio().digitalWrite(SH_LD, WarpPI.getPlatform().getGpio().valueHigh());
WarpPI.getPlatform().getGpio().digitalWrite(CLK_INH, WarpPI.getPlatform().getGpio().valueLow());
for (int i = 7; i >= 0; i--) {
Engine.getPlatform().getGpio().digitalWrite(CLK, Engine.getPlatform().getGpio().valueHigh());
Engine.getPlatform().getGpio().digitalWrite(CLK, Engine.getPlatform().getGpio().valueLow());
data[i] = Engine.getPlatform().getGpio().digitalRead(QH) == Engine.getPlatform().getGpio().valueHigh() ? true : false;
WarpPI.getPlatform().getGpio().digitalWrite(CLK, WarpPI.getPlatform().getGpio().valueHigh());
WarpPI.getPlatform().getGpio().digitalWrite(CLK, WarpPI.getPlatform().getGpio().valueLow());
data[i] = WarpPI.getPlatform().getGpio().digitalRead(QH) == WarpPI.getPlatform().getGpio().valueHigh() ? true : false;
}
return data;

View File

@ -1,6 +1,6 @@
package it.cavallium.warppi.device.chip;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
public class SerialToParallel {
private final int RCK; //Storage register clock pin (latch pin)
@ -17,15 +17,15 @@ public class SerialToParallel {
if (data.length != 8) {
return;
} else {
Engine.getPlatform().getGpio().digitalWrite(RCK, Engine.getPlatform().getGpio().valueLow());
WarpPI.getPlatform().getGpio().digitalWrite(RCK, WarpPI.getPlatform().getGpio().valueLow());
for (int i = 7; i >= 0; i--) {
Engine.getPlatform().getGpio().digitalWrite(SCK, Engine.getPlatform().getGpio().valueLow());
Engine.getPlatform().getGpio().digitalWrite(SER, data[i]);
Engine.getPlatform().getGpio().digitalWrite(SCK, Engine.getPlatform().getGpio().valueHigh());
WarpPI.getPlatform().getGpio().digitalWrite(SCK, WarpPI.getPlatform().getGpio().valueLow());
WarpPI.getPlatform().getGpio().digitalWrite(SER, data[i]);
WarpPI.getPlatform().getGpio().digitalWrite(SCK, WarpPI.getPlatform().getGpio().valueHigh());
}
Engine.getPlatform().getGpio().digitalWrite(RCK, Engine.getPlatform().getGpio().valueHigh());
WarpPI.getPlatform().getGpio().digitalWrite(RCK, WarpPI.getPlatform().getGpio().valueHigh());
}
}
}

View File

@ -0,0 +1,16 @@
package it.cavallium.warppi.device.display;
public interface BacklightOutputDevice {
/**
* Set the brightness level
* @param value Value from 0.0 to 1.0
*/
void setBrightness(double value);
/**
* Turn on or off the backlight
* @param value true is ON, false is OFF
*/
void setPower(boolean value);
}

View File

@ -0,0 +1,8 @@
package it.cavallium.warppi.device.display;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
public interface DisplayOutputDevice {
public GraphicEngine getGraphicEngine();
public int[] getDisplaySize();
}

View File

@ -0,0 +1,7 @@
package it.cavallium.warppi.device.display;
public class NoDisplaysAvailableException extends RuntimeException {
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,18 @@
package it.cavallium.warppi.device.display;
public class NullBacklightOutputDevice implements BacklightOutputDevice {
private double brightness;
private boolean power;
@Override
public void setBrightness(double value) {
this.brightness = value;
}
@Override
public void setPower(boolean value) {
this.power = value;
}
}

View File

@ -1,4 +1,4 @@
package it.cavallium.warppi.device.graphicengine;
package it.cavallium.warppi.device.display;
import java.io.File;
import java.io.IOException;
@ -7,7 +7,7 @@ import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.util.ClassUtils;
import it.cavallium.warppi.util.Utils;
@ -32,7 +32,7 @@ public class RAWFont {
loadFont("/font_" + name + ".rft");
} catch (final IOException e) {
e.printStackTrace();
Engine.getPlatform().exit(1);
WarpPI.getPlatform().exit(1);
}
chars32 = new int[(maxBound - minBound) * charIntCount];
for (int charIndex = 0; charIndex < maxBound - minBound; charIndex++) {
@ -110,7 +110,7 @@ public class RAWFont {
} catch (final Exception ex) {
ex.printStackTrace();
System.out.println(string);
Engine.getPlatform().exit(-1);
WarpPI.getPlatform().exit(-1);
}
}
} else {

View File

@ -0,0 +1,5 @@
package it.cavallium.warppi.device.input;
public interface HardwareKeyboardDevice {
}

View File

@ -0,0 +1,27 @@
package it.cavallium.warppi.device.input;
import java.util.Objects;
public class InputManager {
private final KeyboardInputDevice keyboard;
private final TouchInputDevice touchDevice;
public InputManager(KeyboardInputDevice keyboard, TouchInputDevice touchscreen) {
this.keyboard = Objects.requireNonNull(keyboard);
this.touchDevice = Objects.requireNonNull(touchscreen);
}
public KeyboardInputDevice getKeyboard() {
return keyboard;
}
public TouchInputDevice getTouchDevice() {
return touchDevice;
}
public void initialize() {
this.keyboard.initialize();
this.touchDevice.initialize();
}
}

View File

@ -1,4 +1,4 @@
package it.cavallium.warppi.device;
package it.cavallium.warppi.device.input;
public interface KeyboardAWTValues {

View File

@ -0,0 +1,7 @@
package it.cavallium.warppi.device.input;
public interface KeyboardInputDevice {
void initialize();
}

View File

@ -1,4 +1,4 @@
package it.cavallium.warppi.device;
package it.cavallium.warppi.device.input;
public interface KeyboardJogampValues {

View File

@ -0,0 +1,41 @@
package it.cavallium.warppi.device.input;
import java.util.function.Consumer;
import it.cavallium.warppi.event.TouchEvent;
import it.cavallium.warppi.event.TouchPoint;
public class NullTouchInputDevice implements TouchInputDevice {
@Override
public boolean getSwappedAxes() {
return false;
}
@Override
public boolean getInvertedX() {
return false;
}
@Override
public boolean getInvertedY() {
return false;
}
@Override
public void listenTouchEvents(Consumer<TouchEvent> touchEventListener) {
}
@Override
public void initialize() {
}
@Override
public TouchPoint makePoint(long id, float x, float y, int maxX, int maxY, float radiusX, float radiusY,
float force, float rotationAngle) {
return new TouchPoint(id, maxX, maxY, radiusX, radiusY, force, rotationAngle);
}
}

View File

@ -0,0 +1,43 @@
package it.cavallium.warppi.device.input;
import java.util.concurrent.Flow.Subscriber;
import java.util.function.Consumer;
import it.cavallium.warppi.event.TouchEvent;
import it.cavallium.warppi.event.TouchEventListener;
import it.cavallium.warppi.event.TouchPoint;
public interface TouchInputDevice {
boolean getSwappedAxes();
boolean getInvertedX();
boolean getInvertedY();
default void setInvertedXY() {}
default void setInvertedX() {}
default void setInvertedY() {}
void listenTouchEvents(Consumer<TouchEvent> touchEventListener);
default TouchPoint makePoint(final long id, float x, float y, final int screenWidth, final int screenHeight,
final float radiusX, final float radiusY, final float force, final float rotationAngle) {
if (getSwappedAxes()) {
final double oldX = x;
final double oldY = y;
x = (float) (oldY * screenWidth / screenHeight);
y = (float) (oldX * screenHeight / screenWidth);
}
if (getInvertedX()) {
x = screenWidth - x;
}
if (getInvertedY()) {
y = screenHeight - y;
}
return new TouchPoint(id, x, y, radiusX, radiusY, force, rotationAngle);
}
void initialize();
}

View File

@ -2,10 +2,11 @@ package it.cavallium.warppi.extra.mario;
import java.io.IOException;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.event.KeyPressedEvent;
import it.cavallium.warppi.event.KeyReleasedEvent;
import it.cavallium.warppi.gui.HistoryBehavior;
@ -48,30 +49,30 @@ public class MarioScreen extends Screen {
public void graphicInitialized() {
try {
if (MarioScreen.skin == null) {
MarioScreen.skin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/marioskin.png");
MarioScreen.skin = d.display.getGraphicEngine().loadSkin("/marioskin.png");
}
if (MarioScreen.groundskin == null) {
MarioScreen.groundskin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/marioground.png");
MarioScreen.groundskin = d.display.getGraphicEngine().loadSkin("/marioground.png");
}
if (MarioScreen.gpuTest2 == null) {
try {
MarioScreen.gpuTest2 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest2");
MarioScreen.gpuTest2 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest2");
} catch (final Exception ex) {}
}
if (MarioScreen.gpuTest1 == null) {
try {
MarioScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest12");
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest12");
MarioScreen.gpuTest12 = true;
} catch (final Exception ex) {
MarioScreen.gpuTest12 = false;
try {
MarioScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest1");
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest1");
} catch (final Exception ex2) {}
}
}
if (MarioScreen.gpuTest3 == null) {
try {
MarioScreen.gpuTest3 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("N:\\gputest\\font_gputest3.png");
MarioScreen.gpuTest3 = d.display.getGraphicEngine().loadSkin("N:\\gputest\\font_gputest3.png");
} catch (final Exception ex) {
ex.printStackTrace();
}
@ -85,30 +86,30 @@ public class MarioScreen extends Screen {
public void initialized() {
try {
if (MarioScreen.skin == null) {
MarioScreen.skin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/marioskin.png");
MarioScreen.skin = d.display.getGraphicEngine().loadSkin("/marioskin.png");
}
if (MarioScreen.groundskin == null) {
MarioScreen.groundskin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/marioground.png");
MarioScreen.groundskin = d.display.getGraphicEngine().loadSkin("/marioground.png");
}
if (MarioScreen.gpuTest2 == null) {
try {
MarioScreen.gpuTest2 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest2");
MarioScreen.gpuTest2 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest2");
} catch (final Exception ex) {}
}
if (MarioScreen.gpuTest1 == null) {
try {
MarioScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest12");
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest12");
MarioScreen.gpuTest12 = true;
} catch (final Exception ex) {
MarioScreen.gpuTest12 = false;
try {
MarioScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest1");
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest1");
} catch (final Exception ex2) {}
}
}
if (MarioScreen.gpuTest3 == null) {
try {
MarioScreen.gpuTest3 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("N:\\gputest\\font_gputest3.png");
MarioScreen.gpuTest3 = d.display.getGraphicEngine().loadSkin("N:\\gputest\\font_gputest3.png");
} catch (final Exception ex) {
ex.printStackTrace();
}
@ -182,24 +183,25 @@ public class MarioScreen extends Screen {
gpuCharTestt1Elapsed -= 1.5;
}
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xff000000);
d.renderer.glClearColor(0xff000000);
}
}
@Override
public void render() {
DisplayOutputDevice display = d.display;
if (errored) {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringLeft(0, 20, "ERROR");
d.renderer.glDrawStringLeft(0, 20, "ERROR");
} else {
if (MarioScreen.groundskin != null) {
final double playerX = g.getPlayer().getX();
final double playerY = g.getPlayer().getY();
MarioScreen.groundskin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
MarioScreen.groundskin.use(d.display);
final MarioWorld w = g.getCurrentWorld();
final int width = w.getWidth();
final int height = w.getHeight();
final float screenX = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() / 2f - 8f;
final float screenY = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2f - 8f;
final float screenX = d.display.getGraphicEngine().getWidth() / 2f - 8f;
final float screenY = d.display.getGraphicEngine().getHeight() / 2f - 8f;
final float shiftX = -8 + 16 * (float) playerX;
final float shiftY = -8 + 16 * (height - (float) playerY);
int blue = -1;
@ -212,59 +214,59 @@ public class MarioScreen extends Screen {
if (b == 0) {
if (blue != 1) {
blue = 1;
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xff9290ff);
d.renderer.glColor(0xff9290ff);
}
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillColor(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16);
d.renderer.glFillColor(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16);
} else {
if (blue != 0) {
blue = 0;
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xffffffff);
d.renderer.glColor(0xffffffff);
}
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16, 0, 0, 16, 16);
d.renderer.glFillRect(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16, 0, 0, 16, 16);
}
}
}
}
if (blue != 0) {
blue = 0;
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xffffffff);
d.renderer.glColor(0xffffffff);
}
//DRAW MARIO
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);
MarioScreen.skin.use(d.display);
d.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);
}
// GPU PERFORMANCE TEST
if (MarioScreen.gpuTest1 != null) {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3f(1, 1, 1);
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);
MarioScreen.gpuTest1.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
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 - (MarioScreen.gpuTest12 ? 256 : 128), gpuCharTest1[gpuCharTest1Num]);
d.renderer.glColor3f(1, 1, 1);
d.renderer.glFillColor(d.display.getGraphicEngine().getWidth() - (MarioScreen.gpuTest12 ? 512 : 256), d.display.getGraphicEngine().getHeight() / 2 - (MarioScreen.gpuTest12 ? 256 : 128), MarioScreen.gpuTest12 ? 512 : 256, MarioScreen.gpuTest12 ? 512 : 256);
MarioScreen.gpuTest1.use(d.display);
d.renderer.glColor3f(0, 0, 0);
d.renderer.glDrawStringRight(d.display.getGraphicEngine().getWidth(), d.display.getGraphicEngine().getHeight() / 2 - (MarioScreen.gpuTest12 ? 256 : 128), gpuCharTest1[gpuCharTest1Num]);
}
if (MarioScreen.gpuTest3 != null) {
MarioScreen.gpuTest3.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
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);
MarioScreen.gpuTest3.use(d.display);
d.renderer.glColor4f(1, 1, 1, 0.7f);
d.renderer.glFillRect(0, display.getDisplaySize()[1] - 128, 224, 128, gpuTestNum * 224, 0, 224, 128);
}
if (MarioScreen.gpuTest2 != null) {
MarioScreen.gpuTest2.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFF000000);
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.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.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.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.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.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.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "G");
MarioScreen.gpuTest2.use(d.display);
d.renderer.glColor(0xFF000000);
d.renderer.glDrawStringRight(display.getDisplaySize()[0], d.display.getGraphicEngine().getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "A");
d.renderer.glColor(0xFF800000);
d.renderer.glDrawStringRight(display.getDisplaySize()[0], d.display.getGraphicEngine().getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "B");
d.renderer.glColor(0xFFeea28e);
d.renderer.glDrawStringRight(display.getDisplaySize()[0], d.display.getGraphicEngine().getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "C");
d.renderer.glColor(0xFFee7255);
d.renderer.glDrawStringRight(display.getDisplaySize()[0], d.display.getGraphicEngine().getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "D");
d.renderer.glColor(0xFFeac0b0);
d.renderer.glDrawStringRight(display.getDisplaySize()[0], d.display.getGraphicEngine().getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "E");
d.renderer.glColor(0xFFf3d8ce);
d.renderer.glDrawStringRight(display.getDisplaySize()[0], d.display.getGraphicEngine().getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "F");
d.renderer.glColor(0xFFffede7);
d.renderer.glDrawStringRight(display.getDisplaySize()[0], d.display.getGraphicEngine().getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "G");
}
}
}

View File

@ -2,14 +2,14 @@ package it.cavallium.warppi.extra.tetris;
import java.io.IOException;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.event.KeyPressedEvent;
import it.cavallium.warppi.event.KeyReleasedEvent;
import it.cavallium.warppi.gui.HistoryBehavior;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.gui.graphicengine.Skin;
import it.cavallium.warppi.gui.screens.Screen;
@ -30,7 +30,7 @@ public class TetrisScreen extends Screen {
private ButtonInfo backPressed = new ButtonInfo();
private GraphicEngine e;
private DisplayOutputDevice e;
private Renderer r;
@ -49,10 +49,10 @@ public class TetrisScreen extends Screen {
@Override
public void graphicInitialized() {
try {
e = d.engine;
e = d.display;
r = d.renderer;
if (TetrisScreen.skin == null) {
TetrisScreen.skin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/tetrisskin.png");
TetrisScreen.skin = d.display.getGraphicEngine().loadSkin("/tetrisskin.png");
}
} catch (final IOException e) {
e.printStackTrace();
@ -66,21 +66,22 @@ public class TetrisScreen extends Screen {
@Override
public void beforeRender(final float dt) {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xff000000);
d.renderer.glClearColor(0xff000000);
g.update(dt, leftPressed, rightPressed, downPressed, upPressed, okPressed, backPressed);
}
@Override
public void render() {
DisplayOutputDevice display = d.display;
if (TetrisScreen.skin != null) {
TetrisScreen.skin.use(e);
}
r.glColor3f(1, 1, 1);
BlockColor[] renderedGrid = g.getRenderedGrid();
int centerScreen = StaticVars.screenSize[0]/2;
int centerScreen = display.getDisplaySize()[0]/2;
int centerGrid = TetrisGame.WIDTH*6/2-1;
final int leftOffset = centerScreen - centerGrid;
final int topOffset = StaticVars.screenSize[1] - TetrisGame.HEIGHT*6-1;
final int topOffset = display.getDisplaySize()[1] - TetrisGame.HEIGHT*6-1;
for (int y = 0; y < TetrisGame.HEIGHT; y++) {
for (int x = 0; x < TetrisGame.WIDTH; x++) {
final int offset = x+y*TetrisGame.WIDTH;

View File

@ -1,8 +1,9 @@
package it.cavallium.warppi.gui;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.gui.graphicengine.Skin;
@ -39,7 +40,8 @@ public class CalculatorHUD extends HUD {
@Override
public void renderTopmostBackground() {
final Renderer r = d.renderer;
final GraphicEngine engine = d.engine;
final DisplayOutputDevice display = d.display;
final GraphicEngine engine = display.getGraphicEngine();
r.glColor(0xFFc5c2af);
r.glFillColor(0, 0, engine.getWidth(), 20);
@ -48,14 +50,15 @@ public class CalculatorHUD extends HUD {
@Override
public void renderTopmost() {
final Renderer r = d.renderer;
final GraphicEngine engine = d.engine;
final DisplayOutputDevice display = d.display;
final GraphicEngine engine = display.getGraphicEngine();
final Skin guiSkin = d.guiSkin;
//DRAW TOP
r.glColor3i(0, 0, 0);
r.glDrawLine(0, 20, engine.getWidth() - 1, 20);
r.glColor3i(255, 255, 255);
guiSkin.use(engine);
guiSkin.use(display);
if (Keyboard.shift) {
r.glFillRect(2 + 18 * 0, 2, 16, 16, 16 * 2, 16 * 0, 16, 16);
} else {
@ -69,31 +72,31 @@ public class CalculatorHUD extends HUD {
int padding = 2;
final int brightness = (int) Math.ceil(Engine.INSTANCE.getHardwareDevice().getDisplayManager().getBrightness() * 9);
final int brightness = (int) Math.ceil(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getBrightness() * 9);
if (brightness <= 10) {
r.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * brightness, 16 * 1, 16, 16);
r.glFillRect(display.getDisplaySize()[0] - (padding + 16), 2, 16, 16, 16 * brightness, 16 * 1, 16, 16);
} else {
Engine.getPlatform().getConsoleUtils().out().println(1, "Brightness error");
WarpPI.getPlatform().getConsoleUtils().out().println(1, "Brightness error");
}
padding += 18 + 6;
final boolean canGoBack = Engine.INSTANCE.getHardwareDevice().getDisplayManager().canGoBack();
final boolean canGoForward = Engine.INSTANCE.getHardwareDevice().getDisplayManager().canGoForward();
final boolean canGoBack = WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().canGoBack();
final boolean canGoForward = WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().canGoForward();
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
r.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 18, 16 * 0, 16, 16);
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
r.glFillRect(display.getDisplaySize()[0] - (padding + 16), 2, 16, 16, 16 * 18, 16 * 0, 16, 16);
padding += 18 + 6;
}
if (canGoBack && canGoForward) {
r.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 14, 16 * 0, 16, 16);
r.glFillRect(display.getDisplaySize()[0] - (padding + 16), 2, 16, 16, 16 * 14, 16 * 0, 16, 16);
} else if (canGoBack) {
r.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 15, 16 * 0, 16, 16);
r.glFillRect(display.getDisplaySize()[0] - (padding + 16), 2, 16, 16, 16 * 15, 16 * 0, 16, 16);
} else if (canGoForward) {
r.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 16, 16 * 0, 16, 16);
r.glFillRect(display.getDisplaySize()[0] - (padding + 16), 2, 16, 16, 16 * 16, 16 * 0, 16, 16);
} else {
r.glFillRect(StaticVars.screenSize[0] - (padding + 16), 2, 16, 16, 16 * 17, 16 * 0, 16, 16);
r.glFillRect(display.getDisplaySize()[0] - (padding + 16), 2, 16, 16, 16 * 17, 16 * 0, 16, 16);
}
padding += 18;
@ -101,23 +104,23 @@ public class CalculatorHUD extends HUD {
//DRAW BOTTOM
r.glDrawStringLeft(2, 90, d.displayDebugString);
Utils.getFont(true, false).use(engine);
Utils.getFont(true, false).use(display);
r.glColor4i(255, 0, 0, 40);
r.glDrawStringLeft(1 + 1, StaticVars.screenSize[1] - 7 - 7 + 1, "WORK IN");
r.glDrawStringLeft(1 + 1, display.getDisplaySize()[1] - 7 - 7 + 1, "WORK IN");
r.glColor4i(255, 0, 0, 80);
r.glDrawStringLeft(1, StaticVars.screenSize[1] - 7 - 7, "WORK IN");
r.glDrawStringLeft(1, display.getDisplaySize()[1] - 7 - 7, "WORK IN");
r.glColor4i(255, 0, 0, 40);
r.glDrawStringLeft(1 + 1, StaticVars.screenSize[1] - 7 + 1, "PROGRESS.");
r.glDrawStringLeft(1 + 1, display.getDisplaySize()[1] - 7 + 1, "PROGRESS.");
r.glColor4i(255, 0, 0, 80);
r.glDrawStringLeft(1, StaticVars.screenSize[1] - 7, "PROGRESS.");
r.glDrawStringLeft(1, display.getDisplaySize()[1] - 7, "PROGRESS.");
int currentDebugLine = 2;
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
ObjectArrayList<Screen> allSessions = new ObjectArrayList<>();
for (Screen session : Engine.INSTANCE.getHardwareDevice().getDisplayManager().sessions) {
for (Screen session : WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().sessions) {
allSessions.add(0, session);
}
Screen curScreen = Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen();
Screen curScreen = WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getScreen();
if (curScreen.historyBehavior == HistoryBehavior.DONT_KEEP_IN_HISTORY) {
allSessions.add(curScreen);
}
@ -126,7 +129,7 @@ public class CalculatorHUD extends HUD {
if (session != null) {
String title = session.getSessionTitle();
if (title != null && title.length() > 0) {
Utils.getFont(true).use(engine);
Utils.getFont(true).use(display);
if (session.historyBehavior == HistoryBehavior.DONT_KEEP_IN_HISTORY) {
r.glColor(0xFF3333FF);
} else if (session.historyBehavior == HistoryBehavior.ALWAYS_KEEP_IN_HISTORY) {
@ -134,19 +137,19 @@ public class CalculatorHUD extends HUD {
} else {
r.glColor(0xFF990000);
}
r.glDrawStringLeft(0, StaticVars.screenSize[1] - ((currentDebugLine+1) * (r.getCurrentFont().getCharacterHeight()+1)), "[" + String.format("%1$03d", session.debugScreenID) + "] " + title.toUpperCase());
if (session == Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen()) {
r.glDrawStringLeft(0, display.getDisplaySize()[1] - ((currentDebugLine+1) * (r.getCurrentFont().getCharacterHeight()+1)), "[" + String.format("%1$03d", session.debugScreenID) + "] " + title.toUpperCase());
if (session == WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getScreen()) {
r.glColor(0xFF00CC00);
} else {
r.glColor(0xFF990000);
}
r.glDrawStringLeft(0, StaticVars.screenSize[1] - ((currentDebugLine+1) * (r.getCurrentFont().getCharacterHeight()+1)), " " + title.toUpperCase());
r.glDrawStringLeft(0, display.getDisplaySize()[1] - ((currentDebugLine+1) * (r.getCurrentFont().getCharacterHeight()+1)), " " + title.toUpperCase());
}
currentDebugLine++;
}
}
r.glColor(0xFF000000);
r.glDrawStringLeft(5, StaticVars.screenSize[1] - ((currentDebugLine+1) * (r.getCurrentFont().getCharacterHeight()+1)), "DEBUG ENABLED");
r.glDrawStringLeft(5, display.getDisplaySize()[1] - ((currentDebugLine+1) * (r.getCurrentFont().getCharacterHeight()+1)), "DEBUG ENABLED");
}
}

View File

@ -4,10 +4,20 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Flow.Subscriber;
import java.util.function.Consumer;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.device.display.BacklightOutputDevice;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.event.TouchCancelEvent;
import it.cavallium.warppi.event.TouchEndEvent;
import it.cavallium.warppi.event.TouchEvent;
import it.cavallium.warppi.event.TouchMoveEvent;
import it.cavallium.warppi.event.TouchStartEvent;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
@ -26,8 +36,9 @@ public final class DisplayManager implements RenderingLoop {
private float brightness;
public final GraphicEngine engine;
public final HardwareDisplay monitor;
public final DisplayOutputDevice display;
public final GraphicEngine graphicEngine;
public final BacklightOutputDevice backlight;
public final boolean supportsPauses;
public Renderer renderer;
@ -50,15 +61,16 @@ public final class DisplayManager implements RenderingLoop {
*/
public boolean forceRefresh;
public DisplayManager(final HardwareDisplay monitor, final HUD hud, final Screen screen, final String title) {
this.monitor = monitor;
public DisplayManager(final DisplayOutputDevice display, final BacklightOutputDevice backlight, final HUD hud, final Screen screen, final String title) {
this.display = display;
this.graphicEngine = display.getGraphicEngine();
this.backlight = backlight;
this.hud = hud;
initialTitle = title;
initialScreen = screen;
screenChange = Engine.getPlatform().newSemaphore();
engine = chooseGraphicEngine();
supportsPauses = engine.doesRefreshPauses();
screenChange = WarpPI.getPlatform().newSemaphore();
supportsPauses = graphicEngine.doesRefreshPauses();
glyphsHeight = new int[] { 9, 6, 12, 9 };
displayDebugString = "";
@ -66,8 +78,6 @@ public final class DisplayManager implements RenderingLoop {
}
public void initialize() {
monitor.initialize();
try {
hud.d = this;
hud.create();
@ -76,18 +86,17 @@ public final class DisplayManager implements RenderingLoop {
}
} catch (final Exception e) {
e.printStackTrace();
Engine.getPlatform().exit(0);
WarpPI.getPlatform().exit(0);
}
try {
engine.create();
renderer = engine.getRenderer();
engine.setTitle(initialTitle);
graphicEngine.create();
renderer = graphicEngine.getRenderer();
graphicEngine.setTitle(initialTitle);
loop();
} catch (final Exception ex) {
ex.printStackTrace();
}
monitor.shutdown();
}
/*
@ -110,54 +119,6 @@ public final class DisplayManager implements RenderingLoop {
* GL_UNSIGNED_BYTE, skin); } catch (IOException ex) { ex.printStackTrace(); } }
*/
private GraphicEngine chooseGraphicEngine() {
GraphicEngine d;
d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "framebuffer engine", null);
if (d != null && d.isSupported()) {
Engine.getPlatform().getConsoleUtils().out().println(1, "Using FB Graphic Engine");
return d;
}
d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "CPU engine", null);
if (d != null && d.isSupported()) {
Engine.getPlatform().getConsoleUtils().out().println(1, "Using CPU Graphic Engine");
return d;
}
d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "GPU engine", null);
if (d != null && d.isSupported()) {
Engine.getPlatform().getConsoleUtils().out().println(1, "Using GPU Graphic Engine");
return d;
}
d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "headless 24 bit engine", null);
if (d != null && d.isSupported()) {
System.err.println(
"Using Headless 24 bit Engine! This is a problem! No other graphic engines are available.");
return d;
}
d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "headless 256 colors engine", null);
if (d != null && d.isSupported()) {
System.err.println("Using Headless 256 Engine! This is a problem! No other graphic engines are available.");
return d;
}
d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "headless 8 colors engine", null);
if (d != null && d.isSupported()) {
System.err
.println("Using Headless basic Engine! This is a problem! No other graphic engines are available.");
return d;
}
d = Utils.getOrDefault(Engine.getPlatform().getEnginesList(), "HTML5 engine", null);
if (d != null && d.isSupported()) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_NODEBUG,
"Using Html Graphic Engine");
return d;
}
d = new NoGuiEngine();
if (d != null && d.isSupported()) {
Engine.getPlatform().getConsoleUtils().out().println(1, "Using NoGui Graphic Engine");
return d;
}
throw new UnsupportedOperationException("No graphic engines available.");
}
public void closeScreen() {
boolean isLastSession = sessions[1] == null;
if (!isLastSession) {
@ -249,7 +210,7 @@ public final class DisplayManager implements RenderingLoop {
screenChange.release();
} catch (final Exception e) {
e.printStackTrace();
Engine.getPlatform().exit(0);
WarpPI.getPlatform().exit(0);
}
}
@ -275,7 +236,7 @@ public final class DisplayManager implements RenderingLoop {
screenChange.release();
} catch (final Exception e) {
e.printStackTrace();
Engine.getPlatform().exit(0);
WarpPI.getPlatform().exit(0);
}
}
@ -353,77 +314,85 @@ public final class DisplayManager implements RenderingLoop {
}
private void load_skin() throws IOException {
guiSkin = engine.loadSkin("/skin.png");
guiSkin = graphicEngine.loadSkin("/skin.png");
}
private void load_fonts() throws IOException {
fonts = new BinaryFont[7];
fonts[0] = engine.loadFont("smal");
fonts[1] = engine.loadFont("smallest");
fonts[2] = engine.loadFont("norm");
fonts[3] = engine.loadFont("smal");
fonts[0] = graphicEngine.loadFont("smal");
fonts[1] = graphicEngine.loadFont("smallest");
fonts[2] = graphicEngine.loadFont("norm");
fonts[3] = graphicEngine.loadFont("smal");
// 4
// fonts[5] = engine.loadFont("square");
}
private void draw_init() {
if (engine.supportsFontRegistering()) {
final List<BinaryFont> fontsIterator = engine.getRegisteredFonts();
if (graphicEngine.supportsFontRegistering()) {
final List<BinaryFont> fontsIterator = graphicEngine.getRegisteredFonts();
for (final BinaryFont f : fontsIterator) {
if (!f.isInitialized()) {
f.initialize(engine);
f.initialize(display);
}
}
}
if (!screen.graphicInitialized) {
try {
screen.initializeGraphic();
var displaySize = display.getDisplaySize();
var fullCtx = new RenderContext(graphicEngine, renderer, displaySize[0], displaySize[1]);
screen.initializeGraphic(fullCtx);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
renderer.glClear(engine.getWidth(), engine.getHeight());
renderer.glClear(graphicEngine.getWidth(), graphicEngine.getHeight());
}
private void draw_world() {
var displaySize = display.getDisplaySize();
var scrWidth = displaySize[0] - hud.getMarginLeft() - hud.getMarginRight();
var scrHeight = displaySize[1] - hud.getMarginTop() - hud.getMarginBottom();
var scrCtx = new RenderContext(graphicEngine, renderer.getBoundedInstance(hud.getMarginLeft(), hud.getMarginTop(), scrWidth, scrHeight), scrWidth, scrHeight);
var fullCtdx = new RenderContext(graphicEngine, renderer, displaySize[0], displaySize[1]);
renderer.glColor3i(255, 255, 255);
if (error != null) {
final BinaryFont fnt = Utils.getFont(false, false);
if (fnt != null && fnt != engine.getRenderer().getCurrentFont()) {
fnt.use(engine);
if (fnt != null && fnt != graphicEngine.getRenderer().getCurrentFont()) {
fnt.use(display);
}
renderer.glColor3i(129, 28, 22);
renderer.glDrawStringRight(StaticVars.screenSize[0] - 2,
StaticVars.screenSize[1] - (fnt.getCharacterHeight() + 2),
Engine.getPlatform().getSettings().getCalculatorNameUppercase() + " CALCULATOR");
renderer.glDrawStringRight(display.getDisplaySize()[0] - 2,
display.getDisplaySize()[1] - (fnt.getCharacterHeight() + 2),
WarpPI.getPlatform().getSettings().getCalculatorNameUppercase() + " CALCULATOR");
renderer.glColor3i(149, 32, 26);
renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, 22, error);
renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, 22, error);
renderer.glColor3i(164, 34, 28);
int i = 22;
for (final String stackPart : errorStackTrace) {
renderer.glDrawStringLeft(2, 22 + i, stackPart);
i += 11;
}
if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont()) {
fonts[0].use(engine);
if (fonts[0] != null && fonts[0] != graphicEngine.getRenderer().getCurrentFont()) {
fonts[0].use(display);
}
renderer.glColor3i(129, 28, 22);
renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, 11, "UNEXPECTED EXCEPTION");
renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, 11, "UNEXPECTED EXCEPTION");
} else {
if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont()) {
fonts[0].use(engine);
if (fonts[0] != null && fonts[0] != graphicEngine.getRenderer().getCurrentFont()) {
fonts[0].use(display);
}
if (hud.visible)
hud.renderBackground();
screen.render();
screen.render(scrCtx);
if (hud.visible) {
hud.render();
hud.render(fullCtdx);
hud.renderTopmostBackground();
}
screen.renderTopmost();
screen.renderTopmost(scrCtx);
if (hud.visible)
hud.renderTopmost();
hud.renderTopmost(fullCtdx);
}
}
@ -435,8 +404,8 @@ public final class DisplayManager implements RenderingLoop {
private long precTime = -1;
@Override
public void refresh() {
if (supportsPauses == false || Keyboard.popRefreshRequest() || forceRefresh || screen.mustBeRefreshed()) {
public void refresh(boolean force) {
if (force || supportsPauses == false || Keyboard.popRefreshRequest() || forceRefresh || screen.mustBeRefreshed()) {
forceRefresh = false;
draw();
}
@ -455,7 +424,7 @@ public final class DisplayManager implements RenderingLoop {
}
} catch (final Exception e) {
e.printStackTrace();
Engine.getPlatform().exit(0);
WarpPI.getPlatform().exit(0);
}
var displayRefreshManager = new DisplayRefreshManager(this::onRefresh);
@ -494,7 +463,7 @@ public final class DisplayManager implements RenderingLoop {
public void setBrightness(final float newval) {
if (newval >= 0 && newval <= 1) {
brightness = newval;
monitor.setBrightness(brightness);
backlight.setBrightness(brightness);
}
}
@ -530,7 +499,31 @@ public final class DisplayManager implements RenderingLoop {
renderer.glFillRect(x, y, uvX2 - uvX, uvY2 - uvY, uvX, uvY, uvX2 - uvX, uvY2 - uvY);
}
public void waitForExit() {
engine.waitForExit();
public Consumer<TouchEvent> getTouchEventListener() {
return (TouchEvent t) -> {
boolean refresh = false;
if (screen != null && screen.initialized && executeTouchEventOnScreen(t, screen)) {
refresh = true;
} else {
//Default behavior
}
if (refresh) {
forceRefresh = true;
}
};
}
private boolean executeTouchEventOnScreen(TouchEvent t, Screen scr) {
if (t instanceof TouchStartEvent) {
return scr.onTouchStart((TouchStartEvent) t);
} else if (t instanceof TouchMoveEvent) {
return scr.onTouchMove((TouchMoveEvent) t);
} else if (t instanceof TouchEndEvent) {
return scr.onTouchEnd((TouchEndEvent) t);
} else if (t instanceof TouchCancelEvent) {
return scr.onTouchCancel((TouchCancelEvent) t);
} else {
throw new UnsupportedOperationException();
}
}
}

View File

@ -1,6 +1,6 @@
package it.cavallium.warppi.gui;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.util.Error;
@ -20,9 +20,9 @@ public class GUIErrorMessage {
creationTime = System.currentTimeMillis();
}
public void draw(final GraphicEngine g, final Renderer r, final String msg) {
final int scrW = g.getWidth();
final int scrH = g.getHeight();
public void draw(final DisplayOutputDevice g, final Renderer r, final String msg) {
final int scrW = g.getGraphicEngine().getWidth();
final int scrH = g.getGraphicEngine().getHeight();
final int width = 200;
final int height = 20;
final int margin = 4;

View File

@ -5,13 +5,13 @@ public interface GraphicalInterface {
void initialize() throws InterruptedException;
void initializeGraphic() throws InterruptedException;
void initializeGraphic(ScreenContext ctx) throws InterruptedException;
void render();
void render(RenderContext ctx);
void renderTopmost();
void renderTopmost(RenderContext ctx);
void beforeRender(float dt);
void beforeRender(ScreenContext ctx, float dt);
boolean mustBeRefreshed();
}

View File

@ -1,5 +1,7 @@
package it.cavallium.warppi.gui;
import it.cavallium.warppi.gui.screens.Screen;
public abstract class HUD implements GraphicalInterface {
public DisplayManager d;
public boolean created = false;
@ -18,7 +20,7 @@ public abstract class HUD implements GraphicalInterface {
}
@Override
public void initializeGraphic() throws InterruptedException {
public void initializeGraphic(ScreenContext ctx) throws InterruptedException {
if (!graphicInitialized) {
graphicInitialized = true;
graphicInitialized();
@ -42,15 +44,15 @@ public abstract class HUD implements GraphicalInterface {
public abstract void renderBackground();
@Override
public abstract void render();
public abstract void render(RenderContext ctx);
public abstract void renderTopmostBackground();
@Override
public abstract void renderTopmost();
public abstract void renderTopmost(RenderContext ctx);
@Override
public abstract void beforeRender(float dt);
public abstract void beforeRender(ScreenContext ctx, float dt);
@Override
public boolean mustBeRefreshed() {
@ -65,4 +67,11 @@ public abstract class HUD implements GraphicalInterface {
visible = true;
}
public abstract int getMarginLeft();
public abstract int getMarginTop();
public abstract int getMarginRight();
public abstract int getMarginBottom();
}

View File

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

View File

@ -0,0 +1,17 @@
package it.cavallium.warppi.gui;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
public class RenderContext extends ScreenContext {
private final Renderer renderer;
public RenderContext(GraphicEngine graphicEngine, Renderer renderer, int width, int height) {
super(graphicEngine, width, height);
this.renderer = renderer;
}
public Renderer getRenderer() {
return renderer;
}
}

View File

@ -0,0 +1,27 @@
package it.cavallium.warppi.gui;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
public class ScreenContext {
private final GraphicEngine graphicEngine;
private final int width;
private final int height;
public ScreenContext(GraphicEngine graphicEngine, int width, int height) {
this.graphicEngine = graphicEngine;
this.width = width;
this.height = height;
}
public GraphicEngine getGraphicEngine() {
return graphicEngine;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
}

View File

@ -2,11 +2,11 @@ package it.cavallium.warppi.gui.expression;
import java.util.Arrays;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.event.KeyboardEventListener;
import it.cavallium.warppi.gui.expression.blocks.Block;
import it.cavallium.warppi.gui.expression.blocks.BlockVariable;
import it.cavallium.warppi.gui.expression.blocks.TreeContainer;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
public abstract class ExtraMenu<T extends Block> implements KeyboardEventListener {
@ -32,7 +32,7 @@ public abstract class ExtraMenu<T extends Block> implements KeyboardEventListene
protected int height;
protected int[] location;
public abstract void draw(GraphicEngine ge, Renderer r, Caret caret);
public abstract void draw(DisplayOutputDevice ge, Renderer r, Caret caret);
public abstract void open();

View File

@ -1,10 +1,10 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.GraphicalElement;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.ExtraMenu;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.MathContext;
import it.cavallium.warppi.math.parser.features.interfaces.Feature;
@ -45,7 +45,7 @@ public abstract class Block implements TreeBlock, GraphicalElement {
* Position relative to the window.
* @param small
*/
public abstract void draw(GraphicEngine ge, Renderer r, int x, int y, Caret caret);
public abstract void draw(DisplayOutputDevice ge, Renderer r, int x, int y, Caret caret);
public abstract boolean putBlock(Caret caret, Block newBlock);

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.MathContext;
import it.cavallium.warppi.math.parser.features.FeatureChar;
@ -29,7 +29,7 @@ public class BlockChar extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
r.glDrawCharLeft(x, y, ch);

View File

@ -2,13 +2,13 @@ package it.cavallium.warppi.gui.expression.blocks;
import java.util.Arrays;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.GraphicalElement;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.CaretState;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -182,7 +182,7 @@ public class BlockContainer implements TreeContainer, GraphicalElement {
* @param caret
* Position of the caret.
*/
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
int paddingX = 1;
if (caret.getRemaining() == 0) {
@ -396,7 +396,7 @@ public class BlockContainer implements TreeContainer, GraphicalElement {
return BlockContainer.defFontSizes[b ? 3 : 1];
}
public static void drawCaret(final GraphicEngine ge, final Renderer r, final Caret caret, final boolean small,
public static void drawCaret(final DisplayOutputDevice 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) {
r.glColor(BlockContainer.getDefaultColor());
@ -424,7 +424,7 @@ public class BlockContainer implements TreeContainer, GraphicalElement {
private static void checkInitialized() {
if (!BlockContainer.initialized) {
Engine.getPlatform().throwNewExceptionInInitializerError("Please initialize BlockContainer by running the method BlockContainer.initialize(...) first!");
WarpPI.getPlatform().throwNewExceptionInInitializerError("Please initialize BlockContainer by running the method BlockContainer.initialize(...) first!");
}
}

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -38,7 +38,7 @@ public class BlockDivision extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
containerUp.draw(ge, r, x + 1 + paddingLeftUpper, y, caret);

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
public class BlockExponentialNotation extends BlockPower {
@ -25,7 +25,7 @@ public class BlockExponentialNotation extends BlockPower {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
r.glDrawStringLeft(x, y + height - bh, "");

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -56,7 +56,7 @@ public class BlockLogarithm extends Block implements IParenthesis {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
if (prefix != null) {

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.MathContext;
import it.cavallium.warppi.math.parser.features.interfaces.Feature;
@ -52,7 +52,7 @@ public abstract class BlockParenthesisAbstract extends Block implements IParenth
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
if (prefix != null) {

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -26,7 +26,7 @@ public class BlockPower extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(true).use(ge);
r.glColor(BlockContainer.getDefaultColor());
containerExponent.draw(ge, r, x, y, caret);

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -32,7 +32,7 @@ public class BlockPower2 extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(true).use(ge);
r.glColor(BlockContainer.getDefaultColor());
containerExponent.draw(ge, r, x, y, caret);

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -29,7 +29,7 @@ public class BlockSquareRoot extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
r.glDrawLine(x, y + height - 10 + 1, x, y + height - 10 + 2); // /

View File

@ -1,8 +1,8 @@
package it.cavallium.warppi.gui.expression.blocks;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.MathContext;
import it.cavallium.warppi.math.MathematicalSymbols;
@ -21,7 +21,7 @@ public class BlockUndefined extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
r.glDrawStringLeft(x, y, "UNDEFINED");

View File

@ -2,14 +2,14 @@ package it.cavallium.warppi.gui.expression.blocks;
import java.util.Arrays;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.event.KeyPressedEvent;
import it.cavallium.warppi.event.KeyReleasedEvent;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.ExtraMenu;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.MathContext;
import it.cavallium.warppi.math.functions.Variable.V_TYPE;
@ -82,7 +82,7 @@ public class BlockVariable extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y, final Caret caret) {
if (ic.variableTypeDirtyID != typeDirtyID) {
retrieveValue();
}
@ -238,9 +238,9 @@ public class BlockVariable extends Block {
}
@Override
public void draw(final GraphicEngine ge, final Renderer r, final Caret caret) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final Caret caret) {
r.glColor3f(1.0f, 1.0f, 1.0f);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(ge);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(ge);
int popupX = location[0];
int popupY = location[1];
if (popupX < 0) {
@ -249,7 +249,7 @@ public class BlockVariable extends Block {
if (popupY < 0) {
popupY = 0;
}
final int[] screenSize = ge.getSize();
final int[] screenSize = ge.getDisplaySize();
if (popupX + width >= screenSize[0]) {
popupX = screenSize[0] - width - 1;
}

View File

@ -1,5 +1,6 @@
package it.cavallium.warppi.gui.expression.containers;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.event.KeyboardEventListener;
import it.cavallium.warppi.gui.GraphicalElement;
import it.cavallium.warppi.gui.expression.Caret;
@ -10,7 +11,6 @@ import it.cavallium.warppi.gui.expression.blocks.Block;
import it.cavallium.warppi.gui.expression.blocks.BlockContainer;
import it.cavallium.warppi.gui.expression.blocks.BlockReference;
import it.cavallium.warppi.gui.expression.layouts.InputLayout;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -211,7 +211,7 @@ public abstract class InputContainer implements GraphicalElement, InputLayout {
* @param y
* Position relative to the window.
*/
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y) {
caret.resetRemaining();
root.draw(ge, r, x, y, caret);
if (extra != null) {

View File

@ -1,12 +1,12 @@
package it.cavallium.warppi.gui.expression.containers;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.GraphicalElement;
import it.cavallium.warppi.gui.expression.Caret;
import it.cavallium.warppi.gui.expression.CaretState;
import it.cavallium.warppi.gui.expression.blocks.Block;
import it.cavallium.warppi.gui.expression.blocks.BlockContainer;
import it.cavallium.warppi.gui.expression.layouts.OutputLayout;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
@ -119,7 +119,7 @@ public abstract class OutputContainer implements GraphicalElement, OutputLayout
* @param y
* Position relative to the window.
*/
public void draw(final GraphicEngine ge, final Renderer r, final int x, final int y) {
public void draw(final DisplayOutputDevice ge, final Renderer r, final int x, final int y) {
int offset = 0;
for (final BlockContainer root : roots) {
root.draw(ge, r, x, y + offset, caret);

View File

@ -10,20 +10,22 @@ public interface GraphicEngine {
int[] getSize();
boolean isSupported();
boolean isInitialized();
void setTitle(String title);
void setResizable(boolean r);
void setDisplayMode(final int ww, final int wh);
void setDisplayMode(int ww, int wh);
void create(Runnable object);
default void create() {
create(null);
};
void create(Runnable object);
EventSubscriber<Integer[]> onResize();
int getWidth();
@ -44,10 +46,6 @@ public interface GraphicEngine {
Skin loadSkin(String file) throws IOException;
void waitForExit();
boolean isSupported();
boolean doesRefreshPauses();
default boolean supportsFontRegistering() {

View File

@ -42,4 +42,6 @@ public interface Renderer {
void glClearSkin();
BinaryFont getCurrentFont();
Renderer getBoundedInstance(int dx, int dy, int width, int height);
}

View File

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

View File

@ -3,15 +3,17 @@ package it.cavallium.warppi.gui.graphicengine;
import java.io.IOException;
import java.net.URISyntaxException;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
public interface Skin {
void load(String file) throws IOException, URISyntaxException;
void initialize(GraphicEngine d);
void initialize(DisplayOutputDevice d);
boolean isInitialized();
void use(GraphicEngine d);
void use(DisplayOutputDevice d);
/**
* May not be available before initialization

View File

@ -3,9 +3,9 @@ package it.cavallium.warppi.gui.graphicengine.impl.common;
import java.io.File;
import java.io.IOException;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.ImageUtils.ImageReader;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.Skin;
public abstract class PngSkin implements Skin {
@ -25,7 +25,7 @@ public abstract class PngSkin implements Skin {
if (!file.startsWith("/")) {
file = "/" + file;
}
final ImageReader r = Engine.getPlatform().getImageUtils().load(Engine.getPlatform().getStorageUtils().getResourceStream(file));
final ImageReader r = WarpPI.getPlatform().getImageUtils().load(WarpPI.getPlatform().getStorageUtils().getResourceStream(file));
if (r == null) {
skinData = new int[0];
skinSize = new int[] { 0, 0 };
@ -37,7 +37,7 @@ public abstract class PngSkin implements Skin {
}
@Override
public void initialize(final GraphicEngine d) {
public void initialize(final DisplayOutputDevice d) {
// TODO Auto-generated method stub
}

View File

@ -8,10 +8,10 @@ import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.util.Utils;
public abstract class RFTFont implements BinaryFont {
@ -62,7 +62,7 @@ public abstract class RFTFont implements BinaryFont {
}
private void load(final String path, final boolean onlyRaw) throws IOException {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN + 1, "Loading font " + path);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN + 1, "Loading font " + path);
loadFont(path);
if (!onlyRaw) {
chars32 = new int[intervalsTotalSize * charIntCount];
@ -94,14 +94,14 @@ public abstract class RFTFont implements BinaryFont {
}
}
Engine.getPlatform().gc();
WarpPI.getPlatform().gc();
}
private void loadFont(String string) throws IOException {
if (!string.startsWith("/")) {
string = "/" + string;
}
InputStream res = Engine.getPlatform().getStorageUtils().getResourceStream(string);
InputStream res = WarpPI.getPlatform().getStorageUtils().getResourceStream(string);
final int[] file = Utils.realBytes(Utils.convertStreamToByteArray(res, res.available()));
final int filelength = file.length;
if (filelength >= 16) {
@ -140,7 +140,7 @@ public abstract class RFTFont implements BinaryFont {
} catch (final Exception ex) {
ex.printStackTrace();
System.out.println(string);
Engine.getPlatform().exit(-1);
WarpPI.getPlatform().exit(-1);
}
}
} else {
@ -266,7 +266,7 @@ public abstract class RFTFont implements BinaryFont {
}
@Override
public void initialize(final GraphicEngine d) {}
public void initialize(final DisplayOutputDevice d) {}
@Override
public int getStringWidth(final String text) {
@ -314,7 +314,7 @@ public abstract class RFTFont implements BinaryFont {
}
@Override
public void use(final GraphicEngine d) {
public void use(final DisplayOutputDevice d) {
}

View File

@ -2,8 +2,9 @@ package it.cavallium.warppi.gui.graphicengine.impl.nogui;
import java.io.IOException;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer;
@ -15,7 +16,6 @@ import it.cavallium.warppi.util.EventSubscriber;
public class NoGuiEngine implements GraphicEngine {
private boolean initialized;
public Semaphore exitSemaphore = Engine.getPlatform().newSemaphore(0);
@Override
public int[] getSize() {
@ -62,7 +62,6 @@ public class NoGuiEngine implements GraphicEngine {
@Override
public void destroy() {
initialized = false;
exitSemaphore.release();
}
@Override
@ -148,7 +147,7 @@ public class NoGuiEngine implements GraphicEngine {
public BinaryFont loadFont(final String fontName) throws IOException {
return new BinaryFont() {
@Override
public void use(final GraphicEngine d) {}
public void use(final DisplayOutputDevice d) {}
@Override
public void load(final String file) throws IOException {}
@ -159,7 +158,7 @@ public class NoGuiEngine implements GraphicEngine {
}
@Override
public void initialize(final GraphicEngine d) {}
public void initialize(final DisplayOutputDevice d) {}
@Override
public int getStringWidth(final String text) {
@ -194,7 +193,7 @@ public class NoGuiEngine implements GraphicEngine {
public BinaryFont loadFont(final String path, final String fontName) throws IOException {
return new BinaryFont() {
@Override
public void use(final GraphicEngine d) {}
public void use(final DisplayOutputDevice d) {}
@Override
public void load(final String file) throws IOException {}
@ -205,7 +204,7 @@ public class NoGuiEngine implements GraphicEngine {
}
@Override
public void initialize(final GraphicEngine d) {}
public void initialize(final DisplayOutputDevice d) {}
@Override
public int getStringWidth(final String text) {
@ -240,7 +239,7 @@ public class NoGuiEngine implements GraphicEngine {
public Skin loadSkin(final String file) throws IOException {
return new Skin() {
@Override
public void use(final GraphicEngine d) {}
public void use(final DisplayOutputDevice d) {}
@Override
public void load(final String file) throws IOException {}
@ -251,7 +250,7 @@ public class NoGuiEngine implements GraphicEngine {
}
@Override
public void initialize(final GraphicEngine d) {}
public void initialize(final DisplayOutputDevice d) {}
@Override
public int getSkinWidth() {
@ -267,13 +266,6 @@ public class NoGuiEngine implements GraphicEngine {
};
}
@Override
public void waitForExit() {
try {
exitSemaphore.acquire();
} catch (final InterruptedException e) {}
}
@Override
public boolean isSupported() {
return true;

View File

@ -1,6 +1,7 @@
package it.cavallium.warppi.gui.screens;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.event.KeyPressedEvent;
import it.cavallium.warppi.gui.HistoryBehavior;
@ -32,21 +33,22 @@ public class ChooseVariableValueScreen extends Screen {
@Override
public void render() {
Utils.getFont(false, true).use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4i(0, 0, 0, 64);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2 + 1, StaticVars.screenSize[1] / 2 - 20, "WORK IN PROGRESS.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, StaticVars.screenSize[1] / 2 - 20 + 1, "WORK IN PROGRESS.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2 + 1, StaticVars.screenSize[1] / 2 - 20 + 1, "WORK IN PROGRESS.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 0, 0);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, StaticVars.screenSize[1] / 2 - 20, "WORK IN PROGRESS.");
DisplayOutputDevice display = d.display;
Utils.getFont(false, true).use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4i(0, 0, 0, 64);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2 + 1, display.getDisplaySize()[1] / 2 - 20, "WORK IN PROGRESS.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, display.getDisplaySize()[1] / 2 - 20 + 1, "WORK IN PROGRESS.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2 + 1, display.getDisplaySize()[1] / 2 - 20 + 1, "WORK IN PROGRESS.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 0, 0);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, display.getDisplaySize()[1] / 2 - 20, "WORK IN PROGRESS.");
Utils.getFont(false, false).use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4i(0, 0, 0, 64);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2 + 1, StaticVars.screenSize[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, StaticVars.screenSize[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2 + 1, StaticVars.screenSize[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 0, 0);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, StaticVars.screenSize[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
Utils.getFont(false, false).use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4i(0, 0, 0, 64);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2 + 1, display.getDisplaySize()[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, display.getDisplaySize()[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2 + 1, display.getDisplaySize()[1] / 2 + 1, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 0, 0);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, display.getDisplaySize()[1] / 2, "THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
}
@Override

View File

@ -1,6 +1,6 @@
package it.cavallium.warppi.gui.screens;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.event.KeyPressedEvent;
import it.cavallium.warppi.event.KeyReleasedEvent;
@ -32,19 +32,19 @@ public class KeyboardDebugScreen extends Screen {
@Override
public void render() {
final Renderer renderer = Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer;
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
final Renderer renderer = WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer;
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
renderer.glColor4f(0.75f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringRight(StaticVars.screenSize[0] - 10, 30, "-" + keyevent.toUpperCase() + "-");
renderer.glDrawStringRight(d.display.getDisplaySize()[0] - 10, 30, "-" + keyevent.toUpperCase() + "-");
if (keyevent != "NONE") {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glDrawStringLeft(10, 30, "Key position");
renderer.glDrawStringLeft(10, 45, "X: " + KeyboardDebugScreen.keyX + ", Y:" + KeyboardDebugScreen.keyY);
renderer.glDrawStringLeft(10, 65, "Key value");
renderer.glDrawStringLeft(10, 80, key);
}
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
for (int i = 0; i < 5; i++) {
if (KeyboardDebugScreen.log[i] != null) {
@ -56,10 +56,10 @@ public class KeyboardDebugScreen extends Screen {
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glFillColor(-80 + 100 + 200, 90, 5, 5);
renderer.glFillColor(-80 + 100, 100, 200, 70);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
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");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
for (int i = 0; i < 8; i++) {
if (KeyboardDebugScreen.pinsA[i] == 1) {
@ -102,10 +102,10 @@ public class KeyboardDebugScreen extends Screen {
renderer.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
renderer.glFillColor(150 + 90, 200, 5, 5);
renderer.glFillColor(150 + 100, 100, 200, 70);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[2].use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
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");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[3].use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
renderer.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
for (int i = 15; i >= 8; i--) {
if (KeyboardDebugScreen.pinsB[i] == 1) {

View File

@ -1,6 +1,7 @@
package it.cavallium.warppi.gui.screens;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.gui.GraphicUtils;
import it.cavallium.warppi.gui.HistoryBehavior;
@ -21,7 +22,7 @@ public class LoadingScreen extends Screen {
@Override
public void created() throws InterruptedException {
Engine.INSTANCE.isLoaded().subscribe((loaded) -> {
WarpPI.INSTANCE.isLoaded().subscribe((loaded) -> {
this.loaded = loaded;
});
endLoading = 0;
@ -30,7 +31,7 @@ public class LoadingScreen extends Screen {
@Override
public void initialized() throws InterruptedException {
previousZoomValue = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue());
Engine.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().hide();
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().hide();
StaticVars.windowZoom.submit(1f);
}
@ -42,24 +43,25 @@ public class LoadingScreen extends Screen {
loadingTextTranslation = GraphicUtils.sinDeg(endLoading * 90f) * 10f;
endLoading += dt;
if (!ended && loaded && (Engine.getPlatform().getSettings().isDebugEnabled() || endLoading >= 3.5f)) {
if (!ended && loaded && (WarpPI.getPlatform().getSettings().isDebugEnabled() || endLoading >= 3.5f)) {
ended = true;
StaticVars.windowZoom.submit(previousZoomValue);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().show();
Engine.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(new MathInputScreen());
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().show();
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(new MathInputScreen());
}
mustRefresh = true;
}
@Override
public void render() {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 255, 255);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(StaticVars.screenSize[0] / 2f - 80, StaticVars.screenSize[1] / 2f - 64, 160, 48, 0, 32, 160, 48);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(StaticVars.screenSize[0] / 2f - 24, StaticVars.screenSize[1] / 2f - loadingTextTranslation, 48, 48, 160, 32, 48, 48);
DisplayOutputDevice display = d.display;
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 255, 255);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(display.getDisplaySize()[0] / 2f - 80, display.getDisplaySize()[1] / 2f - 64, 160, 48, 0, 32, 160, 48);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(display.getDisplaySize()[0] / 2f - 24, display.getDisplaySize()[1] / 2f - loadingTextTranslation, 48, 48, 160, 32, 48, 48);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(StaticVars.screenSize[0] - 224, StaticVars.screenSize[1] - 48, 224, 48, 0, 80, 224, 48);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(StaticVars.screenSize[0] - 160 - 24 - 224, StaticVars.screenSize[1] - 48, 160, 48, 224, 80, 160, 48);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(display.getDisplaySize()[0] - 224, display.getDisplaySize()[1] - 48, 224, 48, 0, 80, 224, 48);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(display.getDisplaySize()[0] - 160 - 24 - 224, display.getDisplaySize()[1] - 48, 160, 48, 224, 80, 160, 48);
}

View File

@ -3,11 +3,13 @@ package it.cavallium.warppi.gui.screens;
import java.io.IOException;
import java.util.HashMap;
import it.cavallium.warppi.gui.RenderContext;
import it.cavallium.warppi.gui.ScreenContext;
import org.apache.commons.lang3.SerializationUtils;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.event.Key;
import it.cavallium.warppi.event.KeyPressedEvent;
import it.cavallium.warppi.event.KeyReleasedEvent;
@ -66,7 +68,6 @@ public class MathInputScreen extends Screen {
/**
* Create a copy of this element
* @param mathInputScreen
*/
private MathInputScreen(MathInputScreen old) {
this.calc = new MathContext(old.calc);
@ -87,13 +88,6 @@ public class MathInputScreen extends Screen {
ic = new InputContext();
calc = new MathContext();
try {
BlockContainer.initializeFonts(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("norm"), Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("smal"));
} catch (final IOException e) {
e.printStackTrace();
Engine.getPlatform().exit(1);
}
userInput = new NormalInputContainer(ic);
result = new NormalOutputContainer();
@ -106,16 +100,22 @@ public class MathInputScreen extends Screen {
}
@Override
public void graphicInitialized() throws InterruptedException {
public void graphicInitialized(ScreenContext ctx) throws InterruptedException {
/* Fine caricamento */
try {
BlockContainer.initializeFonts(ctx.getGraphicEngine().loadFont("norm"), ctx.getGraphicEngine().loadFont("smal"));
} catch (final IOException e) {
e.printStackTrace();
WarpPI.getPlatform().exit(1);
}
}
@Override
public void beforeRender(final float dt) {
if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().error == null) {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xFFc5c2af);
public void beforeRender(final ScreenContext ctx, final float dt) {
if (WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error == null) {
ctx.getGraphicEngine().getRenderer().glClearColor(0xFFc5c2af);
} else {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xFFDC3C32);
ctx.getGraphicEngine().getRenderer().glClearColor(0xFFDC3C32);
}
if (userInput.beforeRender(dt)) {
mustRefresh = true;
@ -140,14 +140,14 @@ public class MathInputScreen extends Screen {
}
@Override
public void render() {
final Renderer renderer = Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer;
MathInputScreen.fontBig.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
public void render(RenderContext ctx) {
final Renderer renderer = ctx.getRenderer();
MathInputScreen.fontBig.use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
final int textColor = 0xFF000000;
final int padding = 4;
renderer.glColor(textColor);
userInput.draw(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine, renderer, padding, padding + 20);
userInput.draw(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display, renderer, padding, padding + 20);
if (computingResult) {
renderer.glColor3f(1, 1, 1);
@ -156,20 +156,20 @@ public class MathInputScreen extends Screen {
final int size = 32;
final int posY = computingAnimationIndex % 2;
final int posX = (computingAnimationIndex - posY) / 2;
renderer.glFillRect(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - size - 4, Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - size - 4, size, size, leftX + size * posX, leftY + size * posY, size, size);
renderer.glFillRect(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display.getGraphicEngine().getWidth() - size - 4, WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display.getGraphicEngine().getHeight() - size - 4, size, size, leftX + size * posX, leftY + size * posY, size, size);
if (computingBreakTipVisible) {
Utils.getFont(false).use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
Utils.getFont(false).use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
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(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display.getGraphicEngine().getWidth() - 4 - size - 4, WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display.getGraphicEngine().getHeight() - size / 2 - renderer.getCurrentFont().getCharacterHeight() / 2 - 4, "Press (=) to stop");
}
} else 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(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display, renderer, WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display.getGraphicEngine().getWidth() - result.getWidth() - 2, WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display.getGraphicEngine().getHeight() - result.getHeight() - 2);
}
}
@Override
public void renderTopmost() {
final Renderer renderer = Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer;
public void renderTopmost(RenderContext ctx) {
final Renderer renderer = ctx.getRenderer();
renderer.glColor3f(1, 1, 1);
final int pos = 2;
final int spacersNumb = 1;
@ -179,7 +179,7 @@ public class MathInputScreen extends Screen {
} else {
skinN = 21;
}
Engine.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().guiSkin.use(WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display);
renderer.glFillRect(2 + 18 * pos + 2 * spacersNumb, 2, 16, 16, 16 * skinN, 16 * 0, 16, 16);
}
@ -195,7 +195,7 @@ public class MathInputScreen extends Screen {
@Override
public boolean onKeyPressed(final KeyPressedEvent k) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "MathInputScreen", "Pressed key " + k.getKey().toString());
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "MathInputScreen", "Pressed key " + k.getKey().toString());
try {
switch (k.getKey()) {
case OK:
@ -347,9 +347,9 @@ public class MathInputScreen extends Screen {
userInput.clear();
result.clear();
currentStep = 0;
if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().error != null) {
Engine.getPlatform().getConsoleUtils().out().println(1, "Resetting after error...");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().error = null;
if (WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error != null) {
WarpPI.getPlatform().getConsoleUtils().out().println(1, "Resetting after error...");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error = null;
}
return true;
case SURD_MODE:
@ -361,7 +361,7 @@ public class MathInputScreen extends Screen {
}
return true;
case debug1:
Engine.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(new EmptyScreen());
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(new EmptyScreen());
return true;
case HISTORY_BACK:
// if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().canGoBack()) {
@ -428,7 +428,7 @@ public class MathInputScreen extends Screen {
@SuppressWarnings("unchecked")
private void swapInputScreen() {
MathInputScreen mis = new MathInputScreen(this);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(mis);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(mis);
}
@SuppressWarnings("unused")
@ -517,10 +517,10 @@ public class MathInputScreen extends Screen {
if (!step) {
currentStep = 0;
}
if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().error != null) {
if (WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error != null) {
//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.INSTANCE.getHardwareDevice().getDisplayManager().error = null;
WarpPI.getPlatform().getConsoleUtils().out().println(1, "Resetting after error...");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error = null;
calc.f = null;
calc.f2 = null;
calc.resultsCount = 0;
@ -540,13 +540,13 @@ public class MathInputScreen extends Screen {
calc.f2.clear();
}
calc.f.add(expr);
Engine.getPlatform().getConsoleUtils().out().println(2, "INPUT: " + expr);
WarpPI.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());
WarpPI.getPlatform().getConsoleUtils().out().println(0, "RESULT: " + rr.toString());
}
final ObjectArrayList<ObjectArrayList<Block>> resultBlocks = MathParser.parseOutput(calc, resultExpressions);
result.setContentAsMultipleGroups(resultBlocks);
@ -559,22 +559,22 @@ public class MathInputScreen extends Screen {
}
}
} catch (final InterruptedException ex) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "Computing thread stopped.");
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "Computing thread stopped.");
} catch (final Exception ex) {
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
ex.printStackTrace();
}
throw new Error(Errors.SYNTAX_ERROR);
}
} catch (final Error e) {
d.errorStackTrace = Engine.getPlatform().stacktraceToString(e);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().error = e.id.toString();
d.errorStackTrace = WarpPI.getPlatform().stacktraceToString(e);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error = e.id.toString();
System.err.println(e.id);
}
computingResult = false;
});
Engine.getPlatform().setThreadName(computingThread, "Computing Thread");
Engine.getPlatform().setThreadDaemon(computingThread);
WarpPI.getPlatform().setThreadName(computingThread, "Computing Thread");
WarpPI.getPlatform().setThreadDaemon(computingThread);
computingThread.setPriority(Thread.NORM_PRIORITY + 3);
computingThread.start();
return true;
@ -638,9 +638,9 @@ public class MathInputScreen extends Screen {
boolean cancelled = false;
for (final Function f : knownVarsInFunctions) {
final ChooseVariableValueScreen cvs = new ChooseVariableValueScreen(this, new VariableValue((Variable) f, new Number(calc, 0)));
Engine.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(cvs);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(cvs);
try {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().screenChange.acquire();
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().screenChange.acquire();
} catch (final InterruptedException e) {}
if (cvs.resultNumberValue == null) {
cancelled = true;
@ -661,9 +661,9 @@ public class MathInputScreen extends Screen {
}
}
});
Engine.getPlatform().setThreadName(ct, "Variables user-input queue thread");
WarpPI.getPlatform().setThreadName(ct, "Variables user-input queue thread");
ct.setPriority(Thread.MIN_PRIORITY);
Engine.getPlatform().setThreadDaemon(ct);
WarpPI.getPlatform().setThreadDaemon(ct);
ct.start();
}

View File

@ -2,9 +2,7 @@ package it.cavallium.warppi.gui.screens;
import it.cavallium.warppi.event.KeyboardEventListener;
import it.cavallium.warppi.event.TouchEventListener;
import it.cavallium.warppi.gui.DisplayManager;
import it.cavallium.warppi.gui.GraphicalInterface;
import it.cavallium.warppi.gui.HistoryBehavior;
import it.cavallium.warppi.gui.*;
public abstract class Screen implements KeyboardEventListener, TouchEventListener, GraphicalInterface {
public DisplayManager d;
@ -21,10 +19,10 @@ public abstract class Screen implements KeyboardEventListener, TouchEventListene
}
@Override
public void initializeGraphic() throws InterruptedException {
public void initializeGraphic(ScreenContext ctx) throws InterruptedException {
if (!graphicInitialized) {
graphicInitialized = true;
graphicInitialized();
graphicInitialized(ctx);
}
}
@ -66,18 +64,18 @@ public abstract class Screen implements KeyboardEventListener, TouchEventListene
* Called before initialized()
* @throws InterruptedException
*/
public abstract void graphicInitialized() throws InterruptedException;
public abstract void graphicInitialized(ScreenContext ctx) throws InterruptedException;
@Override
public abstract void render();
public abstract void render(RenderContext ctx);
@Override
public void renderTopmost() {
public void renderTopmost(RenderContext ctx) {
}
@Override
public abstract void beforeRender(float dt);
public abstract void beforeRender(ScreenContext ctx, float dt);
@Override
public abstract boolean mustBeRefreshed();

View File

@ -1,6 +1,7 @@
package it.cavallium.warppi.gui.screens;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.event.KeyPressedEvent;
import it.cavallium.warppi.gui.HistoryBehavior;
@ -28,12 +29,13 @@ public class SolveForXScreen extends Screen {
@Override
public void render() {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4i(0, 0, 0, 64);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2 + 1, StaticVars.screenSize[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, StaticVars.screenSize[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2 + 1, StaticVars.screenSize[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 0, 0);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(StaticVars.screenSize[0] / 2, StaticVars.screenSize[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
DisplayOutputDevice display = d.display;
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4i(0, 0, 0, 64);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2 + 1, display.getDisplaySize()[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, display.getDisplaySize()[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2 + 1, display.getDisplaySize()[1] / 4 + 1, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3i(255, 0, 0);
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringCenter(display.getDisplaySize()[0] / 2, display.getDisplaySize()[1] / 4, "WORK IN PROGRESS. THIS SCREEN MUST HAVE A GUI TO SELECT THE VARIABLE TO SOLVE.");
}
@Override

View File

@ -1,6 +1,6 @@
package it.cavallium.warppi.math.parser;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.gui.expression.blocks.Block;
import it.cavallium.warppi.gui.expression.containers.InputContainer;
@ -83,17 +83,17 @@ public class MathParser {
boolean lastLoopDidSomething;
Function lastElement;
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
Engine.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "\tStatus: ");
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
WarpPI.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "\tStatus: ");
for (final Function f : functionsList) {
Engine.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, f.toString());
WarpPI.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, f.toString());
}
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE);
}
for (final MathParserStep step : steps) {
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
Engine.getPlatform().getConsoleUtils().out().println(2, "Stack fixing step \"" + step.getStepName() + "\"");
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
WarpPI.getPlatform().getConsoleUtils().out().println(2, "Stack fixing step \"" + step.getStepName() + "\"");
}
final int stepQty = step.requiresReversedIteration() ? -1 : 1,
initialIndex = step.requiresReversedIteration() ? functionsList.size() - 1 : 0;
@ -114,12 +114,12 @@ public class MathParser {
}
} while (lastLoopDidSomething);
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
Engine.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "\tStatus: ");
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
WarpPI.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "\tStatus: ");
for (final Function f : functionsList) {
Engine.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, f.toString());
WarpPI.getPlatform().getConsoleUtils().out().print(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, f.toString());
}
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE);
}
}

View File

@ -1,7 +1,8 @@
package it.cavallium.warppi.math.rules;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.MathContext;
@ -28,7 +29,7 @@ public class RulesManager {
@SuppressWarnings({ "unchecked" })
public static void initialize() {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_NODEBUG, "RulesManager", "Loading the rules");
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_NODEBUG, "RulesManager", "Loading the rules");
RulesManager.rules = new ObjectArrayList[RuleType.values().length];
for (final RuleType val : RuleType.values()) {
RulesManager.rules[val.ordinal()] = new ObjectArrayList<>();
@ -134,6 +135,6 @@ public class RulesManager {
public static void addRule(final Rule rule) {
RulesManager.rules[rule.getRuleType().ordinal()].add(rule);
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "RulesManager", rule.getRuleName(), "Loaded as " + rule.getRuleType() + " rule");
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "RulesManager", rule.getRuleName(), "Loaded as " + rule.getRuleType() + " rule");
}
}

View File

@ -4,7 +4,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.math.Function;
import it.cavallium.warppi.math.rules.Rule;
@ -40,7 +40,7 @@ public class MathSolver {
public ObjectArrayList<ObjectArrayList<Function>> solveAllSteps() throws InterruptedException, Error {
final ObjectArrayList<ObjectArrayList<Function>> steps = new ObjectArrayList<>();
ObjectArrayList<Function> lastFnc = null, currFnc = new ObjectArrayList<>();
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Solving all steps. Input: " + initialFunction.toString());
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Solving all steps. Input: " + initialFunction.toString());
currFnc.add(initialFunction);
long stepNumber = 0;
int initStepState = 0, endStepState = 0;
@ -66,11 +66,11 @@ public class MathSolver {
}
lastFnc = currFnc;
initStepState = stepState.get();
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Starting step " + stepStates[initStepState] + ". Input: " + currFnc);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Starting step " + stepStates[initStepState] + ". Input: " + currFnc);
final ObjectArrayList<Function> stepResult = solveStep(lastFnc, stepState);
if (stepResult != null) {
for (final Function result : stepResult) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, result.toString());
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, result.toString());
}
currFnc = stepResult;
steps.add(currFnc);
@ -78,22 +78,22 @@ public class MathSolver {
endStepState = stepState.get();
stepNumber++;
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Step result: " + stepResult);
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Step result details: Consecutive steps that did nothing: " + consecutiveNullSteps + ", this step did " + stepStateRepetitions + " simplifications.");
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Next step state: " + stepStates[endStepState]);
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, currFnc + " is " + (checkEquals(currFnc, lastFunctions[0][endStepState]) ? "" : "not ") + "equals to [0]:" + lastFunctions[0][endStepState]);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Step result: " + stepResult);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Step result details: Consecutive steps that did nothing: " + consecutiveNullSteps + ", this step did " + stepStateRepetitions + " simplifications.");
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, "Next step state: " + stepStates[endStepState]);
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, currFnc + " is " + (checkEquals(currFnc, lastFunctions[0][endStepState]) ? "" : "not ") + "equals to [0]:" + lastFunctions[0][endStepState]);
}
if (Engine.getPlatform().getSettings().isDebugEnabled()) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, currFnc + " is " + (checkEquals(currFnc, lastFunctions[1][endStepState]) ? "" : "not ") + "equals to [1]:" + lastFunctions[1][endStepState]);
if (WarpPI.getPlatform().getSettings().isDebugEnabled()) {
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", stepName, currFnc + " is " + (checkEquals(currFnc, lastFunctions[1][endStepState]) ? "" : "not ") + "equals to [1]:" + lastFunctions[1][endStepState]);
}
} while (consecutiveNullSteps < stepStates.length && !checkEquals(currFnc, lastFunctions[0][endStepState]) && !checkEquals(currFnc, lastFunctions[1][endStepState]));
if (consecutiveNullSteps >= stepStates.length) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Loop ended because " + consecutiveNullSteps + " >= " + stepStates.length);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Loop ended because " + consecutiveNullSteps + " >= " + stepStates.length);
} else if (checkEquals(currFnc, lastFunctions[0][endStepState])) {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Loop ended because " + currFnc + " is equals to [0]:" + lastFunctions[0][endStepState]);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Loop ended because " + currFnc + " is equals to [0]:" + lastFunctions[0][endStepState]);
} else {
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Loop ended because " + currFnc + " is equals to [1]:" + lastFunctions[1][endStepState]);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", "Loop ended because " + currFnc + " is equals to [1]:" + lastFunctions[1][endStepState]);
}
return steps;
}
@ -244,7 +244,7 @@ public class MathSolver {
if (appliedRules.isEmpty()) {
results = null;
}
if (Engine.getPlatform().getConsoleUtils().getOutputLevel() >= ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN & results != null && !appliedRules.isEmpty()) {
if (WarpPI.getPlatform().getConsoleUtils().getOutputLevel() >= ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN & results != null && !appliedRules.isEmpty()) {
final StringBuilder rulesStr = new StringBuilder();
for (final Rule r : appliedRules) {
rulesStr.append(r.getRuleName());
@ -253,7 +253,7 @@ public class MathSolver {
if (rulesStr.length() > 0) {
rulesStr.setLength(rulesStr.length() - 1);
}
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", currentAcceptedRules.toString(), "Applied rules: " + rulesStr);
WarpPI.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE, "Math Solver", currentAcceptedRules.toString(), "Applied rules: " + rulesStr);
}
return results;
}

View File

@ -0,0 +1,5 @@
package it.cavallium.warppi.util;
public interface RunnableWithException {
public void run() throws Exception;
}

View File

@ -15,7 +15,7 @@ import java.util.Map;
import org.nevec.rjm.BigDecimalMath;
import org.nevec.rjm.Rational;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.math.Function;
@ -399,7 +399,7 @@ public class Utils {
}
public static final BinaryFont getFont(final boolean small, final boolean zoomed) {
return Engine.INSTANCE.getHardwareDevice().getDisplayManager().fonts[Utils.getFontIndex(small, zoomed)];
return WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().fonts[Utils.getFontIndex(small, zoomed)];
}
public static final int getFontIndex(final boolean small, final boolean zoomed) {
@ -423,14 +423,14 @@ public class Utils {
public static final int getFontHeight(final boolean small, final boolean zoomed) {
if (small) {
if (zoomed) {
return Engine.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[3];
return WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[3];
} else {
return Engine.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[1];
return WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[1];
}
} else if (zoomed) {
return Engine.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[2];
return WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[2];
} else {
return Engine.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[0];
return WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().glyphsHeight[0];
}
}
@ -567,7 +567,7 @@ public class Utils {
}
public static boolean isWindows() {
return Engine.getPlatform().getOsName().indexOf("win") >= 0;
return WarpPI.getPlatform().getOsName().indexOf("win") >= 0;
}
public static <T> ObjectArrayList<T> newArrayList(final T o) {
@ -578,7 +578,7 @@ public class Utils {
public static InputStream getResourceStreamSafe(final String string) throws IOException, URISyntaxException {
try {
return Engine.getPlatform().getStorageUtils().getResourceStream(string);
return WarpPI.getPlatform().getStorageUtils().getResourceStream(string);
} catch (final Exception ex) {
return null;
}

View File

@ -23,8 +23,9 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>

View File

@ -8,7 +8,7 @@ import java.io.InputStream;
import javax.imageio.ImageIO;
import ar.com.hjg.pngj.ImageLineInt;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.ImageUtils.ImageReader;
public class DesktopImageReader implements ImageReader {

View File

@ -5,17 +5,26 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLDisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLEngine;
import it.cavallium.warppi.gui.graphicengine.impl.swing.SwingDeviceState;
import it.cavallium.warppi.gui.graphicengine.impl.swing.SwingTouchInputDevice;
import org.apache.commons.io.FileUtils;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.boot.StartupArguments;
import it.cavallium.warppi.device.DeviceStateDevice;
import it.cavallium.warppi.device.display.BacklightOutputDevice;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.display.NoDisplaysAvailableException;
import it.cavallium.warppi.device.display.NullBacklightOutputDevice;
import it.cavallium.warppi.device.input.KeyboardInputDevice;
import it.cavallium.warppi.device.input.TouchInputDevice;
import it.cavallium.warppi.Platform;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLEngine;
import it.cavallium.warppi.gui.graphicengine.impl.swing.SwingDisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.swing.SwingEngine;
import it.cavallium.warppi.util.CacheUtils;
import it.cavallium.warppi.util.Error;
@ -27,9 +36,13 @@ public class DesktopPlatform implements Platform {
private final DesktopStorageUtils su;
private final ImageUtils pu;
private final String on;
private final Map<String, GraphicEngine> el;
private final DesktopSettings settings;
private Boolean runningOnRaspberryOverride = null;
private StartupArguments args;
private DisplayOutputDevice displayOutputDevice;
private DeviceStateDevice deviceStateDevice;
private TouchInputDevice touchInputDevice;
private KeyboardInputDevice keyboardInputDevice;
public DesktopPlatform() {
cu = new DesktopConsoleUtils();
@ -37,9 +50,6 @@ public class DesktopPlatform implements Platform {
su = new DesktopStorageUtils();
pu = new DesktopImageUtils();
on = System.getProperty("os.name").toLowerCase();
el = new HashMap<>();
el.put("CPU engine", new SwingEngine());
el.put("GPU engine", new JOGLEngine());
settings = new DesktopSettings();
}
@ -105,14 +115,14 @@ public class DesktopPlatform implements Platform {
@Override
public void alphaChanged(final boolean val) {
final GraphicEngine currentEngine = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine;
final DisplayOutputDevice currentEngine = WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display;
if (currentEngine instanceof SwingEngine)
((SwingEngine) currentEngine).setAlphaChanged(val);
}
@Override
public void shiftChanged(final boolean val) {
final GraphicEngine currentEngine = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine;
final DisplayOutputDevice currentEngine = WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().display;
if (currentEngine instanceof SwingEngine)
((SwingEngine) currentEngine).setShiftChanged(val);
}
@ -132,16 +142,6 @@ public class DesktopPlatform implements Platform {
return new DesktopURLClassLoader(urls);
}
@Override
public Map<String, GraphicEngine> getEnginesList() {
return el;
}
@Override
public GraphicEngine getEngine(final String string) throws NullPointerException {
return el.get(string);
}
@Override
public void throwNewExceptionInInitializerError(final String text) {
throw new ExceptionInInitializerError();
@ -178,14 +178,15 @@ public class DesktopPlatform implements Platform {
runningOnRaspberryOverride = false;
}
}
@Override
public boolean isRunningOnRaspberry() {
if (runningOnRaspberryOverride != null) return runningOnRaspberryOverride;
if (runningOnRaspberryOverride != null)
return runningOnRaspberryOverride;
return CacheUtils.get("isRunningOnRaspberry", 24 * 60 * 60 * 1000, () -> {
if (Engine.getPlatform().isJavascript())
if (WarpPI.getPlatform().isJavascript())
return false;
if (Engine.getPlatform().getOsName().equals("Linux"))
if (WarpPI.getPlatform().getOsName().equals("Linux"))
try {
final File osRelease = new File("/etc", "os-release");
return FileUtils.readLines(osRelease, "UTF-8").stream().map(String::toLowerCase).anyMatch(line -> line.contains("raspbian") && line.contains("name"));
@ -197,4 +198,87 @@ public class DesktopPlatform implements Platform {
});
}
@Override
public TouchInputDevice getTouchInputDevice() {
return touchInputDevice;
}
@Override
public KeyboardInputDevice getKeyboardInputDevice() {
return keyboardInputDevice;
}
@Override
public DisplayOutputDevice getDisplayOutputDevice() {
return this.displayOutputDevice;
}
@Override
public BacklightOutputDevice getBacklightOutputDevice() {
return new NullBacklightOutputDevice();
}
@Override
public DeviceStateDevice getDeviceStateDevice() {
return this.deviceStateDevice;
}
@Override
public void setArguments(StartupArguments args) {
this.args = args;
this.chooseDevices();
}
private void chooseDevices() {
List<DisplayOutputDevice> availableDevices = new ArrayList<>();
List<DisplayOutputDevice> guiDevices = List.of(new SwingDisplayOutputDevice(), new JOGLDisplayOutputDevice());
List<DisplayOutputDevice> consoleDevices = List.of();
if (args.isMSDOSModeEnabled() || args.isNoGUIEngineForced()) {
availableDevices.addAll(consoleDevices);
}
if (!args.isNoGUIEngineForced()) {
availableDevices.addAll(guiDevices);
}
if (availableDevices.size() == 0) {
throw new NoDisplaysAvailableException();
}
for (DisplayOutputDevice device : availableDevices) {
if (device instanceof SwingDisplayOutputDevice) {
if (args.isCPUEngineForced()) {
this.displayOutputDevice = device;
}
} else if (device instanceof JOGLDisplayOutputDevice) {
if (args.isGPUEngineForced()) {
this.displayOutputDevice = device;
break;
}
}
}
if (this.displayOutputDevice == null) this.displayOutputDevice = availableDevices.get(0);
if (displayOutputDevice instanceof SwingDisplayOutputDevice) {
this.touchInputDevice = new SwingTouchInputDevice((SwingEngine) displayOutputDevice.getGraphicEngine());
//TODO: implement a keyboard input device
this.keyboardInputDevice = new KeyboardInputDevice() {
@Override
public void initialize() {
}
};
this.deviceStateDevice = new SwingDeviceState((SwingEngine) displayOutputDevice.getGraphicEngine());
} else if (displayOutputDevice instanceof JOGLDisplayOutputDevice) {
this.touchInputDevice = null;
this.keyboardInputDevice = null;
this.deviceStateDevice = null; //TODO: Implement
}
}
}

View File

@ -0,0 +1,33 @@
package it.cavallium.warppi.gui.graphicengine.impl.swing;
import it.cavallium.warppi.device.DeviceStateDevice;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
public class SwingDeviceState implements DeviceStateDevice {
private final SwingEngine graphicEngine;
private final CompletableFuture<Void> exitWait;
public SwingDeviceState(SwingEngine graphicEngine) {
this.graphicEngine = graphicEngine;
this.exitWait = new CompletableFuture<>();
}
@Override
public void initialize() {
graphicEngine.subscribeExit(() -> {
exitWait.complete(null);
});
}
@Override
public Future<?> waitForExit() {
return exitWait;
}
@Override
public void powerOff() {
graphicEngine.sendPowerOffSignal();
}
}

View File

@ -0,0 +1,23 @@
package it.cavallium.warppi.gui.graphicengine.impl.swing;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
public class SwingDisplayOutputDevice implements DisplayOutputDevice {
private final SwingEngine engine;
public SwingDisplayOutputDevice() {
this.engine = new SwingEngine(480, 320);
}
@Override
public GraphicEngine getGraphicEngine() {
return engine;
}
@Override
public int[] getDisplaySize() {
return engine.getSize();
}
}

View File

@ -1,11 +1,12 @@
package it.cavallium.warppi.gui.graphicengine.impl.swing;
import java.awt.GraphicsEnvironment;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.Semaphore;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
@ -15,11 +16,17 @@ import it.cavallium.warppi.util.EventSubmitter;
public class SwingEngine implements GraphicEngine {
private final int defaultWidth;
private final int defaultHeight;
private SwingWindow INSTANCE;
public SwingRenderer r;
public volatile BufferedImage g;
public volatile boolean initialized;
public Semaphore exitSemaphore;
public SwingEngine(int defaultWidth, int defaultHeight) {
this.defaultWidth = defaultWidth;
this.defaultHeight = defaultHeight;
}
@Override
public void setTitle(final String title) {
@ -51,10 +58,8 @@ public class SwingEngine implements GraphicEngine {
r = new SwingRenderer();
g = new BufferedImage(r.size[0], r.size[1], BufferedImage.TYPE_INT_RGB);
initialized = false;
exitSemaphore = new Semaphore(0);
INSTANCE = new SwingWindow(this);
setResizable(Engine.getPlatform().getSettings().isDebugEnabled());
setDisplayMode((int) (StaticVars.screenSize[0] / StaticVars.windowZoom.getLastValue()), (int) (StaticVars.screenSize[1] / StaticVars.windowZoom.getLastValue()));
INSTANCE = new SwingWindow(this, defaultWidth, defaultHeight);
setResizable(WarpPI.getPlatform().getSettings().isDebugEnabled());
INSTANCE.setVisible(true);
initialized = true;
if (onInitialized != null)
@ -68,20 +73,21 @@ public class SwingEngine implements GraphicEngine {
@Override
public int getWidth() {
return INSTANCE.getWWidth() - StaticVars.screenPos[0];
return this.getSize()[0];
}
@Override
public int getHeight() {
return INSTANCE.getWHeight() - StaticVars.screenPos[1];
return this.getSize()[1];
}
@Override
public void destroy() {
sendPowerOffSignal();
}
protected void destroyEngine() {
initialized = false;
exitSemaphore.release();
INSTANCE.setVisible(false);
INSTANCE.dispose();
}
@Override
@ -112,7 +118,7 @@ public class SwingEngine implements GraphicEngine {
@Deprecated()
public void refresh() {
if (Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen() == null || Engine.INSTANCE.getHardwareDevice().getDisplayManager().error != null && Engine.INSTANCE.getHardwareDevice().getDisplayManager().error.length() > 0 || Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen() == null || Engine.INSTANCE.getHardwareDevice().getDisplayManager().getScreen().mustBeRefreshed())
if (WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getScreen() == null || WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error != null && WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().error.length() > 0 || WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getScreen() == null || WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getScreen().mustBeRefreshed())
INSTANCE.c.paintImmediately(0, 0, getWidth(), getHeight());
}
@ -121,6 +127,49 @@ public class SwingEngine implements GraphicEngine {
INSTANCE.c.repaint();
}
public void subscribeExit(Runnable subscriber) {
INSTANCE.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
subscriber.run();
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
});
}
public void sendPowerOffSignal() {
INSTANCE.sendPowerOffSignal();
}
public abstract class Startable {
public Startable() {
force = false;
@ -137,7 +186,7 @@ public class SwingEngine implements GraphicEngine {
@Override
public int[] getSize() {
return r.size;
return r.size.clone();
}
@Override
@ -165,13 +214,6 @@ public class SwingEngine implements GraphicEngine {
return new SwingSkin(file);
}
@Override
public void waitForExit() {
try {
exitSemaphore.acquire();
} catch (final InterruptedException e) {}
}
@Override
public boolean isSupported() {
if (StaticVars.startupArguments.isEngineForced() && StaticVars.startupArguments.isCPUEngineForced() == false)
@ -191,4 +233,13 @@ public class SwingEngine implements GraphicEngine {
public void setShiftChanged(final boolean val) {
INSTANCE.setShiftChanged(val);
}
public Insets getInsets() {
return INSTANCE.getInsets();
}
public void subscribeTouchDevice(MouseMotionListener mouseMotionListener, MouseListener mouseListener) {
INSTANCE.c.addMouseListener(mouseListener);
INSTANCE.c.addMouseMotionListener(mouseMotionListener);
}
}

View File

@ -2,7 +2,7 @@ package it.cavallium.warppi.gui.graphicengine.impl.swing;
import java.io.IOException;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.common.RFTFont;
public class SwingFont extends RFTFont {
@ -16,8 +16,8 @@ public class SwingFont extends RFTFont {
}
@Override
public void use(final GraphicEngine d) {
if (d.getRenderer() instanceof SwingRenderer)
((SwingRenderer) d.getRenderer()).currentFont = this;
public void use(final DisplayOutputDevice d) {
if (d.getGraphicEngine().getRenderer() instanceof SwingRenderer)
((SwingRenderer) d.getGraphicEngine().getRenderer()).currentFont = this;
}
}

View File

@ -15,6 +15,10 @@ public class SwingRenderer implements Renderer {
public int[] size = new int[] { 1, 1 };
static int[] canvas2d = new int[1];
public SwingRenderer() {
}
@Override
public void glColor3i(final int r, final int gg, final int b) {
glColor4i(r, gg, b, 255);
@ -57,8 +61,6 @@ public class SwingRenderer implements Renderer {
private void glDrawSkin(int x0, int y0, final int x1, final int y1, int s0, int t0, int s1, int t1,
final boolean transparent) {
x0 += StaticVars.screenPos[0];
y0 += StaticVars.screenPos[1];
final double incrementX = Math.abs((double) (x1 - x0) / (double) (s1 - s0));
final double incrementY = Math.abs((double) (y1 - y0) / (double) (t1 - t0));
final boolean flippedX = (x1 - x0) / (s1 - s0) < 0;
@ -185,10 +187,6 @@ public class SwingRenderer implements Renderer {
@Override
public void glDrawLine(float x0, float y0, float x1, float y1) {
x0 += StaticVars.screenPos[0];
x1 += StaticVars.screenPos[0];
y0 += StaticVars.screenPos[1];
y1 += StaticVars.screenPos[1];
final int ix0 = (int) x0;
final int ix1 = (int) x1;
final int iy0 = (int) y0;
@ -223,8 +221,6 @@ public class SwingRenderer implements Renderer {
@Override
public void glFillColor(float x, float y, final float width, final float height) {
x += StaticVars.screenPos[0];
y += StaticVars.screenPos[1];
final int ix = (int) x;
final int iy = (int) y;
@ -256,8 +252,6 @@ public class SwingRenderer implements Renderer {
@Override
public void glDrawStringLeft(float x, float y, final String textString) {
x += StaticVars.screenPos[0];
y += StaticVars.screenPos[1];
final int ix = (int) x;
final int iy = (int) y;

View File

@ -2,7 +2,7 @@ package it.cavallium.warppi.gui.graphicengine.impl.swing;
import java.io.IOException;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.common.PngSkin;
public class SwingSkin extends PngSkin {
@ -12,8 +12,8 @@ public class SwingSkin extends PngSkin {
}
@Override
public void use(final GraphicEngine d) {
if (d.getRenderer() instanceof SwingRenderer)
((SwingRenderer) d.getRenderer()).currentSkin = this;
public void use(final DisplayOutputDevice d) {
if (d.getGraphicEngine().getRenderer() instanceof SwingRenderer)
((SwingRenderer) d.getGraphicEngine().getRenderer()).currentSkin = this;
}
}

View File

@ -0,0 +1,106 @@
package it.cavallium.warppi.gui.graphicengine.impl.swing;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.input.TouchInputDevice;
import it.cavallium.warppi.event.*;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.concurrent.SubmissionPublisher;
import java.util.function.Consumer;
public class SwingTouchInputDevice implements TouchInputDevice {
private final SubmissionPublisher<TouchEvent> touchEventPublisher = new SubmissionPublisher<>();
private final SwingEngine graphicEngine;
public SwingTouchInputDevice(SwingEngine graphicEngine) {
this.graphicEngine = graphicEngine;
}
@Override
public boolean getSwappedAxes() {
return false;
}
@Override
public boolean getInvertedX() {
return false;
}
@Override
public boolean getInvertedY() {
return false;
}
@Override
public void listenTouchEvents(Consumer<TouchEvent> touchEventListener) {
touchEventPublisher.consume(touchEventListener);
}
@Override
public void initialize() {
graphicEngine.subscribeTouchDevice(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
final Insets wp = graphicEngine.getInsets();
final TouchPoint p = new TouchPoint(0, e.getX() - wp.left, e.getY() - wp.top, 5, 5, 1, 0);
final ObjectArrayList<TouchPoint> touches = new ObjectArrayList<>();
final ObjectArrayList<TouchPoint> changedTouches = new ObjectArrayList<>();
touches.add(p);
changedTouches.add(p);
final TouchMoveEvent tse = new TouchMoveEvent(changedTouches, touches);
SwingTouchInputDevice.this.touchEventPublisher.submit(tse);
}
@Override
public void mouseMoved(MouseEvent e) {
}
}, new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
final Insets wp = graphicEngine.getInsets();
final TouchPoint p = new TouchPoint(0, e.getX() - wp.left, e.getY() - wp.top, 5, 5, 1, 0);
final ObjectArrayList<TouchPoint> touches = new ObjectArrayList<>();
final ObjectArrayList<TouchPoint> changedTouches = new ObjectArrayList<>();
touches.add(p);
changedTouches.add(p);
final TouchStartEvent tse = new TouchStartEvent(changedTouches, touches);
SwingTouchInputDevice.this.touchEventPublisher.submit(tse);
}
@Override
public void mouseReleased(MouseEvent e) {
final Insets wp = graphicEngine.getInsets();
final TouchPoint p = new TouchPoint(0, e.getX() - wp.left, e.getY() - wp.top, 5, 5, 1, 0);
final ObjectArrayList<TouchPoint> touches = new ObjectArrayList<>();
final ObjectArrayList<TouchPoint> changedTouches = new ObjectArrayList<>();
changedTouches.add(p);
final TouchEndEvent tse = new TouchEndEvent(changedTouches, touches);
SwingTouchInputDevice.this.touchEventPublisher.submit(tse);
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
}
}

View File

@ -1,22 +1,13 @@
package it.cavallium.warppi.gui.graphicengine.impl.swing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
@ -27,9 +18,9 @@ import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.event.TouchEndEvent;
import it.cavallium.warppi.event.TouchMoveEvent;
import it.cavallium.warppi.event.TouchPoint;
@ -40,6 +31,8 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList;
public class SwingWindow extends JFrame {
private static final long serialVersionUID = 2945898937634075491L;
private final int defaultWidth;
private final int defaultHeight;
public CustomCanvas c;
private RenderingLoop renderingLoop;
private final SwingEngine display;
@ -49,12 +42,20 @@ public class SwingWindow extends JFrame {
public JPanel buttonsPanel;
private SwingAdvancedButton[][] buttons;
private int BTN_SIZE;
private volatile boolean windowShown;
private volatile boolean forceRepaint;
public SwingWindow(final SwingEngine disp) {
public SwingWindow(final SwingEngine disp, int defaultWidth, int defaultHeight) {
display = disp;
this.defaultWidth = defaultWidth;
this.defaultHeight = defaultHeight;
setLayout(new BorderLayout());
setBackground(Color.BLACK);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
c = new CustomCanvas();
c.setMinimumSize(new Dimension(0, 0));
c.setPreferredSize(new Dimension(defaultWidth, defaultHeight));
c.setSize(defaultWidth, defaultHeight);
c.setDoubleBuffered(false);
this.add(c, BorderLayout.CENTER);
try {
@ -69,7 +70,7 @@ public class SwingWindow extends JFrame {
mult = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue()).intValue();
if (!Engine.getPlatform().getSettings().isDebugEnabled()) {
if (!WarpPI.getPlatform().getSettings().isDebugEnabled()) {
// Create a new blank cursor.
final Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImg, new Point(0, 0), "blank cursor");
@ -83,13 +84,35 @@ public class SwingWindow extends JFrame {
onResize = EventSubmitter.create();
onResize$ = onResize.map((newSize) -> {
disp.r.size = new int[] { newSize[0], newSize[1] };
if (disp.r.size[0] <= 0)
disp.r.size[0] = 1;
if (disp.r.size[1] <= 0)
disp.r.size[1] = 1;
if (newSize[0] <= 0)
newSize[0] = 1;
if (newSize[1] <= 0)
newSize[1] = 1;
var oldSize = disp.r.size;
disp.r.size = new int[] { newSize[0], newSize[1] };
SwingRenderer.canvas2d = new int[disp.r.size[0] * disp.r.size[1]];
var oldG = disp.g;
disp.g = new BufferedImage(disp.r.size[0], disp.r.size[1], BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) disp.g.getGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.setColor(Color.BLACK);
g.clearRect(0, 0, disp.r.size[0], disp.r.size[1]);
double oldRatio = (double) oldSize[0] / (double) oldSize[1];
double newRatio = (double) newSize[0] / (double) newSize[1];
int newFrameWidth;
int newFrameHeight = 0;
if ((int) (oldRatio * 100) == (int) (newRatio * 100)) {
newFrameWidth = newSize[0];
newFrameHeight = newSize[1];
} else {
newFrameWidth = oldSize[0];
newFrameHeight = oldSize[1];
}
g.drawImage(oldG, 0, 0, newFrameWidth, newFrameHeight, null);
forceRepaint = true;
display.repaint();
return newSize;
});
@ -97,7 +120,7 @@ public class SwingWindow extends JFrame {
addComponentListener(new ComponentListener() {
@Override
public void componentHidden(final ComponentEvent e) {
Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.destroy();
sendPowerOffSignal();
}
@Override
@ -105,12 +128,15 @@ public class SwingWindow extends JFrame {
@Override
public void componentResized(final ComponentEvent e) {
if (windowShown) {
onResize.submit(new Integer[] { c.getWidth() / mult, c.getHeight() / mult });
}
}
@Override
public void componentShown(final ComponentEvent e) {
if (Engine.getPlatform().getSettings().isDebugEnabled())
SwingWindow.this.windowShown = true;
if (WarpPI.getPlatform().getSettings().isDebugEnabled())
SwingWindow.this.centerWindow();
}
});
@ -133,60 +159,11 @@ public class SwingWindow extends JFrame {
}
});
c.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(final MouseEvent e) {
final Insets wp = SwingWindow.this.getInsets();
final TouchPoint p = new TouchPoint(0, e.getX() - wp.left, e.getY() - wp.top, 5, 5, 1, 0);
final ObjectArrayList<TouchPoint> touches = new ObjectArrayList<>();
final ObjectArrayList<TouchPoint> changedTouches = new ObjectArrayList<>();
touches.add(p);
changedTouches.add(p);
final TouchMoveEvent tse = new TouchMoveEvent(changedTouches, touches);
Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchMove(tse);
}
@Override
public void mouseMoved(final MouseEvent e) {}
});
c.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(final MouseEvent e) {}
@Override
public void mousePressed(final MouseEvent e) {
final Insets wp = SwingWindow.this.getInsets();
final TouchPoint p = new TouchPoint(0, e.getX() - wp.left, e.getY() - wp.top, 5, 5, 1, 0);
final ObjectArrayList<TouchPoint> touches = new ObjectArrayList<>();
final ObjectArrayList<TouchPoint> changedTouches = new ObjectArrayList<>();
touches.add(p);
changedTouches.add(p);
final TouchStartEvent tse = new TouchStartEvent(changedTouches, touches);
Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchStart(tse);
}
@Override
public void mouseReleased(final MouseEvent e) {
final Insets wp = SwingWindow.this.getInsets();
final TouchPoint p = new TouchPoint(0, e.getX() - wp.left, e.getY() - wp.top, 5, 5, 1, 0);
final ObjectArrayList<TouchPoint> touches = new ObjectArrayList<>();
final ObjectArrayList<TouchPoint> changedTouches = new ObjectArrayList<>();
changedTouches.add(p);
final TouchEndEvent tse = new TouchEndEvent(changedTouches, touches);
Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchEnd(tse);
}
@Override
public void mouseEntered(final MouseEvent e) {}
@Override
public void mouseExited(final MouseEvent e) {}
});
StaticVars.windowZoom$.subscribe((newZoomValue) -> {
if (newZoomValue != mult) {
mult = (int) newZoomValue.floatValue();
onResize.submit(new Integer[] { getWWidth(), getWHeight() });
Engine.getPlatform().getConsoleUtils().out().println(3, "Engine", "CPU", "Zoom changed");
WarpPI.getPlatform().getConsoleUtils().out().println(3, "Engine", "CPU", "Zoom changed");
}
});
}
@ -225,6 +202,10 @@ public class SwingWindow extends JFrame {
for (int a = 4; a >= 0; a--)
createBtn(a, b);
createBlankBox();
var size = super.getSize();
super.setSize(size.width, size.height + buttonsPanelContainer.getHeight());
super.pack();
}
private void createBlankBox() {
@ -235,7 +216,7 @@ public class SwingWindow extends JFrame {
}
private void createBtn(final int row, final int col) throws IOException, URISyntaxException {
final BufferedImage img = ImageIO.read(Engine.getPlatform().getStorageUtils().getResourceStream("/desktop-buttons.png"));
final BufferedImage img = ImageIO.read(WarpPI.getPlatform().getStorageUtils().getResourceStream("/desktop-buttons.png"));
final SwingAdvancedButton b = new SwingAdvancedButton(img, new Dimension((int) (BTN_SIZE * 1.5), BTN_SIZE));
b.drawDefaultComponent = false;
b.setText(Keyboard.getKeyName(row, col));
@ -328,6 +309,7 @@ public class SwingWindow extends JFrame {
return onResize$;
}
@Deprecated
@Override
public void setSize(final int width, final int height) {
c.setSize(new Dimension(width * mult, height * mult));
@ -340,10 +322,12 @@ public class SwingWindow extends JFrame {
}
public int getWWidth() {
if (!windowShown) return defaultWidth;
return c.getWidth() / mult;
}
public int getWHeight() {
if (!windowShown) return defaultHeight;
return c.getHeight() / mult;
}
@ -358,6 +342,12 @@ public class SwingWindow extends JFrame {
super.setLocation(x, y);
}
public void sendPowerOffSignal() {
display.destroyEngine();
this.setVisible(false);
this.dispose();
}
// private static ObjectArrayList<Double> mediaValori = new ObjectArrayList<Double>();
public class CustomCanvas extends JPanel {
@ -371,7 +361,9 @@ public class SwingWindow extends JFrame {
public void paintComponent(final Graphics g) {
// long time1 = System.nanoTime();
if (renderingLoop != null) {
renderingLoop.refresh();
boolean forceRepaint = SwingWindow.this.forceRepaint;
SwingWindow.this.forceRepaint = false;
renderingLoop.refresh(forceRepaint);
final int[] a = ((DataBufferInt) display.g.getRaster().getDataBuffer()).getData();

View File

@ -18,8 +18,9 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>

View File

@ -0,0 +1,21 @@
package it.cavallium.warppi.gui.graphicengine.impl.jogl;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
public class JOGLDisplayOutputDevice implements DisplayOutputDevice {
private JOGLEngine engine;
public JOGLDisplayOutputDevice() {
this.engine = new JOGLEngine();
}
@Override
public int[] getDisplaySize() {
return engine.getSize();
}
@Override
public JOGLEngine getGraphicEngine() {
return engine;
}
}

View File

@ -8,10 +8,11 @@ import java.util.Map.Entry;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Semaphore;
import com.jogamp.newt.opengl.GLWindow;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.util.texture.Texture;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
@ -33,9 +34,12 @@ public class JOGLEngine implements GraphicEngine {
protected LinkedList<Texture> registeredTextures;
protected LinkedList<Texture> unregisteredTextures;
public JOGLEngine() {
}
@Override
public int[] getSize() {
return size;
return size.clone();
}
@Override
@ -71,19 +75,28 @@ public class JOGLEngine implements GraphicEngine {
public void create(final Runnable onInitialized) {
initialized = false;
created = false;
size = new int[] { StaticVars.screenSize[0], StaticVars.screenSize[1] };
this.getSize();
size = new int[] { this.getSize()[0], this.getSize()[1] };
created = true;
registeredTextures = new LinkedList<>();
unregisteredTextures = new LinkedList<>();
r = new JOGLRenderer();
wnd = new NEWTWindow(this);
wnd.create();
setDisplayMode(StaticVars.screenSize[0], StaticVars.screenSize[1]);
setResizable(Engine.getPlatform().getSettings().isDebugEnabled());
setDisplayMode(this.getSize()[0], this.getSize()[1]);
setResizable(WarpPI.getPlatform().getSettings().isDebugEnabled());
initialized = true;
wnd.onInitialized = onInitialized;
}
/**
* INTERNAL USE ONLY!
* @return
*/
public GLWindow getGLWindow() {
return wnd.window;
}
@Override
public EventSubscriber<Integer[]> onResize() {
return wnd.onResizeEvent;
@ -118,7 +131,7 @@ public class JOGLEngine implements GraphicEngine {
@Override
public void repaint() {
if (d != null & r != null && JOGLRenderer.gl != null)
d.refresh();
d.refresh(false);
}
@Override
@ -131,7 +144,8 @@ public class JOGLEngine implements GraphicEngine {
for (final Entry<String, JOGLFont> entry : fontCache.entrySet())
if (entry.getKey().equals(name))
return entry.getValue();
final JOGLFont font = new JOGLFont(this, name);
final JOGLFont font = new JOGLFont(name);
this.registerFont(font);
fontCache.put(name, font);
return font;
}
@ -141,21 +155,15 @@ public class JOGLEngine implements GraphicEngine {
for (final Entry<String, JOGLFont> entry : fontCache.entrySet())
if (entry.getKey().equals(name))
return entry.getValue();
final JOGLFont font = new JOGLFont(this, path, name);
final JOGLFont font = new JOGLFont(path, name);
this.registerFont(font);
fontCache.put(name, font);
return font;
}
@Override
public Skin loadSkin(final String file) throws IOException {
return new JOGLSkin(this, file);
}
@Override
public void waitForExit() {
try {
exitSemaphore.acquire();
} catch (final InterruptedException e) {}
return new JOGLSkin(file);
}
@Override
@ -180,8 +188,12 @@ public class JOGLEngine implements GraphicEngine {
return false;
}
public void registerFont(final JOGLFont gpuFont) {
registeredFonts.add(gpuFont);
private void registerFont(final BinaryFont gpuFont) {
if (gpuFont instanceof JOGLFont || gpuFont == null) {
registeredFonts.add(gpuFont);
} else {
throw new IllegalArgumentException("Can't handle font type " + gpuFont.getClass().getSimpleName());
}
}
@Override
@ -197,5 +209,4 @@ public class JOGLEngine implements GraphicEngine {
public void registerTexture(final Texture t) {
unregisteredTextures.addLast(t);
}
}

View File

@ -12,9 +12,9 @@ import ar.com.hjg.pngj.ImageInfo;
import ar.com.hjg.pngj.ImageLineHelper;
import ar.com.hjg.pngj.ImageLineInt;
import ar.com.hjg.pngj.PngWriter;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.impl.common.RFTFont;
public class JOGLFont implements BinaryFont {
@ -35,13 +35,12 @@ public class JOGLFont implements BinaryFont {
private boolean initialized = false;
private File tmpFont;
JOGLFont(final GraphicEngine g, final String name) throws IOException {
this(g, null, name);
JOGLFont(final String name) throws IOException {
this(null, name);
}
public JOGLFont(final GraphicEngine g, final String path, final String name) throws IOException {
public JOGLFont(final String path, final String name) throws IOException {
load(path, name);
((JOGLEngine) g).registerFont(this);
}
@Override
@ -63,10 +62,10 @@ public class JOGLFont implements BinaryFont {
intervalsTotalSize = font.intervalsTotalSize;
boolean[][] rawchars = font.rawchars;
font = null;
Engine.getPlatform().gc();
WarpPI.getPlatform().gc();
pregenTexture(rawchars);
rawchars = null;
Engine.getPlatform().gc();
WarpPI.getPlatform().gc();
}
public int[] getCharIndexes(final String txt) {
@ -154,7 +153,7 @@ public class JOGLFont implements BinaryFont {
}
chars = null;
png.end();
Engine.getPlatform().gc();
WarpPI.getPlatform().gc();
try {
memoryWidth = w;
@ -164,7 +163,7 @@ public class JOGLFont implements BinaryFont {
textureH = h;
outputStream.flush();
outputStream.close();
Engine.getPlatform().gc();
WarpPI.getPlatform().gc();
tmpFont = f;
} catch (GLException | IOException e) {
e.printStackTrace();
@ -185,17 +184,17 @@ public class JOGLFont implements BinaryFont {
}
@Override
public void initialize(final GraphicEngine d) {
public void initialize(final DisplayOutputDevice d) {
genTexture();
tmpFont = null;
initialized = true;
}
@Override
public void use(final GraphicEngine d) {
public void use(final DisplayOutputDevice d) {
if (!initialized)
initialize(d);
final JOGLRenderer r = (JOGLRenderer) d.getRenderer();
final JOGLRenderer r = (JOGLRenderer) d.getGraphicEngine().getRenderer();
r.currentFont = this;
r.useTexture(texture, textureW, textureH);
}

View File

@ -17,7 +17,7 @@ import com.jogamp.opengl.util.texture.Texture;
import com.jogamp.opengl.util.texture.TextureData;
import com.jogamp.opengl.util.texture.TextureIO;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.Renderer;
@ -272,7 +272,7 @@ public class JOGLRenderer implements Renderer {
final int imgW = img.getWidth();
final int imgH = img.getHeight();
img = null;
Engine.getPlatform().gc();
WarpPI.getPlatform().gc();
return new OpenedTextureData(imgW, imgH, f, isResource);
}
@ -301,7 +301,7 @@ public class JOGLRenderer implements Renderer {
final Texture tex = TextureIO.newTexture(f, false);
if (deleteOnExit && f.exists())
try {
if (Engine.getPlatform().getSettings().isDebugEnabled())
if (WarpPI.getPlatform().getSettings().isDebugEnabled())
throw new IOException("Delete on exit!");
f.delete();
} catch (final Exception ex) {

View File

@ -8,8 +8,8 @@ import java.nio.file.Paths;
import com.jogamp.opengl.GLException;
import com.jogamp.opengl.util.texture.Texture;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.Skin;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLRenderer.OpenedTextureData;
@ -23,21 +23,21 @@ public class JOGLSkin implements Skin {
private boolean initialized = false;
private boolean isResource;
JOGLSkin(final GraphicEngine d, final String file) throws IOException {
JOGLSkin(final String file) throws IOException {
load(file);
}
@Override
public void load(final String file) throws IOException {
final boolean isResource = !Files.exists(Paths.get(file));
if (isResource && Engine.getPlatform().getStorageUtils().getResourceStream(file) == null)
if (isResource && WarpPI.getPlatform().getStorageUtils().getResourceStream(file) == null)
throw new IOException("File '" + file + "' not found!");
texturePath = file;
this.isResource = isResource;
}
@Override
public void initialize(final GraphicEngine d) {
public void initialize(final DisplayOutputDevice d) {
try {
final OpenedTextureData i = JOGLRenderer.openTexture(texturePath, isResource);
t = JOGLRenderer.importTexture(i.f, i.deleteOnExit);
@ -52,10 +52,10 @@ public class JOGLSkin implements Skin {
}
@Override
public void use(final GraphicEngine d) {
public void use(final DisplayOutputDevice d) {
if (!initialized)
initialize(d);
final JOGLRenderer r = (JOGLRenderer) d.getRenderer();
final JOGLRenderer r = (JOGLRenderer) d.getGraphicEngine().getRenderer();
r.useTexture(t, w, h);
}

View File

@ -28,12 +28,8 @@
package it.cavallium.warppi.gui.graphicengine.impl.jogl;
import java.util.List;
import com.jogamp.newt.event.KeyEvent;
import com.jogamp.newt.event.KeyListener;
import com.jogamp.newt.event.MouseEvent;
import com.jogamp.newt.event.MouseListener;
import com.jogamp.newt.event.WindowEvent;
import com.jogamp.newt.event.WindowListener;
import com.jogamp.newt.event.WindowUpdateEvent;
@ -50,17 +46,12 @@ import com.jogamp.opengl.fixedfunc.GLPointerFunc;
import com.jogamp.opengl.util.Animator;
import com.jogamp.opengl.util.texture.Texture;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.event.Key;
import it.cavallium.warppi.event.TouchEndEvent;
import it.cavallium.warppi.event.TouchMoveEvent;
import it.cavallium.warppi.event.TouchPoint;
import it.cavallium.warppi.event.TouchStartEvent;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.util.EventSubmitter;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
/**
*
@ -70,47 +61,44 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class NEWTWindow implements GLEventListener {
private final JOGLEngine disp;
private final JOGLEngine engine;
private final JOGLRenderer renderer;
public GLWindow window;
public volatile float windowZoom = 1;
public int[] realWindowSize;
public Runnable onInitialized;
public volatile boolean refreshViewport;
public List<TouchPoint> touches = new ObjectArrayList<>();
final EventSubmitter<Integer[]> onRealResize;
final EventSubmitter<Integer[]> onResizeEvent = EventSubmitter.create();
private final EventSubmitter<Float> onZoom = EventSubmitter.create();
private final EventSubmitter<GL2ES1> onGLContext = EventSubmitter.create();
public NEWTWindow(final JOGLEngine disp) {
this.disp = disp;
renderer = disp.getRenderer();
disp.size[0] = StaticVars.screenSize[0];
disp.size[1] = StaticVars.screenSize[1];
realWindowSize = new int[] { StaticVars.screenSize[0], StaticVars.screenSize[1] };
public NEWTWindow(final JOGLEngine engine) {
this.engine = engine;
renderer = engine.getRenderer();
engine.size[0] = engine.getSize()[0];
engine.size[1] = engine.getSize()[1];
realWindowSize = new int[] { engine.getSize()[0], engine.getSize()[1] };
windowZoom = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue());
onRealResize = EventSubmitter.create(new Integer[] { (int) (StaticVars.screenSize[0] * windowZoom), (int) (StaticVars.screenSize[1] * windowZoom) });
onRealResize = BehaviorSubject.create(new Integer[] { (int) (engine.getSize()[0] * windowZoom), (int) (engine.getSize()[1] * windowZoom) });
onRealResize.subscribe((realSize) -> {
realWindowSize[0] = realSize[0];
realWindowSize[1] = realSize[1];
disp.size[0] = realSize[0] / (int) windowZoom;
disp.size[1] = realSize[1] / (int) windowZoom;
onResizeEvent.submit(new Integer[] { disp.size[0], disp.size[1] });
engine.size[0] = realSize[0] / (int) windowZoom;
engine.size[1] = realSize[1] / (int) windowZoom;
onResizeEvent.onNext(new Integer[] { engine.size[0], engine.size[1] });
refreshViewport = true;
});
StaticVars.windowZoom$.subscribe((zoom) -> {
onZoom.submit(zoom);
});
StaticVars.windowZoom$.subscribe(onZoom::onNext);
onZoom.subscribe((z) -> {
if (windowZoom != 0) {
windowZoom = z;
disp.size[0] = (int) (realWindowSize[0] / windowZoom);
disp.size[1] = (int) (realWindowSize[1] / windowZoom);
StaticVars.screenSize[0] = disp.size[0];
StaticVars.screenSize[1] = disp.size[1];
engine.size[0] = (int) (realWindowSize[0] / windowZoom);
engine.size[1] = (int) (realWindowSize[1] / windowZoom);
engine.getSize()[0] = engine.size[0];
engine.getSize()[1] = engine.size[1];
refreshViewport = true;
}
});
@ -123,7 +111,7 @@ class NEWTWindow implements GLEventListener {
System.err.println("Le OpenGL non sono presenti su questo computer!");
return;
}
if (Engine.getPlatform().getSettings().isDebugEnabled())
if (WarpPI.getPlatform().getSettings().isDebugEnabled())
System.setProperty("jnlp.newt.window.icons", "res/icons/calculator-016.png res/icons/calculator-018.png res/icons/calculator-256.png");
final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES1));
System.out.println("Loaded OpenGL");
@ -148,7 +136,6 @@ class NEWTWindow implements GLEventListener {
@Override
public void windowDestroyed(final WindowEvent e) {
final GraphicEngine engine = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine;
if (engine.isInitialized())
engine.destroy();
}
@ -314,112 +301,6 @@ class NEWTWindow implements GLEventListener {
}
}
});
glWindow.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(final MouseEvent e) {
// List<TouchPoint> newPoints = new ObjectArrayList<>();
// List<TouchPoint> changedPoints = new ObjectArrayList<>();
// List<TouchPoint> oldPoints = touches;
// int[] xs = e.getAllX();
// int[] ys = e.getAllY();
// float[] ps = e.getAllPressures();
// short[] is = e.getAllPointerIDs();
// for (int i = 0; i < e.getPointerCount(); i++) {
// newPoints.add(Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().makePoint(is[i], xs[i], ys[i], disp.getWidth(), disp.getHeight(), 5, 5, ps[i], 0));
// }
//
// changedPoints.add(newPoints.get(0));
// newPoints.remove(0);
// touches = newPoints;
// Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchStart(new TouchStartEvent(changedPoints, touches));
// Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchEnd(new TouchEndEvent(changedPoints, touches));
}
@Override
public void mouseEntered(final MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(final MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(final MouseEvent e) {
final List<TouchPoint> newPoints = new ObjectArrayList<>();
final List<TouchPoint> changedPoints = new ObjectArrayList<>();
@SuppressWarnings("unused")
final List<TouchPoint> oldPoints = touches;
final int[] xs = e.getAllX();
final int[] ys = e.getAllY();
final float[] ps = e.getAllPressures();
final short[] is = e.getAllPointerIDs();
for (int i = 0; i < e.getPointerCount(); i++)
newPoints.add(Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().makePoint(is[i], xs[i], ys[i], disp.getWidth(), disp.getHeight(), 5, 5, ps[i], 0));
changedPoints.add(newPoints.get(0));
touches = newPoints;
Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchStart(new TouchStartEvent(changedPoints, touches));
}
@Override
public void mouseReleased(final MouseEvent e) {
final List<TouchPoint> newPoints = new ObjectArrayList<>();
final List<TouchPoint> changedPoints = new ObjectArrayList<>();
@SuppressWarnings("unused")
final List<TouchPoint> oldPoints = touches;
final int[] xs = e.getAllX();
final int[] ys = e.getAllY();
final float[] ps = e.getAllPressures();
final short[] is = e.getAllPointerIDs();
for (int i = 0; i < e.getPointerCount(); i++)
newPoints.add(Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().makePoint(is[i], xs[i], ys[i], disp.getWidth(), disp.getHeight(), 5, 5, ps[i], 0));
changedPoints.add(newPoints.get(0));
newPoints.remove(0);
touches = newPoints;
Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchEnd(new TouchEndEvent(changedPoints, touches));
}
@Override
public void mouseMoved(final MouseEvent e) {}
private long lastDraggedTime = 0;
@Override
public void mouseDragged(final MouseEvent e) {
final long curTime = System.currentTimeMillis();
if (curTime - lastDraggedTime > 50) {
lastDraggedTime = curTime;
final List<TouchPoint> newPoints = new ObjectArrayList<>();
final List<TouchPoint> changedPoints = new ObjectArrayList<>();
final List<TouchPoint> oldPoints = touches;
final int[] xs = e.getAllX();
final int[] ys = e.getAllY();
final float[] ps = e.getAllPressures();
final short[] is = e.getAllPointerIDs();
for (int i = 0; i < e.getPointerCount(); i++)
newPoints.add(Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().makePoint(is[i], xs[i], ys[i], disp.getWidth(), disp.getHeight(), 5, 5, ps[i], 0));
newPoints.forEach((newp) -> {
oldPoints.forEach((oldp) -> {
if (newp.getID() == oldp.getID())
if (newp.equals(oldp) == false)
changedPoints.add(newp);
});
});
touches = newPoints;
Engine.INSTANCE.getHardwareDevice().getInputManager().getTouchDevice().onTouchMove(new TouchMoveEvent(changedPoints, touches));
}
}
@Override
public void mouseWheelMoved(final MouseEvent e) {
}
});
glWindow.addGLEventListener(this /* GLEventListener */);
final Animator animator = new Animator();
@ -432,7 +313,7 @@ class NEWTWindow implements GLEventListener {
final GL2ES1 gl = drawable.getGL().getGL2ES1();
onGLContext.submit(gl);
if (Engine.getPlatform().getSettings().isDebugEnabled())
if (WarpPI.getPlatform().getSettings().isDebugEnabled())
//Vsync
gl.setSwapInterval(1);
else
@ -451,7 +332,7 @@ class NEWTWindow implements GLEventListener {
//gl.glEnable(GL.GL_MULTISAMPLE);
try {
renderer.currentTex = ((JOGLSkin) disp.loadSkin("/test.png")).t;
renderer.currentTex = ((JOGLSkin) engine.loadSkin("/test.png")).t;
} catch (final Exception e) {
e.printStackTrace();
}
@ -487,21 +368,21 @@ class NEWTWindow implements GLEventListener {
gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0.0, disp.size[0], disp.size[1], 0.0, -1, 1);
gl.glOrtho(0.0, engine.size[0], engine.size[1], 0.0, -1, 1);
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
gl.glLoadIdentity();
for (final Texture t : disp.registeredTextures) {
for (final Texture t : engine.registeredTextures) {
t.setTexParameteri(gl, GL.GL_TEXTURE_MAG_FILTER, linear ? GL.GL_LINEAR : GL.GL_NEAREST);
t.setTexParameteri(gl, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
}
}
while (disp.unregisteredTextures.isEmpty() == false) {
final Texture t = disp.unregisteredTextures.pop();
while (engine.unregisteredTextures.isEmpty() == false) {
final Texture t = engine.unregisteredTextures.pop();
t.setTexParameteri(gl, GL.GL_TEXTURE_MAG_FILTER, linear ? GL.GL_LINEAR : GL.GL_NEAREST);
t.setTexParameteri(gl, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
disp.registeredTextures.addLast(t);
engine.registeredTextures.addLast(t);
}
gl.glEnableClientState(GLPointerFunc.GL_COLOR_ARRAY);
@ -510,7 +391,7 @@ class NEWTWindow implements GLEventListener {
renderer.initDrawCycle();
disp.repaint();
engine.repaint();
renderer.endDrawCycle();

View File

@ -18,8 +18,9 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>

View File

@ -0,0 +1,128 @@
package it.cavallium.warppi.device.input;
import java.util.List;
import java.util.concurrent.SubmissionPublisher;
import java.util.function.Consumer;
import com.jogamp.newt.event.MouseEvent;
import com.jogamp.newt.event.MouseListener;
import com.jogamp.newt.opengl.GLWindow;
import it.cavallium.warppi.event.TouchEndEvent;
import it.cavallium.warppi.event.TouchEvent;
import it.cavallium.warppi.event.TouchMoveEvent;
import it.cavallium.warppi.event.TouchPoint;
import it.cavallium.warppi.event.TouchStartEvent;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLEngine;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
public class PIHardwareTouchDevice implements TouchInputDevice {
private final boolean invertXY, invertX, invertY;
private final SubmissionPublisher<TouchEvent> touchEventPublisher = new SubmissionPublisher<>();
private final JOGLEngine engine;
private GLWindow window;
public List<TouchPoint> touches = new ObjectArrayList<>();
private long lastDraggedTime = 0;
public PIHardwareTouchDevice(final boolean invertXY, final boolean invertX, final boolean invertY, JOGLEngine joglEngine) {
this.invertXY = invertXY;
this.invertX = invertX;
this.invertY = invertY;
this.engine = joglEngine;
}
@Override
public void initialize() {
this.window = engine.getGLWindow();
window.addMouseListener(new MouseListener() {
@Override
public void mousePressed(final MouseEvent e) {
final List<TouchPoint> newPoints = new ObjectArrayList<>();
final List<TouchPoint> changedPoints = new ObjectArrayList<>();
@SuppressWarnings("unused")
final List<TouchPoint> oldPoints = touches;
final int[] xs = e.getAllX();
final int[] ys = e.getAllY();
final float[] ps = e.getAllPressures();
final short[] is = e.getAllPointerIDs();
for (int i = 0; i < e.getPointerCount(); i++)
newPoints.add(PIHardwareTouchDevice.this.makePoint(is[i], xs[i], ys[i], engine.getWidth(), engine.getHeight(), 5, 5, ps[i], 0));
changedPoints.add(newPoints.get(0));
touches = newPoints;
PIHardwareTouchDevice.this.touchEventPublisher.submit(new TouchStartEvent(changedPoints, touches));
}
@Override
public void mouseReleased(final MouseEvent e) {
final List<TouchPoint> newPoints = new ObjectArrayList<>();
final List<TouchPoint> changedPoints = new ObjectArrayList<>();
@SuppressWarnings("unused")
final List<TouchPoint> oldPoints = touches;
final int[] xs = e.getAllX();
final int[] ys = e.getAllY();
final float[] ps = e.getAllPressures();
final short[] is = e.getAllPointerIDs();
for (int i = 0; i < e.getPointerCount(); i++)
newPoints.add(PIHardwareTouchDevice.this.makePoint(is[i], xs[i], ys[i], engine.getWidth(), engine.getHeight(), 5, 5, ps[i], 0));
changedPoints.add(newPoints.get(0));
newPoints.remove(0);
touches = newPoints;
PIHardwareTouchDevice.this.touchEventPublisher.submit(new TouchEndEvent(changedPoints, touches));
}
@Override
public void mouseDragged(final MouseEvent e) {
final long curTime = System.currentTimeMillis();
if (curTime - lastDraggedTime > 50) {
lastDraggedTime = curTime;
final List<TouchPoint> newPoints = new ObjectArrayList<>();
final List<TouchPoint> changedPoints = new ObjectArrayList<>();
final List<TouchPoint> oldPoints = touches;
final int[] xs = e.getAllX();
final int[] ys = e.getAllY();
final float[] ps = e.getAllPressures();
final short[] is = e.getAllPointerIDs();
for (int i = 0; i < e.getPointerCount(); i++)
newPoints.add(PIHardwareTouchDevice.this.makePoint(is[i], xs[i], ys[i], engine.getWidth(), engine.getHeight(), 5, 5, ps[i], 0));
newPoints.forEach((newp) -> {
oldPoints.forEach((oldp) -> {
if (newp.getID() == oldp.getID())
if (newp.equals(oldp) == false)
changedPoints.add(newp);
});
});
touches = newPoints;
PIHardwareTouchDevice.this.touchEventPublisher.submit(new TouchMoveEvent(changedPoints, touches));
}
}
@Override public void mouseClicked(final MouseEvent e) { }
@Override public void mouseEntered(final MouseEvent e) { }
@Override public void mouseExited(final MouseEvent e) { }
@Override public void mouseMoved(final MouseEvent e) {}
@Override public void mouseWheelMoved(final MouseEvent e) { }
});
}
@Override
public boolean getSwappedAxes() {
return invertXY;
}
@Override
public boolean getInvertedX() {
return invertX;
}
@Override
public boolean getInvertedY() {
return invertY;
}
@Override
public void listenTouchEvents(Consumer<TouchEvent> touchEventListener) {
touchEventPublisher.consume(touchEventListener);
}
}

View File

@ -2,7 +2,7 @@ package it.cavallium.warppi.gui.graphicengine.impl.framebuffer;
import java.io.IOException;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.common.RFTFont;
public class FBFont extends RFTFont {
@ -16,7 +16,7 @@ public class FBFont extends RFTFont {
}
@Override
public void use(final GraphicEngine d) {
public void use(final DisplayOutputDevice d) {
@SuppressWarnings("unused")
final FBEngine dfb = (FBEngine) d;
// TODO: implement

View File

@ -2,7 +2,7 @@ package it.cavallium.warppi.gui.graphicengine.impl.framebuffer;
import java.io.IOException;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.common.PngSkin;
public class FBSkin extends PngSkin {
@ -12,7 +12,7 @@ public class FBSkin extends PngSkin {
}
@Override
public void use(final GraphicEngine d) {
public void use(final DisplayOutputDevice d) {
@SuppressWarnings("unused")
final FBEngine dfb = (FBEngine) d;
// TODO: implement

View File

@ -11,8 +11,17 @@ import java.util.List;
import java.util.Map;
import it.cavallium.warppi.Platform;
import it.cavallium.warppi.boot.StartupArguments;
import it.cavallium.warppi.device.DeviceStateDevice;
import it.cavallium.warppi.device.display.BacklightOutputDevice;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.device.display.NoDisplaysAvailableException;
import it.cavallium.warppi.device.input.KeyboardInputDevice;
import it.cavallium.warppi.device.input.PIHardwareTouchDevice;
import it.cavallium.warppi.device.input.TouchInputDevice;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.impl.framebuffer.FBEngine;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLDisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLEngine;
import it.cavallium.warppi.util.Error;
@ -26,6 +35,11 @@ public class HardwarePlatform implements Platform {
private final Map<String, GraphicEngine> el;
private final HardwareSettings settings;
private Boolean runningOnRaspberryOverride = null;
private StartupArguments args;
private DisplayOutputDevice displayOutputDevice;
private BacklightOutputDevice backlightOutputDevice;
private KeyboardInputDevice keyboardInputDevice;
private TouchInputDevice touchInputDevice;
public HardwarePlatform() {
cu = new HardwareConsoleUtils();
@ -122,16 +136,6 @@ public class HardwarePlatform implements Platform {
return new HardwareURLClassLoader(urls);
}
@Override
public Map<String, GraphicEngine> getEnginesList() {
return el;
}
@Override
public GraphicEngine getEngine(final String string) throws NullPointerException {
return el.get(string);
}
@Override
public void throwNewExceptionInInitializerError(final String text) {
throw new ExceptionInInitializerError();
@ -194,4 +198,62 @@ public class HardwarePlatform implements Platform {
*/
}
@Override
public TouchInputDevice getTouchInputDevice() {
return touchInputDevice;
}
@Override
public KeyboardInputDevice getKeyboardInputDevice() {
return keyboardInputDevice;
}
@Override
public DisplayOutputDevice getDisplayOutputDevice() {
return displayOutputDevice;
}
@Override
public BacklightOutputDevice getBacklightOutputDevice() {
return backlightOutputDevice;
}
@Override
public void setArguments(StartupArguments args) {
this.args = args;
this.chooseDevices();
}
private void chooseDevices() {
List<DisplayOutputDevice> availableDevices = new ArrayList<>();
List<DisplayOutputDevice> guiDevices = List.of(new JOGLDisplayOutputDevice());
List<DisplayOutputDevice> consoleDevices = List.of();
if (args.isMSDOSModeEnabled() || args.isNoGUIEngineForced()) {
availableDevices.addAll(consoleDevices);
}
if (!args.isNoGUIEngineForced()) {
availableDevices.addAll(guiDevices);
}
if (availableDevices.size() == 0) {
throw new NoDisplaysAvailableException();
}
for (DisplayOutputDevice device : availableDevices) {
if (device instanceof JOGLDisplayOutputDevice) {
if (args.isGPUEngineForced()) {
this.displayOutputDevice = device;
break;
}
}
}
if (this.displayOutputDevice == null) this.displayOutputDevice = availableDevices.get(0);
if (displayOutputDevice instanceof JOGLDisplayOutputDevice) {
this.touchInputDevice = new PIHardwareTouchDevice(false, false, false, (JOGLEngine) displayOutputDevice.getGraphicEngine());
}
}
}

View File

@ -17,10 +17,10 @@ import org.teavm.jso.dom.html.HTMLElement;
import org.teavm.jso.dom.html.HTMLInputElement;
import org.teavm.jso.dom.xml.NodeList;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.RenderingLoop;
import it.unimi.dsi.fastutil.objects.Object2IntArrayMap;
@ -85,7 +85,7 @@ public class HtmlEngine implements GraphicEngine {
@Override
public void create(final Runnable onInitialized) {
exitSemaphore = Engine.getPlatform().newSemaphore(0);
exitSemaphore = WarpPI.getPlatform().newSemaphore(0);
width = -1;
height = -1;
canvas = (HTMLCanvasElement) HtmlEngine.document.createElement("canvas");
@ -276,8 +276,8 @@ public class HtmlEngine implements GraphicEngine {
e.printStackTrace();
}
});
Engine.getPlatform().setThreadName(th, "Canvas rendering thread");
Engine.getPlatform().setThreadDaemon(th);
WarpPI.getPlatform().setThreadName(th, "Canvas rendering thread");
WarpPI.getPlatform().setThreadDaemon(th);
th.start();
}
@ -315,7 +315,7 @@ public class HtmlEngine implements GraphicEngine {
@Override
public boolean isSupported() {
return Engine.getPlatform().isJavascript();
return WarpPI.getPlatform().isJavascript();
}
@Override

View File

@ -7,7 +7,7 @@ import org.teavm.jso.canvas.CanvasRenderingContext2D;
import org.teavm.jso.dom.html.HTMLCanvasElement;
import org.teavm.jso.dom.html.HTMLDocument;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.impl.common.RFTFont;
public class HtmlFont extends RFTFont {
@ -47,9 +47,9 @@ public class HtmlFont extends RFTFont {
}
@Override
public void use(final GraphicEngine d) {
if (d.getRenderer() instanceof HtmlRenderer)
((HtmlRenderer) d.getRenderer()).f = this;
public void use(final DisplayOutputDevice d) {
if (d.getGraphicEngine().getRenderer() instanceof HtmlRenderer)
((HtmlRenderer) d.getGraphicEngine().getRenderer()).f = this;
}
}

View File

@ -9,9 +9,9 @@ import org.teavm.jso.dom.events.Event;
import org.teavm.jso.dom.html.HTMLDocument;
import org.teavm.jso.dom.html.HTMLImageElement;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.Skin;
public class HtmlSkin implements Skin {
@ -29,7 +29,7 @@ public class HtmlSkin implements Skin {
}
@Override
public void use(final GraphicEngine d) {
public void use(final DisplayOutputDevice d) {
if (d instanceof HtmlEngine) {
if (!initd)
initialize(d);
@ -39,11 +39,11 @@ public class HtmlSkin implements Skin {
@Override
public void load(String file) throws IOException {
url = Engine.getPlatform().getStorageUtils().getBasePath() + (!file.startsWith("/") ? "/" : "") + file;
url = WarpPI.getPlatform().getStorageUtils().getBasePath() + (!file.startsWith("/") ? "/" : "") + file;
}
@Override
public void initialize(final GraphicEngine d) {
public void initialize(final DisplayOutputDevice d) {
final HTMLDocument doc = Window.current().getDocument();
Boolean[] done = new Boolean[]{false};
imgEl = doc.createElement("img").cast();

View File

@ -11,6 +11,7 @@ import org.teavm.jso.browser.Window;
import org.teavm.jso.dom.html.HTMLDocument;
import it.cavallium.warppi.Platform;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.html.HtmlEngine;
import it.cavallium.warppi.util.Error;
@ -123,12 +124,12 @@ public class TeaVMPlatform implements Platform {
}
@Override
public Map<String, GraphicEngine> getEnginesList() {
public Map<String, GraphicEngine> getGraphicEnginesList() {
return el;
}
@Override
public GraphicEngine getEngine(final String string) throws NullPointerException {
public DisplayOutputDevice getGraphicEngine(final String string) throws NullPointerException {
return el.get(string);
}

View File

@ -8,13 +8,14 @@
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>

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