diff options
Diffstat (limited to 'catbird/kernel.scm')
-rw-r--r-- | catbird/kernel.scm | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/catbird/kernel.scm b/catbird/kernel.scm index 6560d47..448b168 100644 --- a/catbird/kernel.scm +++ b/catbird/kernel.scm @@ -303,6 +303,15 @@ (controller-slot-id slot) axis value)))))) + +;;; +;;; Windows +;;; + +(define-method (on-window-resize (kernel <kernel>) width height) + (for-each (lambda (r) + (on-window-resize r width height)) + (regions kernel))) ;;; @@ -336,14 +345,23 @@ (gensym "region-")) (define* (create-region area #:key (rank 0) (name (unique-region-name))) - (let ((region (make-region area name rank))) + (let* ((window (current-window)) + (w (window-width window)) + (h (window-height window))) + (when (or (< (rect-left area) 0.0) + (< (rect-bottom area) 0.0) + (> (rect-right area) w) + (> (rect-top area) h)) + (raise-exception + (make-exception-with-message "region area exceeds window area")))) + (let ((region (make <region> #:area area #:name name #:rank rank))) (add-region (current-kernel) region) region)) (define* (create-full-region #:key (rank 0) (name (unique-region-name))) - (let ((w (window-width (current-window))) - (h (window-height (current-window)))) - (create-region (make-rect 0.0 0.0 w h) #:rank rank #:name name))) + (let ((region (make <full-region> #:name name #:rank rank))) + (add-region (current-kernel) region) + region)) (define (kill-region region) (let ((k (current-kernel))) |