From 7164093cd1dcdc037a77bbee6042c98cf86bba01 Mon Sep 17 00:00:00 2001 From: Mark Friedman Date: Mon, 19 Jun 1989 22:36:54 +0000 Subject: [PATCH] Added a procedure to find an inferior containing a given x,y coordinate. Used in support of mouse button stuff. --- v7/src/edwin/window.scm | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/v7/src/edwin/window.scm b/v7/src/edwin/window.scm index f5b196eae..665721cab 100644 --- a/v7/src/edwin/window.scm +++ b/v7/src/edwin/window.scm @@ -1,6 +1,6 @@ ;;; -*-Scheme-*- ;;; -;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/window.scm,v 1.146 1989/04/28 22:54:38 cph Exp $ +;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/window.scm,v 1.147 1989/06/19 22:36:54 markf Exp $ ;;; ;;; Copyright (c) 1986, 1989 Massachusetts Institute of Technology ;;; @@ -425,4 +425,31 @@ (define-integrable (set-inferior-redisplay-flags! inferior flags) (vector-set! (cdr inferior) 2 flags) - unspecific) \ No newline at end of file + unspecific) + +(define (inferior-containing-coordinates window x y #!optional stop-search?) + (let ((stop-search? (if (default-object? stop-search?) + window-inferiors + stop-search?))) + (let search ((window window) + (x x) + (y y)) + (if (stop-search? window) + (values window x y) + (let loop ((inferiors (window-inferiors window))) + (and + (not (null? inferiors)) + (let ((inferior (car inferiors))) + (let ((x-start (inferior-x-start inferior)) + (y-start (inferior-y-start inferior)) + (inf-window (inferior-window inferior))) + (cond ((or (null? x-start) (null? y-start)) false) + ((and (>= x x-start) + (<= x (inferior-x-end inferior)) + (>= y y-start) + (<= y (inferior-y-end inferior))) + (search inf-window + (- x x-start) + (- y y-start))) + (else + (loop (cdr inferiors)))))))))))) -- 2.25.1