<> <> <> <> <<>> DIRECTORY Imager, IO, Pipal, PipalInt, PipalMask, PipalPaint, PipalReal; PipalMaskImpl: CEDAR PROGRAM IMPORTS Imager, IO, Pipal, PipalInt, PipalPaint, PipalReal EXPORTS PipalMask = BEGIN OPEN PipalMask; <> brickClass: PUBLIC Pipal.Class _ Pipal.RegisterClass[name: "Brick", type: CODE [BrickRec]]; SizeBrick: PipalInt.SizeProc ~ {size _ NARROW [object, Brick].size}; PaintBrick: PipalPaint.PaintProc ~ { brick: Brick _ NARROW [object]; PipalPaint.SetColor[context, brick.layer]; Imager.MaskRectangle[context, [0.0, 0.0, brick.size.x, brick.size.y]]; }; DescribeBrick: Pipal.DescribeProc = { brick: Brick _ NARROW [object]; Pipal.PutIndent[out, indent, cr]; IO.PutF[out, "Brick %g", IO.rope[PipalInt.VectorToRope[brick.size]]]; }; CreateBrick: PUBLIC PROC [size: PipalInt.Size, layer: Layer] RETURNS [brick: Brick] ~ { brick _ NEW [BrickRec _ [size: size, layer: layer]]; }; <> Pipal.PutClassMethod[brickClass, PipalInt.sizeMethod, NEW [PipalInt.SizeProc _ SizeBrick]]; Pipal.PutClassMethod[brickClass, PipalReal.sizeMethod, NEW [PipalReal.SizeProc _ PipalReal.UseIntSize]]; Pipal.PutClassMethod[brickClass, PipalInt.abutBoxMethod, NEW [PipalInt.AbutBoxProc _ PipalInt.AbutBoxFromSize]]; Pipal.PutClassMethod[brickClass, PipalPaint.paintMethod, NEW [PipalPaint.PaintProc _ PaintBrick]]; Pipal.PutClassMethod[brickClass, Pipal.describeMethod, NEW [Pipal.DescribeProc _ DescribeBrick]]; END.