Icons.mesa; Edited by McGregor on August 16, 1982 11:19 am
Last Edited by: Maxwell, December 17, 1982 9:57 am
DIRECTORY
Graphics USING [Context],
Rope USING [ROPE];
Icons: CEDAR DEFINITIONS = BEGIN
iconW: INTEGER = 64;
iconH: INTEGER = 64;
IconFlavor: TYPE = MACHINE DEPENDENT { -- pre-defined icons
document(0),
dirtyDocument(1),
fileCabinet(2),
tool(3),
typescript(4),
private(177776B), -- will cause call of viewer paintProc to paint icon
unInit(177777B)  -- flag for unitialised icon type
};
IconRef: TYPE = REF IconRep;
IconRep: TYPE = MACHINE DEPENDENT RECORD [
bits: ARRAY [0..iconH*iconW/16) OF UNSPECIFIED, -- 64 x 64 bit pattern
label: BOOLFALSE,         -- label icon with viewer name?
invertLabel: BOOLFALSE,       -- label drawn with white bits if TRUE
filler: [0..16384) ← 0,         -- unused
lx, ly, lw, lh: INTEGER ← 0,       -- rectangle for label (from bottom left)
proc: DrawIconProc ← NIL        -- proc to draw pattern
];
DrawIconProc: TYPE = PROC [flavor: IconFlavor, context: Graphics.Context, x, y: INTEGER ← 0,
label: Rope.ROPENIL] ;
DrawIcon: DrawIconProc ;
Draw an icon in a context
NewIcon: PROC [info: IconRef] RETURNS [newFlavor: IconFlavor] ;
Create a new icon type
NewIconFromFile: PROC [file: Rope.ROPE, n: CARDINAL] RETURNS [newFlavor: IconFlavor];
Create a new icon type from the n'th icon read from the file
Icon File Format (for wizards/hackers). Icons must be packed into the file at two pages per icon, corresponding to a logical record type as follows:
IconFileFormat: TYPE = MACHINE DEPENDENT RECORD [
bits: ARRAY [0..iconH*iconW/16) OF UNSPECIFIEDALL[0],
label: BOOLFALSE,
invertLabel: BOOLFALSE,
filler: [0..16384) ← 0, -- leftovers
lx, ly, lw, lh: INTEGER ← 0,
empty: ARRAY [0..251) OF UNSPECIFIEDALL[0] -- leftovers
];
END.