#| -*- mode: lisp; base: 10; fonts: (fonts:hl12b fonts:hl12bi); package: user; readtable: common-lisp; -*- |# (in-package 'user) (defflavor drawing-window (plane) (tv:select-mixin tv:process-mixin tv:window) (:default-init-plist :plane (make-plane 2 :type 'art-1b :default-value 0 :extension 32.) :process 'drawing-window-top-level) :settable-instance-variables) (defmethod (drawing-window :pan-left) () (loop (beep) until (zerop (tv:mouse-buttons)))) (defmethod (drawing-window :pan-right) () (loop (beep) until (zerop (tv:mouse-buttons)))) (defmethod (drawing-window :pan-up) () (loop (beep) until (zerop (tv:mouse-buttons)))) (defmethod (drawing-window :pan-down) () (loop (beep) until (zerop (tv:mouse-buttons)))) (defun drawing-window-top-level (w) (send w :run-top-level)) (defmethod (drawing-window :run-top-level) () (do-forever (loop (process-wait "Mouse" #'(lambda (w) (and (send w :exposed-p) (send w :listen))) self) as next-char = (send self :any-tyi-no-hang) while next-char (if (consp next-char) (case (car next-char) (:menu (let ((operation (third (second next-char)))) (if (consp operation) (lexpr-send self operation) (funcall self operation))))) (beep))))) (defflavor panning-window nil (tv:alias-for-inferiors-mixin tv:bordered-constraint-frame-with-shared-io-buffer) (:default-init-plist :panes '((drawing-pane drawing-window :blinker-p nil :deexposed-typein-action :normal :deexposed-typeout-action :permit :label nil :save-bits t) (command-pane tv:command-menu :blinker-p t :blinker-deselected-visibility :on :blinker-flavor tv:rectangular-blinker :deexposed-typein-action :normal :deexposed-typeout-action :normal :label nil :save-bits t :item-list (("Pan Left" :value :pan-left :font fonts:tr12BI) ("Pan Right" :value :pan-right :font fonts:tr12BI) ("Pan Up" :value :pan-up :font fonts:tr12BI) ("Pan Down" :value :pan-down :font fonts:tr12BI)))) :constraints '((main (command-pane drawing-pane) ((command-pane 0.05)) ((drawing-pane :even))))) :settable-instance-variables) (defmethod (panning-window :after :init) (&rest ignore) (let ((drawing-pane (send self :get-pane 'drawing-pane)) (command-pane (send self :get-pane 'command-pane))) (funcall-self :set-selection-substitute drawing-pane) (send drawing-pane :set-selection-substitute nil) (send command-pane :set-selection-substitute self))) (tv:add-system-key #\0 'panning-window "Window that pans" t)