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]]]; NewColorTab: PROC [] RETURNS [ct: REF ColorTable] = { ct _ NEW[ColorTable _ [ bricks: NEW[ARRAY CD.Layer OF REF Brick _ ALL[fullBrick]], filter: NEW[CD.ContextFilter _ ALL[TRUE]], cols: NEW[ARRAY CD.Layer OF Imager.Color _ ALL[Imager.black]] ]]; ct.filter[CD.backgroundLayer] _ FALSE; }; GetCTS: PROC [table: REF ColorDefinition, display: DisplayType] RETURNS [cts: REF ColorTableSet] = { IF table=NIL THEN table _ globalColors; 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] _ NewColorTab[]; table[display][pushedOut] _ NewColorTab[]; }; }; cts _ table[display]; }; DefineColor: PUBLIC PROC[ layer: 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 cts: REF ColorTableSet _ GetCTS[table, display]; IF brick=NIL THEN brick _ fullBrick ELSE IF brick^=fullBrick^ THEN brick _ fullBrick -- reuse fullbrick; reduce swapping ELSE IF brick^=emptyBrick^ THEN brick _ emptyBrick; cts[mode].bricks[layer] _ brick; IF mode=normal THEN cts[pushedOut].bricks[layer] _ brick; END; DefineIColor: PUBLIC PROC[ layer: CD.Layer, col: Imager.Color _ NIL, display: DisplayType _ bw, mode: DisplayMode _ normal, table: REF ColorDefinition _ NIL --NIL uses the global table ] = BEGIN cts: REF ColorTableSet _ GetCTS[table, display]; cts[mode].cols[layer] _ col; cts[mode].filter[layer] _ col#NIL; IF mode=normal THEN { cts[pushedOut].cols[layer] _ col; cts[pushedOut].filter[layer] _ col#NIL; } END; END. BCDColorsImpl.mesa (Viewer definitions for ChipNDale) Copyright c 1984, 1986 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:55:24 pm PST -- ChipNDale interface defining low layer color handling. -- (semi-public) -- {bw, bit1, bit2, bit4, bit8, bit9}; -- {normal, pushedOut}; -- RECORD; -- bricks: ARRAY CD.Layer OF REF Brick; -- cols: ARRAY CD.Layer OF Imager.Color; -- ARRAY DisplayMode OF REF ColorTable; -- ARRAY DisplayType OF REF ColorTableSet; ΚΠ˜šœ;™;Jšœ Οmœ7™BJšœ8™8Jšœ?™?J™—šΟk ˜ Jšœžœ˜ J˜—Jšœ;™;Jšœ™šΠln œžœžœ˜Jšžœ˜Jšžœ ˜—Jšž˜J˜šœ žœ˜)Jšœ'™'—šœ žœ˜)Jšœ™—šœžœ˜JšΟc˜—šœ žœ˜'Jšœžœ™ Jšœ)™)Jšœ*™*—šœžœ˜-Jšœ'™'—šœžœ˜1Jšœ*™*—J˜Jš œžœžœžœžœžœ˜KJšœ žœ žœžœ˜*Jš œ žœ žœžœžœžœ˜6J˜šΟn œžœžœžœ˜5šœžœ˜Jš œžœžœžœžœžœ žœ˜;Jš œžœžœžœžœ˜+Jš œžœžœžœžœžœ˜=Jšœ˜—Jšœ žœžœ˜&Jšœ˜—J˜codeš ‘œžœ žœ(žœžœ˜dKšžœžœžœ˜'šžœžœžœ˜šžœžœ˜Kšžœžœ ,˜PKšžœžœžœ /˜ZK˜—šžœžœžœ˜Kšœžœžœžœ˜/Kšœ'˜'Kšœ*˜*K˜—K˜—Jšœ˜K˜—J˜š‘ œžœžœ žœžœ žœ œ@žœžœ œ˜έKšž˜Kšœžœ(˜0Kšžœžœžœ˜#Kšžœžœžœ #˜TKšžœžœžœ˜3Kšœ ˜ Kšžœ žœ&˜9Kšžœ˜—J˜š‘ œž œ žœžœBžœžœ œ˜ΐKšž˜Kšœžœ(˜0Kšœ˜Kšœ"˜"šžœ žœ˜Kšœ!˜!Kšœ#žœ˜'K˜—Kšžœ˜—K˜J˜Jšžœ˜J˜J˜—…— `r