Fix zoom, rename block functions

This commit is contained in:
Andrea Cavalli 2023-08-23 12:04:27 +02:00
parent 0aceed466d
commit 3031966145
20 changed files with 76 additions and 86 deletions

View File

@ -1,7 +1,5 @@
package it.cavallium.warppi;
import java.util.function.Function;
import it.cavallium.warppi.boot.StartupArguments;
import it.cavallium.warppi.util.EventSubmitter;
@ -9,18 +7,9 @@ import it.cavallium.warppi.util.EventSubmitter;
* TODO: Move everything to Engine.Settings
*/
public class StaticVars {
public static final boolean zoomed = true;
public static final boolean zoomedFonts = true;
public static int outputLevel = 0;
public static boolean debugWindow2x = false;
public static EventSubmitter<Float> windowZoom = new EventSubmitter<>(1F);
public static Function<Float, Float> windowZoomFunction = (val) -> {
if (StaticVars.debugWindow2x) {
return val + 1;
} else {
return val;
}
};
public static EventSubmitter<Float> windowZoom$ = StaticVars.windowZoom.map(StaticVars.windowZoomFunction);
public static StartupArguments startupArguments;
private StaticVars() {

View File

@ -91,7 +91,7 @@ public class WarpPI {
private void initializeEnvironment(final StartupArguments args) throws IOException {
ClassUtils.classLoader = this.getClass();
StaticVars.startupArguments = args;
StaticVars.debugWindow2x = args.isZoomed();
StaticVars.windowZoom.submit(args.isZoomed() ? 2f : 1f);
if (args.isVerboseLoggingEnabled() || args.isDebugEnabled()) {
StaticVars.outputLevel = ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE;
}

View File

@ -44,7 +44,7 @@ public class Boot {
case "-noraspi":
args.setRaspberryModeAllowed(false);
break;
case "nogui":
case "nogui":
args.setNoGUIEngineForced(true);
break;
case "ms-dos":

View File

@ -47,9 +47,9 @@ public abstract class Block implements TreeBlock, GraphicalElement {
*/
public abstract void draw(DisplayOutputDevice ge, Renderer r, int x, int y, Caret caret);
public abstract boolean putBlock(Caret caret, Block newBlock);
public abstract boolean appendBlock(Caret caret, Block newBlock, boolean splitAdjacent);
public abstract boolean delBlock(Caret caret);
public abstract boolean deleteBlock(Caret caret);
public abstract BlockReference<?> getBlock(Caret caret);

View File

@ -36,12 +36,12 @@ public class BlockChar extends Block {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
return false;
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
return false;
}

View File

@ -1,7 +1,5 @@
package it.cavallium.warppi.gui.expression.blocks;
import java.util.Arrays;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.gui.GraphicalElement;
@ -213,7 +211,7 @@ public class BlockContainer implements TreeContainer, GraphicalElement {
caret.skip(1);
}
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
boolean added = false;
if (caret.getRemaining() == 0) {
@ -225,7 +223,7 @@ public class BlockContainer implements TreeContainer, GraphicalElement {
for (final Block b : content) {
caret.skip(1);
pos++;
added = added | b.putBlock(caret, newBlock);
added = added | b.appendBlock(caret, newBlock, splitAdjacent);
if (caret.getRemaining() == 0) {
addBlock(pos, newBlock);
added = true;
@ -238,7 +236,7 @@ public class BlockContainer implements TreeContainer, GraphicalElement {
return added;
}
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
boolean removed = false;
int pos = 0;
@ -247,7 +245,7 @@ public class BlockContainer implements TreeContainer, GraphicalElement {
pos++;
final int deltaCaret = caret.getRemaining();
final int caretOldPos = caret.getPosition();
removed = removed | b.delBlock(caret);
removed = removed | b.deleteBlock(caret);
if (caret.getRemaining() == 0 || removed == false && deltaCaret >= 0 && caret.getRemaining() < 0) {
ObjectArrayList<Block> blocks = this.getBlockAt(pos - 1).get().getInnerBlocks();
ObjectArrayList<BlockContainer> innerContainers = this.getBlockAt(pos - 1).get().getInnerContainers();

View File

@ -9,7 +9,6 @@ import it.cavallium.warppi.math.MathContext;
import it.cavallium.warppi.math.parser.features.FeatureDivision;
import it.cavallium.warppi.math.parser.features.interfaces.Feature;
import it.cavallium.warppi.util.Error;
import it.unimi.dsi.fastutil.objects.AbstractObjectList;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
public class BlockDivision extends Block {
@ -48,10 +47,10 @@ public class BlockDivision extends Block {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
boolean added = false;
added = added | containerUp.putBlock(caret, newBlock);
added = added | containerDown.putBlock(caret, newBlock);
added = added | containerUp.appendBlock(caret, newBlock, splitAdjacent);
added = added | containerDown.appendBlock(caret, newBlock, splitAdjacent);
if (added) {
recomputeDimensions();
}
@ -59,10 +58,10 @@ public class BlockDivision extends Block {
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
boolean removed = false;
removed = removed | containerUp.delBlock(caret);
removed = removed | containerDown.delBlock(caret);
removed = removed | containerUp.deleteBlock(caret);
removed = removed | containerDown.deleteBlock(caret);
if (removed) {
recomputeDimensions();
}

View File

@ -80,10 +80,10 @@ public class BlockLogarithm extends Block implements IParenthesis {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
boolean added = false;
added = added | containerBase.putBlock(caret, newBlock);
added = added | containerNumber.putBlock(caret, newBlock);
added = added | containerBase.appendBlock(caret, newBlock, splitAdjacent);
added = added | containerNumber.appendBlock(caret, newBlock, splitAdjacent);
if (added) {
recomputeDimensions();
}
@ -91,10 +91,10 @@ public class BlockLogarithm extends Block implements IParenthesis {
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
boolean removed = false;
removed = removed | containerBase.delBlock(caret);
removed = removed | containerNumber.delBlock(caret);
removed = removed | containerBase.deleteBlock(caret);
removed = removed | containerNumber.deleteBlock(caret);
if (removed) {
recomputeDimensions();
}

View File

@ -56,7 +56,7 @@ public abstract class BlockParenthesisAbstract extends Block implements IParenth
BlockContainer.getDefaultFont(small).use(ge);
r.glColor(BlockContainer.getDefaultColor());
if (prefix != null) {
r.glDrawStringLeft(x + 1, y + line - chh / 2, prefix);
r.glDrawStringLeft(x + 1, y + line - chh / 2f, prefix);
}
r.glDrawCharLeft(x + prw, y, '╭');
r.glDrawCharLeft(x + prw, y + height - chh, '╰');
@ -73,9 +73,9 @@ public abstract class BlockParenthesisAbstract extends Block implements IParenth
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
boolean added = false;
added = added | containerNumber.putBlock(caret, newBlock);
added = added | containerNumber.appendBlock(caret, newBlock, splitAdjacent);
if (added) {
recomputeDimensions();
}
@ -83,9 +83,9 @@ public abstract class BlockParenthesisAbstract extends Block implements IParenth
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
boolean removed = false;
removed = removed | containerNumber.delBlock(caret);
removed = removed | containerNumber.deleteBlock(caret);
if (removed) {
recomputeDimensions();
}

View File

@ -33,9 +33,9 @@ public class BlockPower extends Block {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
boolean added = false;
added = added | containerExponent.putBlock(caret, newBlock);
added = added | containerExponent.appendBlock(caret, newBlock, splitAdjacent);
if (added) {
recomputeDimensions();
}
@ -43,9 +43,9 @@ public class BlockPower extends Block {
}
@Override
public boolean delBlock(Caret caret) {
public boolean deleteBlock(Caret caret) {
boolean removed = false;
removed = removed | containerExponent.delBlock(caret);
removed = removed | containerExponent.deleteBlock(caret);
if (removed) {
recomputeDimensions();
}

View File

@ -39,9 +39,9 @@ public class BlockPower2 extends Block {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
boolean added = false;
added = added | containerExponent.putBlock(caret, newBlock);
added = added | containerExponent.appendBlock(caret, newBlock, splitAdjacent);
if (added) {
recomputeDimensions();
}
@ -49,9 +49,9 @@ public class BlockPower2 extends Block {
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
boolean removed = false;
removed = removed | containerExponent.delBlock(caret);
removed = removed | containerExponent.deleteBlock(caret);
if (removed) {
recomputeDimensions();
}

View File

@ -44,9 +44,9 @@ public class BlockSquareRoot extends Block {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
boolean added = false;
added = added | containerNumber.putBlock(caret, newBlock);
added = added | containerNumber.appendBlock(caret, newBlock, splitAdjacent);
if (added) {
recomputeDimensions();
}
@ -54,9 +54,9 @@ public class BlockSquareRoot extends Block {
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
boolean removed = false;
removed = removed | containerNumber.delBlock(caret);
removed = removed | containerNumber.deleteBlock(caret);
if (removed) {
recomputeDimensions();
}

View File

@ -28,12 +28,12 @@ public class BlockUndefined extends Block {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
return false;
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
return false;
}

View File

@ -1,7 +1,5 @@
package it.cavallium.warppi.gui.expression.blocks;
import java.util.Arrays;
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
import it.cavallium.warppi.event.KeyPressedEvent;
@ -108,12 +106,12 @@ public class BlockVariable extends Block {
}
@Override
public boolean putBlock(final Caret caret, final Block newBlock) {
public boolean appendBlock(final Caret caret, final Block newBlock, boolean splitAdjacent) {
return false;
}
@Override
public boolean delBlock(final Caret caret) {
public boolean deleteBlock(final Caret caret) {
return false;
}

View File

@ -9,6 +9,7 @@ import it.cavallium.warppi.gui.expression.ExtraMenu;
import it.cavallium.warppi.gui.expression.InputContext;
import it.cavallium.warppi.gui.expression.blocks.Block;
import it.cavallium.warppi.gui.expression.blocks.BlockContainer;
import it.cavallium.warppi.gui.expression.blocks.BlockDivision;
import it.cavallium.warppi.gui.expression.blocks.BlockReference;
import it.cavallium.warppi.gui.expression.layouts.InputLayout;
import it.cavallium.warppi.gui.graphicengine.Renderer;
@ -76,7 +77,11 @@ public abstract class InputContainer implements GraphicalElement, InputLayout {
public void typeBlock(final Block b) {
if (b != null) {
caret.resetRemaining();
if (root.putBlock(caret, b)) {
// todo: allow blocks to dinamically choose insert mode
var splitAdjacent = b instanceof BlockDivision;
if (root.appendBlock(caret, b, splitAdjacent)) {
caret.setPosition(caret.getPosition() + b.getCaretDeltaPositionAfterCreation());
maxPosition = root.computeCaretMaxBound();
root.recomputeDimensions();
@ -93,7 +98,7 @@ public abstract class InputContainer implements GraphicalElement, InputLayout {
public void del() {
caret.resetRemaining();
if (root.delBlock(caret)) {
if (root.deleteBlock(caret)) {
root.recomputeDimensions();
}
if (caret.getPosition() > 0) {

View File

@ -3,20 +3,7 @@ package it.cavallium.warppi.gui.expression.containers;
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.expression.blocks.Block;
import it.cavallium.warppi.gui.expression.blocks.BlockChar;
import it.cavallium.warppi.gui.expression.blocks.BlockContainer;
import it.cavallium.warppi.gui.expression.blocks.BlockDivision;
import it.cavallium.warppi.gui.expression.blocks.BlockLogarithm;
import it.cavallium.warppi.gui.expression.blocks.BlockNumericChar;
import it.cavallium.warppi.gui.expression.blocks.BlockParenthesis;
import it.cavallium.warppi.gui.expression.blocks.BlockPower;
import it.cavallium.warppi.gui.expression.blocks.BlockPower2;
import it.cavallium.warppi.gui.expression.blocks.BlockReference;
import it.cavallium.warppi.gui.expression.blocks.BlockSine;
import it.cavallium.warppi.gui.expression.blocks.BlockSquareRoot;
import it.cavallium.warppi.gui.expression.blocks.BlockVariable;
import it.cavallium.warppi.gui.expression.blocks.IParenthesis;
import it.cavallium.warppi.gui.expression.blocks.*;
import it.cavallium.warppi.math.MathematicalSymbols;
public class NormalInputContainer extends InputContainer {

View File

@ -34,7 +34,7 @@ public class LoadingScreen extends Screen {
@Override
public void initialized() throws InterruptedException {
float lastZoomValue = StaticVars.windowZoom.getLastValue();
previousZoomValue = StaticVars.windowZoomFunction.apply(lastZoomValue);
previousZoomValue = lastZoomValue;
WarpPI.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().hide();
if (lastZoomValue != 1.0f) {
StaticVars.windowZoom.submit(1f);

View File

@ -395,7 +395,7 @@ public class Utils {
}
public static final BinaryFont getFont(final boolean small) {
return Utils.getFont(small, StaticVars.zoomed);
return Utils.getFont(small, StaticVars.zoomedFonts);
}
public static final BinaryFont getFont(final boolean small, final boolean zoomed) {
@ -417,7 +417,7 @@ public class Utils {
}
public static final int getFontHeight(final boolean small) {
return Utils.getFontHeight(small, StaticVars.zoomed);
return Utils.getFontHeight(small, StaticVars.zoomedFonts);
}
public static final int getFontHeight(final boolean small, final boolean zoomed) {

View File

@ -58,7 +58,7 @@ public class SwingWindow extends JFrame {
// Transparent 16 x 16 pixel cursor image.
final BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
mult = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue()).intValue();
mult = StaticVars.windowZoom.getLastValue().intValue();
if (!WarpPI.getPlatform().getSettings().isDebugEnabled()) {
// Create a new blank cursor.
@ -150,7 +150,7 @@ public class SwingWindow extends JFrame {
}
});
StaticVars.windowZoom$.subscribe((newZoomValue) -> {
StaticVars.windowZoom.subscribe((newZoomValue) -> {
mult = (int) newZoomValue.floatValue();
onResize.submit(new Integer[]{getWWidth(), getWHeight()});
WarpPI.getPlatform().getConsoleUtils().out().println(3, "Engine", "CPU", "Zoom changed");
@ -159,7 +159,7 @@ public class SwingWindow extends JFrame {
private void setupButtonsPanel() throws IOException, URISyntaxException {
BTN_SIZE = 32;
if (StaticVars.debugWindow2x)
if (StaticVars.startupArguments.isZoomed())
BTN_SIZE *= 2;
buttons = new SwingAdvancedButton[8][8];

View File

@ -28,6 +28,10 @@
package it.cavallium.warppi.gui.graphicengine.impl.jogl;
import com.jogamp.nativewindow.AbstractGraphicsDevice;
import com.jogamp.nativewindow.egl.EGLGraphicsDevice;
import com.jogamp.newt.Display;
import com.jogamp.newt.Screen;
import com.jogamp.newt.event.KeyEvent;
import com.jogamp.newt.event.KeyListener;
import com.jogamp.newt.event.WindowEvent;
@ -51,6 +55,11 @@ import it.cavallium.warppi.device.input.Keyboard;
import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.event.Key;
import it.cavallium.warppi.util.EventSubmitter;
import jogamp.newt.driver.bcm.vc.iv.DisplayDriver;
import jogamp.newt.driver.bcm.vc.iv.ScreenDriver;
import java.io.IOException;
import java.util.NoSuchElementException;
/**
*
@ -63,7 +72,7 @@ class NEWTWindow implements GLEventListener {
private final JOGLEngine engine;
private final JOGLRenderer renderer;
public GLWindow window;
public volatile float windowZoom = 1;
public volatile float windowZoom = 1f;
public int[] realWindowSize;
public Runnable onInitialized;
public volatile boolean refreshViewport;
@ -79,7 +88,7 @@ class NEWTWindow implements GLEventListener {
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());
windowZoom = StaticVars.windowZoom.getLastValue();
onRealResize = EventSubmitter.create(new Integer[] { (int) (engine.getSize()[0] * windowZoom), (int) (engine.getSize()[1] * windowZoom) });
onRealResize.subscribe((realSize) -> {
@ -90,7 +99,7 @@ class NEWTWindow implements GLEventListener {
onResizeEvent.submit(new Integer[] { engine.size[0], engine.size[1] });
refreshViewport = true;
});
StaticVars.windowZoom$.subscribe(onZoom::submit);
StaticVars.windowZoom.subscribe(onZoom::submit);
onZoom.subscribe((z) -> {
if (windowZoom != 0) {
windowZoom = z;
@ -105,7 +114,12 @@ class NEWTWindow implements GLEventListener {
public void create() {
System.out.println("Loading OpenGL...");
System.out.println(GLProfile.glAvailabilityToString());
GLProfile.initSingleton();
try {
System.out.println(GLProfile.glAvailabilityToString());
} catch (Exception ex) {
System.out.println("OpenGL Capabilities are not available. " + ex.getLocalizedMessage());
}
if (!GLProfile.isAvailable(GLProfile.GL2ES1)) {
System.err.println("Le OpenGL non sono presenti su questo computer!");
return;