start using tinker

This commit is contained in:
2022-02-21 01:50:19 +01:00
parent 829484cb67
commit c78bdab7e4
16 changed files with 172 additions and 255 deletions

View File

@@ -1,6 +1,7 @@
package kernel.ui;
import util.Signal;
using tink.CoreApi;
import util.Vec.Vec2;
import util.Color;
import lib.TermWriteable;
@@ -21,14 +22,19 @@ class TermBuffer implements TermWriteable {
private var currentTextColor: Color = White;
private var currentBgColor: Color = Black;
private var size: Vec2<Int> = {x: 51,y:19}; // Default size set to default size of the main terminal
public var onResize(default,null):Signal<Vec2<Int>>;
private final onResizeTrigger:SignalTrigger<Vec2<Int>>;
public function new() {
this.onResizeTrigger = Signal.trigger();
this.onResize = onResizeTrigger.asSignal();
initScreenBuffer(size);
}
private function setSize(size: Vec2<Int>) {
if (this.size != size){
this._onResize.emit(size);
this.onResizeTrigger.trigger(size);
}
this.size = size;
@@ -96,13 +102,6 @@ class TermBuffer implements TermWriteable {
// TermWriteable functions
//
public var onResize(get,null):SignalReadonly<Vec2<Int>>;
private final _onResize:Signal<Vec2<Int>> = new Signal();
function get_onResize():Signal<Vec2<Int>> {
return _onResize;
}
public function write(text:String) {
for (i in 0...text.length){
safeWriteScreenBuffer({x: cursorPos.x,y: cursorPos.y},text.charAt(i));
@@ -171,4 +170,3 @@ class TermBuffer implements TermWriteable {
throw new haxe.exceptions.NotImplementedException();
}
}

View File

@@ -1,6 +1,7 @@
package kernel.ui;
import util.Signal.SignalListner;
using tink.CoreApi;
import util.Vec.Vec2;
import util.Color;
import lib.TermWriteable;
@@ -10,7 +11,7 @@ class VirtualTermWriter implements TermWriteable extends TermBuffer {
private var target: TermWriteable;
private var enabled:Bool = false;
private var onResizeListner: SignalListner<Vec2<Int>>;
private var onResizeLink: CallbackLink;
public function new(?target: TermWriteable) {
setTarget(target);
@@ -42,12 +43,12 @@ class VirtualTermWriter implements TermWriteable extends TermBuffer {
super.setSize(newTarget.getSize());
// Remove old target event listner
if (onResizeListner != null && target != null){
target.onResize.remove(onResizeListner);
if (onResizeLink != null){
onResizeLink.cancel();
}
// Add new target event listner
onResizeListner = newTarget.onResize.on(newSize -> {
onResizeLink = newTarget.onResize.handle(newSize -> {
setSuperSize(newSize);
});

View File

@@ -1,7 +1,8 @@
package kernel.ui;
using tink.CoreApi;
import util.Color;
import util.Signal;
import kernel.ui.WindowManager.ButtonType;
import util.Vec.Vec2;
import lib.TermWriteable;
@@ -9,31 +10,46 @@ import lib.TermWriteable;
class WindowContext implements TermWriteable {
private final writer:VirtualTermWriter;
private final _clickSignal:Signal<{button: ButtonType, pos: Vec2<Int>}> = new Signal();
private final _keySignal:Signal<{keyCode: Int, isHeld: Bool}> = new Signal();
private final _keyUpSignal:Signal<Int> = new Signal();
private final _mouseDragSignal:Signal<{button: ButtonType, pos: Vec2<Int>}> = new Signal();
private final _mouseScrollSignal:Signal<{dir: Int,pos: Vec2<Int>}> = new Signal();
private final _mouseUpSignal:Signal<{button: ButtonType,pos: Vec2<Int>}> = new Signal();
private final _pasteSignal:Signal<String> = new Signal();
public var clickSignal(default,null):Signal<{button: ButtonType, pos: Vec2<Int>}>;
public var keySignal(default,null):Signal<{keyCode: Int, isHeld: Bool}>;
public var keyUpSignal(default,null):Signal<Int>;
public var mouseDragSignal(default,null):Signal<{button: ButtonType, pos: Vec2<Int>}>;
public var mouseScrollSignal(default,null):Signal<{dir: Int,pos: Vec2<Int>}>;
public var mouseUpSignal(default,null):Signal<{button: ButtonType,pos: Vec2<Int>}>;
public var pasteSignal(default,null):Signal<String> ;
@:allow(kernel.ui.WindowManager) private final clickTrigger:SignalTrigger<{button: ButtonType, pos: Vec2<Int>}>;
@:allow(kernel.ui.WindowManager) private final keyTrigger:SignalTrigger<{keyCode: Int, isHeld: Bool}>;
@:allow(kernel.ui.WindowManager) private final keyUpTrigger:SignalTrigger<Int>;
@:allow(kernel.ui.WindowManager) private final mouseDragTrigger:SignalTrigger<{button: ButtonType, pos: Vec2<Int>}>;
@:allow(kernel.ui.WindowManager) private final mouseScrollTrigger:SignalTrigger<{dir: Int,pos: Vec2<Int>}>;
@:allow(kernel.ui.WindowManager) private final mouseUpTrigger:SignalTrigger<{button: ButtonType,pos: Vec2<Int>}>;
@:allow(kernel.ui.WindowManager) private final pasteTrigger:SignalTrigger<String>;
public var clickSignal(get,null):SignalReadonly<{button: ButtonType, pos: Vec2<Int>}>;
public var keySignal(get,null):SignalReadonly<{keyCode: Int, isHeld: Bool}>;
public var keyUpSignal(get,null):SignalReadonly<Int>;
public var mouseDragSignal(get,null):SignalReadonly<{button: ButtonType, pos: Vec2<Int>}>;
public var mouseScrollSignal(get,null):SignalReadonly<{dir: Int,pos: Vec2<Int>}>;
public var mouseUpSignal(get,null):SignalReadonly<{button: ButtonType,pos: Vec2<Int>}>;
public var pasteSignal(get,null):SignalReadonly<String> ;
public function new(writer: VirtualTermWriter) {
this.writer = writer;
this.onResize = writer.onResize;
this.clickTrigger = Signal.trigger();
this.keyTrigger = Signal.trigger();
this.keyUpTrigger = Signal.trigger();
this.mouseDragTrigger = Signal.trigger();
this.mouseScrollTrigger = Signal.trigger();
this.mouseUpTrigger = Signal.trigger();
this.pasteTrigger = Signal.trigger();
this.clickSignal = clickTrigger.asSignal();
this.keySignal = keyTrigger.asSignal();
this.keyUpSignal = keyUpTrigger.asSignal();
this.mouseDragSignal = mouseDragTrigger.asSignal();
this.mouseScrollSignal = mouseScrollTrigger.asSignal();
this.mouseUpSignal = mouseUpTrigger.asSignal();
this.pasteSignal = pasteTrigger.asSignal();
}
public var onResize(get, null):SignalReadonly<Vec2<Int>>;
function get_onResize():SignalReadonly<Vec2<Int>> {
return writer.onResize;
}
public var onResize(default, null):Signal<Vec2<Int>>;
@:allow(kernel.ui)
private function setTarget(target: TermWriteable) {
@@ -55,69 +71,6 @@ class WindowContext implements TermWriteable {
return writer.isEnabled();
}
public function get_clickSignal(){
return _clickSignal;
}
public function get_keySignal(){
return _keySignal;
}
public function get_keyUpSignal(){
return _keyUpSignal;
}
public function get_mouseDragSignal(){
return _mouseDragSignal;
}
public function get_mouseScrollSignal(){
return _mouseScrollSignal;
}
public function get_mouseUpSignal(){
return _mouseUpSignal;
}
public function get_pasteSignal(){
return _pasteSignal;
}
@:allow(kernel.ui.WindowManager) // Package private
private function click(button:ButtonType ,pos: Vec2<Int>) {
_clickSignal.emit({button: button,pos: pos});
}
@:allow(kernel.ui.WindowManager) // Package private
private function key(keyCode: Int, isHeld: Bool) {
_keySignal.emit({keyCode: keyCode,isHeld: isHeld});
}
@:allow(kernel.ui.WindowManager) // Package private
private function keyUp(keyCode: Int) {
_keyUpSignal.emit(keyCode);
}
@:allow(kernel.ui.WindowManager) // Package private
private function mouseDrag(button: ButtonType, pos: Vec2<Int>) {
_mouseDragSignal.emit({button: button,pos: pos});
}
@:allow(kernel.ui.WindowManager) // Package private
private function mouseScroll(dir: Int,pos: Vec2<Int>) {
_mouseScrollSignal.emit({dir: dir,pos: pos});
}
@:allow(kernel.ui.WindowManager) // Package private
private function mouseUp(button: ButtonType,pos: Vec2<Int>) {
_mouseUpSignal.emit({button: button,pos: pos});
}
@:allow(kernel.ui.WindowManager) // Package private
private function paste(text: String) {
_pasteSignal.emit(text);
}
public function write(text:String) {
writer.write(text);
}

View File

@@ -1,7 +1,6 @@
package kernel.ui;
import lib.TermWriteable;
import kernel.peripherals.Screen;
import kernel.peripherals.Peripherals.Peripheral;
import haxe.Exception;
import util.Vec.Vec2;
@@ -13,26 +12,22 @@ enum ButtonType {
}
class WindowManager {
public static final instance:WindowManager = new WindowManager();
private function new() {}
public static var instance:WindowManager;
private var currentMainContext:WindowContext;
private final allContexts:Array<WindowContext> = new Array();
private final outputMap:Map<String,WindowContext> = new Map();
public function init() {
@:allow(kernel.Init)
private function new() {
KernelEvents.instance.on("key",params -> {
var keyCode: Int = params[1];
var isHeld: Bool = params[2];
if (currentMainContext != null){
currentMainContext.key(keyCode,isHeld);
currentMainContext.keyTrigger.trigger({keyCode: keyCode,isHeld: isHeld});
}
});
KernelEvents.instance.on("key_up",params -> {
var keyCode: Int = params[1];
if (currentMainContext != null){
currentMainContext.keyUp(keyCode);
currentMainContext.keyUpTrigger.trigger(keyCode);
}
});
@@ -44,7 +39,7 @@ class WindowManager {
};
if (currentMainContext != null){
currentMainContext.click(button,clickPos);
currentMainContext.clickTrigger.trigger({button: button,pos: clickPos});
}
});
@@ -55,7 +50,7 @@ class WindowManager {
y: (params[3]:Int) - 1,
}
if (currentMainContext != null){
currentMainContext.mouseDrag(button,pos);
currentMainContext.mouseDragTrigger.trigger({button: button,pos: pos});
}
});
@@ -67,7 +62,7 @@ class WindowManager {
}
if (currentMainContext != null){
currentMainContext.mouseScroll(dir,pos);
currentMainContext.mouseScrollTrigger.trigger({dir: dir,pos: pos});
}
});
@@ -79,7 +74,7 @@ class WindowManager {
}
if (currentMainContext != null){
currentMainContext.mouseUp(button,pos);
currentMainContext.mouseUpTrigger.trigger({button: button,pos: pos});
}
});
@@ -87,7 +82,7 @@ class WindowManager {
var text: String = params[1];
if (currentMainContext != null){
currentMainContext.paste(text);
currentMainContext.pasteTrigger.trigger(text);
}
});
@@ -96,12 +91,16 @@ class WindowManager {
});
}
private var currentMainContext:WindowContext;
private final allContexts:Array<WindowContext> = new Array();
private final outputMap:Map<String,WindowContext> = new Map();
public function createNewContext(): WindowContext {
var newContext = new WindowContext(new VirtualTermWriter());
allContexts.push(newContext);
newContext.setTarget(MainTerm.instance);
// newContext.setTarget(MainTerm.instance);
newContext.enable();
currentMainContext = newContext;