fix underlay & pinhole combination
closes PR 13993
This commit is contained in:
parent
b0c79bfcc5
commit
8a7d828cc5
|
@ -143,12 +143,12 @@
|
||||||
;; places images on top of each other with their upper left corners aligned.
|
;; places images on top of each other with their upper left corners aligned.
|
||||||
;; last one goes on the bottom
|
;; last one goes on the bottom
|
||||||
(define/chk (overlay image image2 . image3)
|
(define/chk (overlay image image2 . image3)
|
||||||
(overlay/internal 'middle 'middle image (cons image2 image3)))
|
(overlay/internal 'middle 'middle image (cons image2 image3) #t))
|
||||||
|
|
||||||
;; underlay : image image image ... -> image
|
;; underlay : image image image ... -> image
|
||||||
(define/chk (underlay image image2 . image3)
|
(define/chk (underlay image image2 . image3)
|
||||||
(let ([imgs (reverse (list* image image2 image3))])
|
(let ([imgs (reverse (list* image image2 image3))])
|
||||||
(overlay/internal 'middle 'middle (car imgs) (cdr imgs))))
|
(overlay/internal 'middle 'middle (car imgs) (cdr imgs) #f)))
|
||||||
|
|
||||||
;; overlay/align : string string image image image ... -> image
|
;; overlay/align : string string image image image ... -> image
|
||||||
;; the first string has to be one of "center" "middle" "left" or "right" (or symbols)
|
;; the first string has to be one of "center" "middle" "left" or "right" (or symbols)
|
||||||
|
@ -167,7 +167,7 @@
|
||||||
image3))
|
image3))
|
||||||
"when x-place or y-place is ~e or ~e, then all of the arguments must have pinholes"
|
"when x-place or y-place is ~e or ~e, then all of the arguments must have pinholes"
|
||||||
'pinhole "pinhole"))
|
'pinhole "pinhole"))
|
||||||
(overlay/internal x-place y-place image (cons image2 image3)))
|
(overlay/internal x-place y-place image (cons image2 image3) #t))
|
||||||
|
|
||||||
(define/chk (underlay/align x-place y-place image image2 . image3)
|
(define/chk (underlay/align x-place y-place image image2 . image3)
|
||||||
(when (or (eq? x-place 'pinhole) (eq? y-place 'pinhole))
|
(when (or (eq? x-place 'pinhole) (eq? y-place 'pinhole))
|
||||||
|
@ -179,25 +179,27 @@
|
||||||
"when x-place or y-place is ~e or ~e, then all of the arguments must have pinholes"
|
"when x-place or y-place is ~e or ~e, then all of the arguments must have pinholes"
|
||||||
'pinhole "pinhole"))
|
'pinhole "pinhole"))
|
||||||
(let ([imgs (reverse (list* image image2 image3))])
|
(let ([imgs (reverse (list* image image2 image3))])
|
||||||
(overlay/internal x-place y-place (car imgs) (cdr imgs))))
|
(overlay/internal x-place y-place (car imgs) (cdr imgs) #f)))
|
||||||
|
|
||||||
(define/chk (overlay/pinhole image1 image2 . image3)
|
(define/chk (overlay/pinhole image1 image2 . image3)
|
||||||
(overlay/internal 'pinhole 'pinhole
|
(overlay/internal 'pinhole 'pinhole
|
||||||
(maybe-center-pinhole image1)
|
(maybe-center-pinhole image1)
|
||||||
(map maybe-center-pinhole (cons image2 image3))))
|
(map maybe-center-pinhole (cons image2 image3))
|
||||||
|
#t))
|
||||||
|
|
||||||
(define/chk (underlay/pinhole image1 image2 . image3)
|
(define/chk (underlay/pinhole image1 image2 . image3)
|
||||||
(let ([imgs (map maybe-center-pinhole (reverse (list* image1 image2 image3)))])
|
(let ([imgs (map maybe-center-pinhole (reverse (list* image1 image2 image3)))])
|
||||||
(overlay/internal 'pinhole 'pinhole
|
(overlay/internal 'pinhole 'pinhole
|
||||||
(car imgs)
|
(car imgs)
|
||||||
(cdr imgs))))
|
(cdr imgs)
|
||||||
|
#f)))
|
||||||
|
|
||||||
(define (maybe-center-pinhole img)
|
(define (maybe-center-pinhole img)
|
||||||
(if (send img get-pinhole)
|
(if (send img get-pinhole)
|
||||||
img
|
img
|
||||||
(center-pinhole img)))
|
(center-pinhole img)))
|
||||||
|
|
||||||
(define (overlay/internal x-place y-place fst rst)
|
(define (overlay/internal x-place y-place fst rst first-pinhole?)
|
||||||
(let loop ([fst fst]
|
(let loop ([fst fst]
|
||||||
[rst rst])
|
[rst rst])
|
||||||
(cond
|
(cond
|
||||||
|
@ -215,7 +217,7 @@
|
||||||
(car rst)
|
(car rst)
|
||||||
(if (< dx 0) 0 dx)
|
(if (< dx 0) 0 dx)
|
||||||
(if (< dy 0) 0 dy)
|
(if (< dy 0) 0 dy)
|
||||||
#t)
|
first-pinhole?)
|
||||||
(cdr rst)))])))
|
(cdr rst)))])))
|
||||||
|
|
||||||
(define (find-x-spot x-place image)
|
(define (find-x-spot x-place image)
|
||||||
|
|
|
@ -716,6 +716,13 @@
|
||||||
(make-bb 100 100 100)
|
(make-bb 100 100 100)
|
||||||
#f))
|
#f))
|
||||||
|
|
||||||
|
(test (pinhole-x
|
||||||
|
(underlay
|
||||||
|
(put-pinhole 50 50 (rectangle 100 100 "solid" "gray"))
|
||||||
|
(rectangle 10 10 "solid" "black")))
|
||||||
|
=>
|
||||||
|
50)
|
||||||
|
|
||||||
(test (overlay/offset (rectangle 10 100 'solid 'red)
|
(test (overlay/offset (rectangle 10 100 'solid 'red)
|
||||||
0 0
|
0 0
|
||||||
(rectangle 100 10 'solid 'blue))
|
(rectangle 100 10 'solid 'blue))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user