diff options
Diffstat (limited to 'ipl/gprogs/scroll.icn')
-rw-r--r-- | ipl/gprogs/scroll.icn | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/ipl/gprogs/scroll.icn b/ipl/gprogs/scroll.icn new file mode 100644 index 0000000..968160a --- /dev/null +++ b/ipl/gprogs/scroll.icn @@ -0,0 +1,105 @@ +############################################################################ +# +# File: scroll.icn +# +# Subject: Program to scroll image +# +# Author: Jon Lipp +# +# Date: November 22, 1996 +# +########################################################################## +# +# This file is in the public domain. +# +############################################################################ +# +# This program displays an image, with scolling. +# +########################################################################## +# +# Links: options, vidgets, vscroll, wopen, xcompat +# +############################################################################ +# +# Requires: Version 9 graphics +# +############################################################################ + +link options +link vidgets, vscroll +link wopen +link xcompat + +global win, im_win, view_width, view_height +global scv, sch + +procedure main(args) + local opts, file, scrollbar_width, picw, pich, root + + opts := options(args, "f:w+h+") + file := \opts["f"] | + stop("Usage: scroll -f file [-w window size/width] [-h window height]") + view_width := \opts["w"] | 300 + view_height := \opts["h"] | view_width + scrollbar_width := 15 +# +# Load in the bitmap; get the dimensions. +# + im_win := WOpen("canvas=hidden", "image=" || file) | + stop("Couldn't make temporary bitmap.") + picw := WAttrib(im_win, "width") + pich := WAttrib(im_win, "height") + + win := WOpen("label=" || file, "size=" || + (view_width + scrollbar_width + 1) || "," || + (view_height + scrollbar_width + 1) ) | + stop("*** cannot open file") + + root := Vroot_frame(win) +# +# Create two scrollbars. +# + scv := Vvert_scrollbar(root, -1, 0, win, sl_cb, 1, + view_height,scrollbar_width, pich, 0, , view_height) + sch := Vhoriz_scrollbar(root, 0, -1, win, sl_cb, 2, view_width, + scrollbar_width, 0, picw, , view_width) + + VResize(root) +# +# Draw the initial view of the pixmap, based on the scrollbar's values. +# + sl_cb(scv, scv.callback.value) + sl_cb(sch, sch.callback.value) +# +# Now get events, pass control to the procedure quit() if an event is not +# captured by a vidget. +# + GetEvents(root, quit, , resize) +end + +# +# Terminate the program on a keypress of "q". +# +procedure quit(e) + + if e === "q" then stop("End scroll.") +end + +procedure resize(root) + + VReformat(scv, WAttrib(scv.win, "height") - 15) + VReformat(sch, WAttrib(sch.win, "width") - 15) +end + +# +# Copy a portion of the bitmap to the main +# window based on the values of the scrollbars. +# +procedure sl_cb(caller, val) + static vpos, hpos + initial vpos := hpos := 0 + + (caller.id = 1, vpos := val) | hpos := val + CopyArea(im_win, win, hpos, vpos, view_width, view_height, 0, 0) +end |