marantz@porthos.rutgers.edu (Roy Marantz) (05/13/88)
Here is a little class to provide scrollable "client" windows. I
use it for scrolling around large graphics with a (much) smaller
window. As you can see it isn't to hard, but maybe someone else won't
have to "reinvent the wheel". You'll probably want to modify this
since it is setup to demo the package. You also might want to
"install" it into the systemdict like the rest of the window classes.
Roy
===========================cut here=================================
%
% ScrollClientWindow 1.0 12-May-88
%
% Roy Marantz (marantz@aramis.rutgers.edu)
% Rutgers University
%
% Simple scrollable client window. See the testing code (below) for an
% example of it's use
%
currentdict /ScrollClientWindow known not {
systemdict /ScrollWindow known not { (NeWS/litewin.ps) run } if
/ScrollClientWindow ScrollWindow
dictbegin
/PictureWidth 0 def % for translating the client window
/PictureHeight 0 def
/LDivisions 10 def % number of scroll bad pieces/whole
/PDivisions 3 def % number of scroll bad pieces/whole
dictend
classbegin
/Resize { % width height => - size the backround canvas
/PictureHeight exch def
/PictureWidth exch def
[0 PictureWidth ClientWidth sub
dup dup LDivisions div exch PDivisions div null]
/setrange HScrollbar send
[0 PictureHeight ClientHeight sub
dup dup LDivisions div exch PDivisions div null]
/setrange VScrollbar send
} def
/SetNotifiers { % Hnotifier Vnotifier => -
VScrollbar /NotifyUser 3 -1 roll put
HScrollbar /NotifyUser 3 -1 roll put
} def
classend def
true { % true for testing package
/window framebuffer /new ScrollClientWindow send def
/reshapefromuser window send
{ /FrameLabel (Testing) def
/PaintClient {
gsave
ClientCanvas setcanvas
HScrollbar /ItemValue get neg
VScrollbar /ItemValue get neg translate
1 fillcanvas % erase everything
0 setgray % black
0 0 moveto 1000 1000 lineto
0 1000 moveto 1000 0 lineto
stroke
grestore
} def
} window send
/map window send
1000 1000 /Resize window send
{/paintclient window send} {/paintclient window send}
/SetNotifiers window send
} if
} if % currentdict /ScrollClientWindow know not {
--
uucp: {ames, cbosgd, harvard, moss}!aramis.rutgers.edu!marantz
arpa: marantz@aramis.rutgers.edu