home *** CD-ROM | disk | FTP | other *** search
- (in-package :oou)
- (oou-provide :simple-view-ce)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; simple-view-ce.Lisp
- ;;
- ;; Copyright ⌐ 1992 Northwestern University Institute for the Learning Sciences
- ;; All Rights Reserved
- ;;
- ;; author: Michael S. Engber
- ;;
- ;; methods for the view class
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (export '(focusing-view focused-corners view-portBits
- offset-view-position
- view-hide view-show view-shown-p view-shown-position
- hilite-view
- erase-corners erase-view
- view-to-global global-to-view
- view-to-window window-to-view
- view-window-corners view-global-corners
- ))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (eval-when (:compile-toplevel :load-toplevel :execute)
-
- (defconstant $di-hidden-const 8192)
- (defconstant $di-hide-h-offset 16384)
-
- )
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defmethod focusing-view ((sv simple-view)) (view-container sv))
- (defmethod focusing-view ((v view)) v)
-
- (defmethod focused-corners ((sv simple-view)) (view-corners sv))
- (defmethod focused-corners ((v view)) (values #@(0 0) (view-size v)))
-
- (defmethod view-portBits ((sv simple-view))
- (pref (wptr sv) :GrafPort.portBits))
-
- (defmethod offset-view-position ((sv simple-view) dh &optional dv)
- (set-view-position sv (add-points (view-position sv) (make-point dh dv))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; hiding views (as per HideDItem & ShowDItem IM IV p.59)
-
- (defmethod view-hide ((sv simple-view))
- (when (view-shown-p sv)
- (offset-view-position sv #.(make-point $di-hide-h-offset 0))))
-
- (defmethod view-show ((sv simple-view))
- (unless (view-shown-p sv)
- (offset-view-position sv #.(make-point (- $di-hide-h-offset) 0))))
-
- (defmethod view-shown-p ((sv simple-view))
- (< (point-h (view-position sv)) #.$di-hidden-const))
-
- (defmethod view-shown-position ((sv simple-view))
- (if (view-shown-p sv)
- (view-position sv)
- (subtract-points (view-position sv) #.(make-point $di-hide-h-offset 0))))
-
-
- (defmethod erase-corners ((sv simple-view) topLeft botRight)
- (rlet ((r :Rect :topLeft topLeft :botRight botRight))
- (with-macptrs ((rgn (#_NewRgn)))
- (#_RectRgn rgn r)
- (let ((erase-rgn (window-erase-region (view-window sv))))
- (#_UnionRgn rgn erase-rgn erase-rgn))
- (#_DisposeRgn rgn))))
-
- (defmethod erase-view ((sv simple-view))
- (multiple-value-call #'erase-corners sv (view-window-corners sv)))
-
- ;; hilite-view is special purpose functions for use in designing new
- ;; classes. They were designed with efficiency in mind, rather
- ;; than robustness.
- ;;
- ;;Note: they do not focus the current view. They're intended
- ;;to be used in specializing methods (like view-draw-contents)
- ;;which take care of focussing the current view. For simple views
- ;;it be focused to view's container. For views it should be focused
- ;;to the view.
- ;;
- ;; Hiliting an already hilited view or un-hiliting a view that's
- ;; not hilited will not work with these default fns.
- ;;
- ;;
- (defmethod hilite-view ((sv simple-view) hilite-flag)
- ;;Hilites the specified view. Specializations may use hilite-flag
- ;;to tell whether to hilite or un-hilite the item (t/nil). It is
- ;;not used here because InvertRect is reversable.
- (declare (ignore hilite-flag))
- (multiple-value-bind (topLeft botRight) (focused-corners sv)
- (rlet ((r :Rect :topLeft topLeft :botRight botRight))
- (#_BitClr (%int-to-ptr #$hiliteMode) #$pHiliteBit)
- (#_InvertRect r))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; coordinate conversions
-
- (defmethod view-to-window ((sv simple-view) point)
- (subtract-points point (view-origin sv)))
-
- (defmethod window-to-view ((sv simple-view) point)
- (add-points point (view-origin sv)))
-
-
- (defmethod view-to-global ((sv simple-view) point)
- (add-points (view-position (view-window sv)) (subtract-points point (view-origin sv))))
-
- (defmethod global-to-view ((sv simple-view) point)
- (subtract-points (add-points point (view-origin sv)) (view-position (view-window sv))))
-
-
- (defmethod view-window-corners ((sv simple-view))
- (let ((offset (subtract-points #@(0 0) (view-origin sv))))
- (values offset (add-points (view-size sv) offset))))
-
- (defmethod view-global-corners ((sv simple-view))
- (let ((offset (subtract-points (view-position (view-window sv)) (view-origin sv))))
- (values offset (add-points (view-size sv) offset))))
-
-