DIRECTORY CDColors, CDPrivate, CD, Imager; CDColorsImpl: CEDAR PROGRAM IMPORTS Imager EXPORTS CDColors = BEGIN DisplayType: TYPE = CDColors.DisplayType; DisplayMode: TYPE = CDColors.DisplayMode; Brick: TYPE = CDColors.Brick; -- ARRAY [0..4) OF CARDINAL; ColorTable: TYPE = CDColors.ColorTable; ColorTableSet: TYPE = CDColors.ColorTableSet; ColorDefinition: TYPE = CDColors.ColorDefinition; globalColors: PUBLIC REF ColorDefinition _ NEW[ColorDefinition_ALL[NIL]]; emptyBrick: REF Brick = NEW[Brick_ALL[0]]; fullBrick: REF Brick = NEW[Brick_ALL[LAST[CARDINAL]]]; DefineColor: PUBLIC PROC[ lev: CD.Layer, brick: REF Brick _ NIL, -- do no more change the values display: DisplayType _ bw, mode: DisplayMode _ normal, table: REF ColorDefinition _ NIL --NIL uses the global table ] = BEGIN dTable: REF ColorTableSet; IF table=NIL THEN table _ globalColors; IF brick=NIL THEN brick _ fullBrick ELSE IF brick^=fullBrick^ THEN brick _ fullBrick -- reuse fullbrick; reduce swapping ELSE IF brick^=emptyBrick^ THEN brick _ emptyBrick; IF table[display]=NIL THEN { IF table=globalColors THEN { IF display=bit1 THEN display _ bw --color 1 bit/pixel gets same stipples as bw ELSE IF display=bit9 THEN display _ bit8; --9 bit/pixel uses same stipples as 8 bit/pixel }; IF table[display]=NIL THEN { table[display] _ NEW[ColorTableSet _ ALL[NIL]]; table[display][normal] _ NEW[ColorTable _ ALL[fullBrick]]; table[display][pushedOut] _ NEW[ColorTable _ ALL[fullBrick]]; }; }; dTable _ table[display]; dTable[mode][lev] _ brick; IF mode=normal THEN dTable[pushedOut][lev] _ brick; END; bwFilter: PUBLIC REF CD.ContextFilter _ NEW[CD.ContextFilter_ALL[Imager.black]]; colorFilter: PUBLIC REF CD.ContextFilter _ NEW[CD.ContextFilter_ALL[Imager.black]]; DefineFilter: PUBLIC PROC[ lev: CD.Layer, color: Imager.Color _ NIL, colorDisplay: BOOL _ TRUE, bwDisplay: BOOL _ FALSE ] = BEGIN IF colorDisplay THEN colorFilter[lev] _ color; IF bwDisplay THEN bwFilter[lev] _ color; END; DefineColor[lev: 0, display: bw]; DefineColor[lev: 0, display: bit4]; DefineColor[lev: 0, display: bit8]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[257,0,0,0]], display: bw]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[257,0,0,0]], display: bw, mode: pushedOut]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,10,0,11*256]], display: bit4]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,10,0,11*256]], display: bit4, mode: pushedOut]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,1,256,0]], display: bit8]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,1,256,0]], display: bit8, mode: pushedOut]; colorFilter[CD.backGround] _ bwFilter[CD.backGround] _ NIL; END. CDColorsImpl.mesa (Viewer definitions for ChipNDale) Copyright c 1984 by Xerox Corporation. All rights reserved. by Christian Jacobi, September 19, 1984 6:00:17 pm PDT last edited by Christian Jacobi, March 12, 1986 6:10:02 pm PST -- ChipNDale interface defining low layer color handling. -- (semi-public) -- {bw, bit1, bit2, bit4, bit8, bit9}; -- {normal, pushedOut}; -- ARRAY CD.Layer OF REF Brick; -- ARRAY DisplayMode OF REF ColorTable; -- ARRAY DisplayType OF REF ColorTableSet; --Defining a brick with mode normal also clears the pushedOut brick. --A NIL brick makes a reasonable default. --The procedure may exchange bricks if they have the same values. --Defining color filters for either display. --A NIL color makes a layer invisible. Κ'˜šœ;™;Jšœ Οmœ1™