CDOldInterestRectsImpl.mesa
Copyright © 1984, 1985 by Xerox Corporation. All rights reserved.
Created by: Jacobi, September 13, 1984 3:21:36 pm PDT
Last Edited: Jacobi, March 26, 1986 11:37:15 am PST
DIRECTORY
CD,
CDBasics,
CDCells,
CDImports,
CDOldInterestRects,
CDIO,
CDRepetitions,
CDProperties,
TokenIO;
CDOldInterestRectsImpl: CEDAR PROGRAM
IMPORTS CD, CDBasics, CDCells, CDImports, CDIO, CDProperties, CDRepetitions, TokenIO
EXPORTS CDOldInterestRects =
BEGIN
SetInterestProc: TYPE = PROC [ob: CD.Object, r: CD.Rect];
AdjustInterest: PUBLIC PROC [ob: CD.Object] =
BEGIN
IF ob.class.inDirectory AND CDIO.VersionKey[]<8 THEN {
WITH CDProperties.GetObjectProp[from: ob, prop: interestRectProperty] SELECT FROM
pp: REF CD.Rect => {
IF CDBasics.NonEmpty[pp^] THEN SetInterest[ob, pp^];
CDProperties.PutProp[ob, interestRectProperty, NIL];
};
ENDCASE => NULL;
};
END;
InternalReadProperty: PROC [prop: ATOM] RETURNS [val: REF] =
BEGIN
x1: INT = TokenIO.ReadInt[];
y1: INT = TokenIO.ReadInt[];
x2: INT = TokenIO.ReadInt[];
y2: INT = TokenIO.ReadInt[];
val ← NEW[CD.Rect←[x1, y1, x2, y2]]
END;
InsideRect: PUBLIC PROC [ob: CD.Object] RETURNS [CD.Rect] =
BEGIN
WITH ob.specificRef SELECT FROM
cp: CD.CellPtr => RETURN [cp.dIr];
ENDCASE => RETURN [CD.InterestRect[ob]];
END;
SetInterest: SetInterestProc =
BEGIN
RepOldSetInterest: PROC [ob: CD.Object, r: CD.Rect] =
BEGIN
cptr: CDRepetitions.RepPtr = NARROW[ob.specificRef];
cptr.ir ← r;
END;
ImpOldSetInterest: PROC [ob: CD.Object, r: CD.Rect] =
BEGIN
cptr: CDImports.ImportPtr = NARROW[ob.specificRef];
cptr.ir ← r;
END;
CellOldSetInterest: PROC [ob: CD.Object, r: CD.Rect] =
BEGIN
cptr: CD.CellPtr = NARROW[ob.specificRef];
cptr.ir ← r;
cptr.useDIr ← FALSE;
END;
IF CDCells.IsCell[ob] THEN CellOldSetInterest[ob, r]
ELSE IF CDImports.IsImport[ob] THEN ImpOldSetInterest[ob, r]
ELSE IF CDRepetitions.IsRepetition[ob] THEN RepOldSetInterest[ob, r]
ELSE
WITH CDProperties.GetProp[ob.class.properties, $SetInterestProc] SELECT FROM
sp: REF SetInterestProc => sp^[ob, r];
ENDCASE => NULL;
END;
InstallOldSetInterest: --PUBLIC-- PROC [type: REF CD.ObjectClass, proc: SetInterestProc] =
BEGIN
CDProperties.PutProp[onto: type, prop: $SetInterestProc, val: NEW[SetInterestProc←proc]];
END;
InternalReadOrigin: PROC [prop: ATOM] RETURNS [val: REF] =
BEGIN
x: INT = TokenIO.ReadInt[];
y: INT = TokenIO.ReadInt[];
val ← NIL
END;
originProperty: ATOM = $origin;
interestRectProperty: ATOM = $interestRect;
[] ← CDProperties.RegisterProperty[interestRectProperty];
CDProperties.InstallProcs[prop: interestRectProperty,
new: CDProperties.PropertyProcsRec[
makeCopy: CDProperties.DontCopy,
internalRead: InternalReadProperty,
exclusive: TRUE
]
];
[] ← CDProperties.RegisterProperty[originProperty];
CDProperties.InstallProcs[prop: originProperty,
new: CDProperties.PropertyProcsRec[
makeCopy: CDProperties.DontCopy,
internalRead: InternalReadOrigin,
exclusive: TRUE
]
];
[] ← CDProperties.RegisterProperty[$SetInterestProc];
END.