[Oberon] FPGA - DIY Dialogs
Tomas Kral
thomas.kral at email.cz
Wed Dec 26 23:20:42 CET 2018
Hi,
Trying to draw a selection rectangle, aka `marching ants'.
I do this, it makes selection east-rightwards only.
I am surprised I need to call `DrawBox' in three places,
otherwise it trails visual marks. I wish to keep the code
minimal. How to make it in all directions?
PROCEDURE DrawBox(x, y, w, h: INTEGER); (*selection rectangle*)
BEGIN
Display.ReplPattern(8, Display1.grey2, x, y, w, 1, Display.invert);
Display.ReplPattern(8, Display1.grey2, x, y+h-1, w, 1, Display.invert);
Display.ReplPattern(8, Display1.grey2, x, y, 1, h, Display.invert);
Display.ReplPattern(8, Display1.grey2, x+w-1, y, 1, h, Display.invert)
END DrawBox;
PROCEDURE TrackSelection(M: Oberon.InputMsg); (*eastwards*)
VAR x, y: INTEGER; keys: SET;
BEGIN x := M.X; y := M.Y;
REPEAT
DrawBox(M.X, M.Y, ABS(M.X-x), ABS(M.Y-y));
Input.Mouse(keys, x, y); Oberon.DrawMouse(Crosshair, x, y);
DrawBox(M.X, M.Y, ABS(M.X-x), ABS(M.Y-y))
UNTIL keys = {};
DrawBox(M.X, M.Y, ABS(M.X-x), ABS(M.Y-y))
END TrackSelection;
--
Tomas Kral <thomas.kral at email.cz>
More information about the Oberon
mailing list