summaryrefslogtreecommitdiff
path: root/catbird/kernel.scm
diff options
context:
space:
mode:
Diffstat (limited to 'catbird/kernel.scm')
-rw-r--r--catbird/kernel.scm26
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)))