DIRECTORY CD, CDBasics, CDOrient, CDX; CDXImpl: CEDAR PROGRAM IMPORTS CD, CDBasics, CDOrient, CDX EXPORTS CDX = BEGIN ClientPosition: TYPE = CD.Position; ClientRect: TYPE = CD.Rect; MapClientPos: PUBLIC PROC [cPos: ClientPosition_[0, 0], inst: CD.Instance] RETURNS [globPos: CD.Position] = BEGIN cPos _ CDX.ClientToCDPos[inst.ob, cPos]; RETURN [CDOrient.MapPoint[ pointInCell: cPos, cellSize: inst.ob.size, cellInstOrient: inst.orientation, cellInstPos: inst.location ]] END; DeMapClientPos: PUBLIC PROC [globPos: CD.Position, inst: CD.Instance] RETURNS [cPos: ClientPosition] = BEGIN pointInCell: CD.Position = CDOrient.DeMapPoint[ pointInWorld: globPos, cellSize: inst.ob.size, cellInstOrient: inst.orientation, cellInstPos: inst.location ]; RETURN [CDX.CDToClientPos[inst.ob, pointInCell]] END; MapClientRect: PUBLIC PROC [cRect: ClientRect, inst: CD.Instance] RETURNS [globRect: CD.Rect] = BEGIN RETURN [CDOrient.MapRect[ itemInCell: CDX.ClientToCDRect[inst.ob, cRect], cellSize: inst.ob.size, cellInstOrient: inst.orientation, cellInstPos: inst.location ]] END; DeMapClientRect: PUBLIC PROC [globRect: CD.Rect, inst: CD.Instance] RETURNS [cRect: ClientRect] = BEGIN RETURN [CDX.CDToClientRect[inst.ob, CDOrient.DeMapRect[ itemInWorld: globRect, cellSize: inst.ob.size, cellInstOrient: inst.orientation, cellInstPos: inst.location ] ]] END; PositionFromPairO: PUBLIC PROC [ob: CD.Object, cPos: ClientPosition_[0,0], correspondingGlobPos: CD.Position_[0,0], orientation: CD.Orientation_0 ] RETURNS [appPos: CD.Position] = BEGIN obCDPos: CD.Position = CDX.ClientToCDPos[ob, cPos]; fakeAppPos: CD.Position = CDOrient.MapPoint[ pointInCell: obCDPos, cellSize: ob.size, cellInstOrient: orientation, cellInstPos: [0, 0] ]; RETURN [CDBasics.SubPoints[correspondingGlobPos, fakeAppPos]] END; PositionFromPairI: PUBLIC PROC [ob: CD.Object, cPos: ClientPosition_[0,0], correspondingGlobPos: CD.Position_[0,0], orientation: CD.Orientation_0 ] RETURNS [iPos: CD.Position] = BEGIN appOPos: CD.Position = PositionFromPairO[ob, cPos, correspondingGlobPos, orientation]; RETURN [CDBasics.BaseOfRect[CDOrient.MapRect[ itemInCell: CD.InterestRect[ob], cellSize: ob.size, cellInstOrient: orientation, cellInstPos: appOPos ]]] END; END. ÒCDXImpl.mesa (part of ChipNDale) Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. by Ch. Jacobi, September 10, 1984 9:20:09 am PDT last edited by Ch. Jacobi, May 22, 1985 3:02:09 pm PDT --Public interface between ChipNDale and outside clients. --Maps chipndales complex and mutable (but fast clippable) positioning --mechanism to an immutable client cordinate system. --The Origin is a hypothtical point of an object; the client's cordinate --system origin. --types --Transfer between ChipNDale and client coordinates, both relative to the object -- have all been inlines --Transfer between client object relative coordinates and ChipNDale global coordinates --Computes a position useable for an application, such that the --client-origin relative point oPos is at the global position correspondingGlobPos --Computes the position of the innerrect, such that the client-origin --relative point oPos is at the global position correspondingGlobPos ÊϘšœ!™!Jšœ Ïmœ7™BJšœ0™0Jšœ6™6—J˜šÏk ˜ Jšžœ˜Jšœ ˜ Jšœ ˜ Jšœ˜J˜—šÏbœžœžœ˜Jšžœžœž˜#Jšžœžœ˜—Jšžœ˜J˜Jšœ9™9J™JšœH™HJšœ4™4J™IJ™J˜Jšœ™Jšœžœžœ ˜#Jšœ žœžœ˜J™J˜JšœP™PJ™J˜JšœV™VJ˜š Ïn œž œ%žœ žœ žœ ˜kJšž˜Jšœžœ˜(šžœ˜Jšœ˜Jšœ˜Jšœ!˜!Jšœ˜J˜—Jšžœ˜—J˜š  œž œ žœžœ žœ˜fJšž˜šœ žœ ˜/Jšœ˜Jšœ˜Jšœ!˜!Jšœ˜J˜—Jšžœžœ%˜0Jšžœ˜—J˜š   œž œžœ žœ žœ˜_Jšž˜šžœ˜Jšœ žœ ˜/Jšœ˜Jšœ!˜!Jšœ˜J˜—Jšžœ˜—J˜š  œž œ žœ žœ žœ˜aJšž˜šžœžœ˜#šœ˜Jšœ˜Jšœ˜Jšœ!˜!Jšœ˜J˜—J˜—Jšžœ˜J˜—š œž œžœ ˜/Jšœ˜Jšœžœ˜)Jšœ žœ˜šœžœ žœ ˜!Jšœ@™@JšœR™R—Jšž˜Jšœ žœ žœ˜3šœ žœ˜,Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜—Jšžœ7˜=Jšžœ˜—J˜š œž œžœ ˜/Jšœ˜Jšœžœ˜)Jšœ žœ˜šœžœžœ ˜JšœF™FJšœD™D—Jšž˜Jšœ žœK˜Všžœ'˜-Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜J˜—Jšžœ˜—J˜Jšžœ˜J˜—…—Ìm