-- Copyright (C) 1982, 1984 by Xerox Corporation. All rights reserved. -- WindowImplD.mesa - last edited by -- Daniels, 18-Jul-84 16:41:19 -- Bruce, 15-Oct-82 20:50:46 DIRECTORY BitBlt USING [BBptr], Display USING [Brick, Gray], RecOps USING [Convert, RecList], SpecialDisplay USING [ Handle, LineStyle, LineStyleObject, Special, SpecialContext], SpecialWindow USING [], UserTerminal USING [BitmapIsDisconnected, GetBitBltTable], Window USING [Box, ValidateTree], WindowOps USING [ bbPtr, Handle, InvalidateTree, lock, Object, WhitenRecList]; WindowImplD: MONITOR LOCKS WindowOps.lock IMPORTS Display, RecOps, UserTerminal, Window, WindowOps EXPORTS SpecialDisplay, SpecialWindow, Window, WindowOps = BEGIN Handle: TYPE = LONG POINTER TO Object; Object: PUBLIC TYPE = WindowOps.Object; lock: PUBLIC MONITORLOCK; rootWindow: PUBLIC Handle ← NIL; defaultContext: PUBLIC SpecialDisplay.Special ← @mySpecial; mySpecial: SpecialDisplay.SpecialContext ← [ bmAddress: NIL, wpl: TRASH, bpl: TRASH, alloc: NIL, free: NIL]; solid: PUBLIC SpecialDisplay.LineStyle ← @mySolid; mySolid: SpecialDisplay.LineStyleObject ← [ widths: [NAT.LAST, 0, 0, 0, 0, 0], thickness: 1]; bitmapAddress: PUBLIC LONG ORDERED POINTER ← NIL; bitmapHeight: PUBLIC CARDINAL; rootGray: ARRAY [0..4) OF CARDINAL; Recalculate: PUBLIC PROC [Handle] = {}; -- boo hiss!! DefineRoot: PUBLIC PROC [ window: Handle, gray: ARRAY [0..4) OF CARDINAL, bitmapExists: BOOLEAN] = { haveBitmap: BOOLEAN ← bitmapExists; LockedDefine: ENTRY PROC = { ENABLE UNWIND => NULL; IF bitmapExists THEN { bbt: BitBlt.BBptr ← WindowOps.bbPtr; bbt↑ ← UserTerminal.GetBitBltTable[ ! UserTerminal.BitmapIsDisconnected => { bitmapExists ← FALSE; CONTINUE}]}; IF bitmapExists THEN { recList: RecOps.RecList; mySpecial.bmAddress ← bitmapAddress ← LOOPHOLE[WindowOps.bbPtr.dst.word]; mySpecial.bpl ← CARDINAL[WindowOps.bbPtr.dstBpl]; mySpecial.wpl ← mySpecial.bpl/16; bitmapHeight ← WindowOps.bbPtr.height; rootWindow ← window; rootWindow.beingDisplayed ← FALSE; rootWindow.clearingRequired ← FALSE; rootWindow.inTree ← TRUE; rootWindow.parent ← NIL; rootWindow.place ← [0, 0]; rootWindow.display ← DisplayRootWindow; rootWindow.invalid ← NIL; rootWindow.badPhosphor ← NIL; rootGray ← gray; WindowOps.WhitenRecList[recList ← RecOps.Convert[rootWindow]]; WindowOps.InvalidateTree[rootWindow, rootWindow.child, recList]} ELSE { rootWindow ← window; rootWindow.parent ← NIL; rootWindow.display ← NIL; rootWindow.inTree ← FALSE}}; LockedDefine[]; IF bitmapExists THEN Window.ValidateTree[rootWindow]}; DisplayRootWindow: PROC [window: Handle] = { gray: Display.Brick = DESCRIPTOR[rootGray]; Display.Gray[window, window.box, gray]}; END.