Copyright 1992 Digital Equipment Corporation.
Distributed only by permission.
Last modified on Tue Jan 5 15:54:22 PST 1993 by steveg
modified on Sun Jul 19 19:27:17 1992 by mhb
MODULE ChipsVBT;
IMPORT Color, PaintOp, RectsVBT, VBTClass;
TYPE RefOps = REF ARRAY OF PaintOp.T;
REVEAL
T = Public BRANDED OBJECT
(* fields are protected by v: *)
C, R, K: INTEGER;
ops : RefOps;
OVERRIDES
init := Init;
END;
PROCEDURE Init (v: T): T =
BEGIN
RETURN RectsVBT.T.init(v)
END Init;
PROCEDURE Reset (v: T; C, R, K: INTEGER) =
BEGIN
LOCK v DO
v.C := MAX(C, 1);
v.R := MAX(R, 1);
v.K := MAX(K, 1);
v.ops := NEW(RefOps, K);
FOR i := 0 TO K - 1 DO
WITH rgb = Color.FromHSV(
Color.HSV{FLOAT(i) * 1.0 / FLOAT(K), 1.0, 1.0}) DO
v.ops[i] :=
PaintOp.FromRGB(rgb.r, rgb.g, rgb.b, PaintOp.Mode.Accurate)
END
END
END;
RectsVBT.SetN(v, C * R);
RectsVBT.SetWC(v, 0.0, 0.0, FLOAT(C), FLOAT(R))
END Reset;
PROCEDURE Set (v: T; c, r, k: INTEGER) =
VAR
ix: INTEGER;
op: PaintOp.T;
BEGIN
LOCK v DO
IF r < 1 OR c < 1 OR k < 1 OR r > v.R OR c > v.C OR k > v.K THEN
RETURN
END;
ix := (r - 1) * v.C + c;
op := v.ops[k - 1];
END;
RectsVBT.Position(
v, ix, FLOAT(c - 1), FLOAT(r - 1), FLOAT(c), FLOAT(r));
RectsVBT.Color(v, ix, op);
RectsVBT.Draw(v, ix)
END Set;
BEGIN
END ChipsVBT.