(FILECREATED " 8-May-86 11:12:55" {PHYLUM}<PAPERWORKS>STU.;1 7225
changes to: (VARS STUCOMS)
(FNS TRACK.BITMAP))
(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT STUCOMS)
(RPAQQ STUCOMS ((FNS TRACK.BITMAP SK.TRACK.BITMAP1)))
(DEFINEQ
(TRACK.BITMAP
[LAMBDA (W BITMAP BUFFER.BITMAP WIDTH HEIGHT OPERATION XOFFSET YOFFSET)
(* rrb " 8-May-86 11:12")
(* tracks BITMAP until a button goes down and comes up. Returns a list of (ongrid? position) so that caller can
know whether the point chosen was on a grid or not.)
(* there is other code in BIGFONT that is probably
better for this.)
(PROG [DOWN LEFT BOTTOM NEW.LEFT NEW.BOTTOM GRID.LEFT GRID.BOTTOM ONGRID? NEARPOS
(DSP (WINDOWPROP W (QUOTE DSP]
(OR XOFFSET (SETQ XOFFSET 0))
(OR YOFFSET (SETQ YOFFSET 0))
(TOTOPW W)
(RETURN (until (AND DOWN (LASTMOUSESTATE UP))
do (GETMOUSESTATE)
(COND
((LASTMOUSESTATE (NOT UP))
(SETQ DOWN T)))
(SETQ NEW.LEFT (LASTMOUSEX DSP))
(SETQ NEW.BOTTOM (LASTMOUSEY DSP))
[COND
((OR (NEQ NEW.LEFT LEFT)
(NEQ NEW.BOTTOM BOTTOM))
(* cursor changed position check if grid pt moved.)
(SETQ LEFT NEW.LEFT)
(SETQ BOTTOM NEW.BOTTOM)
(COND
((OR (NEQ NEW.LEFT GRID.LEFT)
(NEQ NEW.BOTTOM GRID.BOTTOM))
(* grid location changed, move the text image.)
[COND
(GRID.LEFT (BITBLT BUFFER.BITMAP 0 0 W (IPLUS GRID.LEFT
XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
WIDTH HEIGHT (QUOTE INPUT)
(QUOTE REPLACE]
(SETQ GRID.LEFT NEW.LEFT)
(SETQ GRID.BOTTOM NEW.BOTTOM)
(BITBLT W (IPLUS GRID.LEFT XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
BUFFER.BITMAP 0 0 NIL NIL (QUOTE INPUT)
(QUOTE REPLACE))
(BITBLT BITMAP 0 0 DSP (IPLUS GRID.LEFT XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
WIDTH HEIGHT (QUOTE INPUT)
OPERATION]
finally (* restore screen)
(BITBLT BUFFER.BITMAP 0 0 W (IPLUS GRID.LEFT XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
WIDTH HEIGHT (QUOTE INPUT)
(QUOTE REPLACE))
(* return the position if any part of the bitmap is
visible.)
(RETURN (create POSITION
XCOORD ← GRID.LEFT
YCOORD ← GRID.BOTTOM])
(SK.TRACK.BITMAP1
[LAMBDA (W BITMAP BUFFER.BITMAP WIDTH HEIGHT OPERATION XOFFSET YOFFSET)
(* rrb "27-Sep-85 19:12")
(* tracks BITMAP until a button goes down and comes up. Returns a list of (ongrid? position) so that caller can
know whether the point chosen was on a grid or not.)
(* there is other code in BIGFONT that is probably
better for this.)
(PROG (DOWN LEFT BOTTOM NEW.LEFT NEW.BOTTOM GRID.LEFT GRID.BOTTOM ONGRID? NEARPOS
(DSP (WINDOWPROP W (QUOTE DSP)))
(USEGRID (WINDOWPROP W (QUOTE USEGRID)))
(GRID (SK.GRIDFACTOR W))
(SCALE (WINDOW.SCALE W))
(HOTSPOTCACHE (SK.HOTSPOT.CACHE W)))
(OR XOFFSET (SETQ XOFFSET 0))
(OR YOFFSET (SETQ YOFFSET 0))
(TOTOPW W)
(RETURN (until (AND DOWN (LASTMOUSESTATE UP))
do (GETMOUSESTATE)
(COND
((LASTMOUSESTATE (NOT UP))
(SETQ DOWN T)))
(SETQ NEW.LEFT (LASTMOUSEX DSP))
(SETQ NEW.BOTTOM (LASTMOUSEY DSP))
[COND
((OR (NEQ NEW.LEFT LEFT)
(NEQ NEW.BOTTOM BOTTOM))
(* cursor changed position check if grid pt moved.)
(SKETCHW.UPDATE.LOCATORS W)
(SETQ LEFT NEW.LEFT)
(SETQ BOTTOM NEW.BOTTOM)
[COND
((AND HOTSPOTCACHE (LASTMOUSESTATE MIDDLE)
(SETQ NEARPOS (NEAREST.HOT.SPOT HOTSPOTCACHE NEW.LEFT
NEW.BOTTOM)))
(* on middle, pick the closest point)
(SETQ ONGRID? NIL)
(SETQ NEW.LEFT (fetch (POSITION XCOORD) of NEARPOS))
(SETQ NEW.BOTTOM (fetch (POSITION YCOORD) of NEARPOS)))
((SETQ ONGRID? (COND
((LASTMOUSESTATE RIGHT)
(* if right is down, flip sense of using grid)
(NOT USEGRID))
(T (* otherwise use the grid if told to.)
USEGRID)))
(SETQ NEW.LEFT (MAP.WINDOW.ONTO.GRID NEW.LEFT SCALE GRID))
(SETQ NEW.BOTTOM (MAP.WINDOW.ONTO.GRID NEW.BOTTOM SCALE
GRID]
(COND
((OR (NEQ NEW.LEFT GRID.LEFT)
(NEQ NEW.BOTTOM GRID.BOTTOM))
(* grid location changed, move the text image.)
[COND
(GRID.LEFT (BITBLT BUFFER.BITMAP 0 0 W (IPLUS GRID.LEFT
XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
WIDTH HEIGHT (QUOTE INPUT)
(QUOTE REPLACE]
(SETQ GRID.LEFT NEW.LEFT)
(SETQ GRID.BOTTOM NEW.BOTTOM)
(BITBLT W (IPLUS GRID.LEFT XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
BUFFER.BITMAP 0 0 NIL NIL (QUOTE INPUT)
(QUOTE REPLACE))
(BITBLT BITMAP 0 0 DSP (IPLUS GRID.LEFT XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
WIDTH HEIGHT (QUOTE INPUT)
OPERATION]
finally (* restore screen)
(BITBLT BUFFER.BITMAP 0 0 W (IPLUS GRID.LEFT XOFFSET)
(IPLUS GRID.BOTTOM YOFFSET)
WIDTH HEIGHT (QUOTE INPUT)
(QUOTE REPLACE))
(* return the position if any part of the bitmap is
visible.)
(RETURN (AND (INTERSECTREGIONS (DSPCLIPPINGREGION NIL DSP)
(CREATEREGION (IPLUS
LEFT
XOFFSET)
(IPLUS
BOTTOM
YOFFSET)
WIDTH HEIGHT))
(create INPUTPT
INPUT.ONGRID? ← ONGRID?
INPUT.POSITION ←(create POSITION
XCOORD ←
GRID.LEFT
YCOORD ←
GRID.BOTTOM])
)
(PUTPROPS STU COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (288 7151 (TRACK.BITMAP 298 . 2974) (SK.TRACK.BITMAP1 2976 . 7149)))))
STOP