-- Copyright (C) 1982, 1984 by Xerox Corporation. All rights reserved. -- RecOps.mesa - last edited by -- Bruce 15-Dec-82 11:49:42 -- Daniels, 16-Mar-84 14:11:55 DIRECTORY Window USING [Box, Handle], WindowOps USING [RecList, ScreenBox]; RecOps: DEFINITIONS = BEGIN What: TYPE = {null, src, dst}; RecList: TYPE = WindowOps.RecList; << ClipBox adjusts the box to fit within all its parents. It returns the last parent below the root window. The box passed in is consumed. >> ClipBox: PROC [window: Window.Handle, box: RecList] RETURNS [clippedBox: RecList, lastParent: Window.Handle]; Convert: PROC [Window.Handle] RETURNS [RecList]; ConvertBox: PROC [Window.Handle, Window.Box] RETURNS [RecList]; WindowToScreenBox: PROC [Window.Box] RETURNS [WindowOps.ScreenBox]; ScreenToWindowBox: PROC [WindowOps.ScreenBox] RETURNS [Window.Box]; -- Append links list2 on the end of list1 and returns the result. Append: PROC [list1, list2: RecList] RETURNS [RecList]; << Bite bites every box on biter out of every box on list, preserving the source and destination fields of list. It consumes the both lists. >> Bite: PROC [list, biter: RecList] RETURNS [newList: RecList ¬ NIL]; << Blt blts the reclist by dx and dy using the algorithm from Guibas and Yao. It consumes the list passed in. >> Blt: PROC [list: RecList, dx, dy: INTEGER]; -- Coalesces adjacent boxes on the reclist. It consumes the list passed in. Coalesce: PROC [RecList] RETURNS [RecList]; Copy: PROC [old: RecList] RETURNS [new: RecList ¬ NIL]; << Disjoint decides (quickly) whether or not two RecLists intersect. Does not consume either list. >> Disjoint: PROC [list1, list2: RecList] RETURNS [BOOLEAN]; << Intersect returns all the boxes that result from intersecting every box on list2 with every box on list1. If src or dst of intersecting rectangles don't match, it will raise ClientError[ambigious]. It does NOT consume either list. >> Intersect: PROC [list1, list2: RecList] RETURNS [list3: RecList]; << Shift returns the reclist passed in with every box shifted by dx, dy. It consumes the list passed in. >> Shift: PROC [list: RecList, dx, dy: INTEGER] RETURNS [r: RecList]; << Simple append pastes two reclists together. This should only be used for invalid lists or when the two reclists are known to be disjoint. >> SimpleAppend: PROC [RecList, RecList] RETURNS [RecList]; << Visible bites out the part of the boxes on the list that are covered by another window. If what # null then boxes that logically belong to a window with a bitmap under will have the appropriate field set to the new window. Otherwise, the value of the src or dst field in the original rectangle is preserved. It consumes the list passed in. >> Visible: PROC [ w: Window.Handle, list: RecList, what: What, biteChildren: BOOLEAN ¬ FALSE] RETURNS [newList: RecList]; Alloc: PROC RETURNS [RecList]; Free: PROC [RecList]; FreeRecList: PROC [RecList]; CheckForLeaks: PROC [useTree: BOOLEAN, cache: RecList]; <> CleanInvalid: PROC [Window.Handle] RETURNS [RecList]; END.