Merge remote-tracking branch 'master/dev'
This commit is contained in:
commit
a9dd7de800
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package it.cavallium.warppi.device;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
public interface DeviceStateDevice {
|
||||
|
||||
void initialize();
|
||||
|
||||
Future<?> waitForExit();
|
||||
|
||||
void powerOff();
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package it.cavallium.warppi.device.display;
|
||||
|
||||
public class NoDisplaysAvailableException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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 {
|
|
@ -0,0 +1,5 @@
|
|||
package it.cavallium.warppi.device.input;
|
||||
|
||||
public interface HardwareKeyboardDevice {
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,4 @@
|
|||
package it.cavallium.warppi.device;
|
||||
package it.cavallium.warppi.device.input;
|
||||
|
||||
public interface KeyboardAWTValues {
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package it.cavallium.warppi.device.input;
|
||||
|
||||
public interface KeyboardInputDevice {
|
||||
|
||||
void initialize();
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package it.cavallium.warppi.device;
|
||||
package it.cavallium.warppi.device.input;
|
||||
|
||||
public interface KeyboardJogampValues {
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
package it.cavallium.warppi.gui;
|
||||
|
||||
public interface HardwareDisplay {
|
||||
void initialize();
|
||||
|
||||
void shutdown();
|
||||
|
||||
void setBrightness(double value);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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, "ℯ℮");
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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); // /
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -42,4 +42,6 @@ public interface Renderer {
|
|||
void glClearSkin();
|
||||
|
||||
BinaryFont getCurrentFont();
|
||||
|
||||
Renderer getBoundedInstance(int dx, int dy, int width, int height);
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
package it.cavallium.warppi.gui.graphicengine;
|
||||
|
||||
public interface RenderingLoop {
|
||||
void refresh();
|
||||
void refresh(boolean force);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package it.cavallium.warppi.util;
|
||||
|
||||
public interface RunnableWithException {
|
||||
public void run() throws Exception;
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue