Icons.mesa; Written by S. McGregor
Edited by McGregor on August 4, 1983 1:11 pm
Last Edited by: Maxwell, December 17, 1982 9:57 am
DIRECTORY
Imager 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, -- bit pattern; (required to be first field!)
label: BOOL ← FALSE, -- if true, label icon with viewer name
invertLabel: BOOL ← FALSE, -- if true, label drawn with white bits
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: Imager.Context, x, y:
INTEGER ← 0,
label: Rope.ROPE ← NIL] ;
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 UNSPECIFIED ← ALL[0],
label: BOOL ← FALSE,
invertLabel: BOOL ← FALSE,
filler: [0..16384) ← 0, -- leftovers
lx, ly, lw, lh: INTEGER ← 0,
empty: ARRAY [0..251) OF UNSPECIFIED ← ALL[0] -- leftovers
];
END.