From 7239651fec6c268e0ac93ffa4fc7430329ce397e Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 14 Dec 2022 12:54:57 -0500 Subject: node-2d: Fix placement/alignment methods to properly use local space. --- catbird/node-2d.scm | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/catbird/node-2d.scm b/catbird/node-2d.scm index eb39b6b..ca5311e 100644 --- a/catbird/node-2d.scm +++ b/catbird/node-2d.scm @@ -655,38 +655,55 @@ (define* (place-right a b #:key (padding 0.0)) "Adjust B's x position coordinate so that it is PADDING distance to the right of A." - (set! (position-x b) (+ (position-x a) (width a) padding))) + (set! (position-x b) + (+ (local-x a) (local-width a) padding + (- (local-origin-x b) (local-x b))))) (define* (place-left a b #:key (padding 0.0)) "Adjust B's x position coordinate so that it is PADDING distance to the left of A." - (set! (position-x b) (- (position-x a) (width b) padding))) + (set! (position-x b) + (- (local-x a) (local-width b) padding + (- (local-x b) (local-origin-x b))))) (define* (place-above a b #:key (padding 0.0)) "Adjust B's y position coordinate so that it is PADDING distance above A." - (set! (position-y b) (+ (position-y a) (height a) padding))) + (set! (position-y b) + (+ (local-y a) (local-height a) padding + (- (local-origin-y b) (local-y b))))) (define* (place-below a b #:key (padding 0.0)) "Adjust B's y position coordinate so that it is PADDING distance below A." - (set! (position-y b) (- (position-y a) (height b) padding))) + (set! (position-y b) + (- (local-y a) (local-height b) padding + (- (local-y b) (local-origin-y b))))) + +(define (align-right a b) + "Align the right side of B with the right side of A." + (set! (position-x b) + (+ (local-x a) (local-width a) + (- (local-origin-x b) (local-x b))))) (define (align-left a b) "Align the left side of B with the left side of A." - (set! (position-x b) (position-x a))) + (set! (position-x b) + (- (local-x a) + (- (local-x b) (local-origin-x b))))) -(define (align-right a b) - "Align the right side of B with the right side of A." - (set! (position-x b) (+ (position-x a) (width a)))) +(define (align-top a b) + "Align the top of B with the top of A." + (set! (position-y b) + (+ (local-y a) (local-height a) + (- (local-origin-y b) (local-y b))))) (define (align-bottom a b) "Align the bottom of B with the bottom of A." - (set! (position-y b) (position-y a))) + (set! (position-y b) + (- (local-y a) + (- (local-y b) (local-origin-y b))))) -(define (align-top a b) - "Align the top of B with the top of A." - (set! (position-y b) (+ (position-y a) (height a)))) ;;; -- cgit v1.2.3