MODULE Draw EXPORTS Main; IMPORT Trestle, VBT, TextVBT, HVSplit, RigidVBT, BorderedVBT; IMPORT Region, Axis, PaintOp, Path, Point, Rect; FROM Colors IMPORT red, white, blue; TYPE TexasVBT = VBT.Leaf OBJECT path: Path.T := NIL; METHODS init (): TexasVBT := Init OVERRIDES repaint := Repaint; END; PROCEDURE Init (v: TexasVBT): TexasVBT = BEGIN v.path := NEW(Path.T); Path.Reset(v.path); Path.MoveTo(v.path, Point.T{0, 0}); Path.LineTo(v.path, Point.T{-18, -18}); Path.LineTo(v.path, Point.T{-22, -14}); Path.LineTo(v.path, Point.T{-40, -32}); Path.LineTo(v.path, Point.T{-24, -32}); Path.LineTo(v.path, Point.T{-24, -52}); Path.LineTo(v.path, Point.T{2, -52}); Path.LineTo(v.path, Point.T{2, -42}); Path.LineTo(v.path, Point.T{12, -42}); Path.CurveTo(v.path, Point.T{12, -12}, Point.T{0, -30}, Point.T{0, 0}); RETURN (v); END Init; PROCEDURE Repaint (v: TexasVBT; READONLY rgn: Region.T) = PROCEDURE Pair (READONLY row, col: INTEGER) = VAR dom := VBT.Domain(v); mid := Rect.Middle(dom); x := row * 44 + col * 52 + 10; y := -row * 62 - col * 10; or1 := Point.MoveHV(mid, x, y); or2 := Point.MoveHV(mid, x + 52, y - 10); BEGIN VBT.Fill(v, dom, Path.Translate(v.path, or1), op := red); VBT.Stroke( v, dom, Path.Translate(v.path, or2), width := 2, op := blue); END Pair; BEGIN VBT.PaintRegion(v, rgn, white); FOR row := -2 TO 1 DO Pair(row, -2); Pair(row, 0); Pair(row, 2); END; END Repaint; VAR main := BorderedVBT.New( RigidVBT.FromHV(NEW(TexasVBT).init(), 50.0, 50.0)); BEGIN Trestle.Install(main); Trestle.AwaitDelete(main); END Draw.