The plow operation starts with an initialization of the plow set of the window being resized, call it W. The plow set basically contains all windows in front of W that are likely to be plowed due to the direction of the operation. The plow set is determined by the PlowInit function. Next, the coordinates of each element in the plow set is then updated proportionally by the PlowRect function. The PlowRect function, basically traverses the plow set, updates coordinates proportionally for each window, and propagates the effects to lower level windows.
The purpose of the PlowInit function is to determine the plow set for a window (W) in a given plow direction. In order to determine the plow set, first all sibling windows of W are sorted in X and Y coordinates according to the direction of the operation. Then, the direct-plow set for each window is determined, initially only consisting of windows directly on the plow area. This is done on each dimension separately, by traversing the sorted window list in the direction of plow starting from the window itself. For each window in the sorted list the opposite edge of the windows are checked for an overlap, making an appropriate skew translation in the direction of plow (Figure ). All windows intersecting the plow area are inserted into the direct-plow set. The plow set of W initially consists of only windows in its direct-plow set. Then, as a final step for each window E in the direct-plow set of W, windows in their direct-plow set are also inserted recursively, by checking uniqueness. The pseudo-code algorithms of the PlowRect and the PlowInit functions are listed in Appendix .