AtlatestRepositorysigil-studio
sigil-studio / tree / testtest-transforms.sgl
1
;;; test-transforms.sgl - Demo of transform stack3
(import (sigil core)4
(sigil app)5
(sigil graphics)6
(sigil graphics font))8
(define (label text x y)9
(set-color 0.7 0.7 0.7)10
(draw-text-centered *font* text x y))12
(define *font* #f)13
(define *angle* 0.0)14
(define *time* 0.0)16
(define (on-init)17
(set! *font* (load-font "test/Saucer.ttf" 18)))19
(define (on-frame)20
(begin-frame)21
(clear-screen 0.05 0.05 0.1)23
;; Update time24
(set! *time* (+ *time* 0.016))25
(set! *angle* (+ *angle* 0.02))27
;; Title28
(when *font*29
(set-color 0.0 1.0 1.0)30
(draw-text-centered *font* "Transform Stack Demo" 400 30))32
;; 1. Simple rotation around center33
(push-transform)34
(translate 150 150)35
(rotate *angle*)36
(set-color 1.0 0.3 0.3)37
(draw-filled-rect -40 -40 80 80)38
(set-color 1.0 1.0 1.0)39
(draw-rect -40 -40 80 80)40
(pop-transform)42
(when *font*43
(label "Rotating" 150 250))45
;; 2. Scaling pulse46
(push-transform)47
(translate 400 150)48
(define pulse (+ 0.7 (* 0.3 (sin (* *time* 3)))))49
(scale pulse pulse)50
(set-color 0.3 1.0 0.3)51
(draw-filled-rect -40 -40 80 80)52
(set-color 1.0 1.0 1.0)53
(draw-rect -40 -40 80 80)54
(pop-transform)56
(when *font*57
(label "Pulsing" 400 250))59
;; 3. Rotation + scale combined60
(push-transform)61
(translate 650 150)62
(rotate (* *angle* -0.5))63
(scale (+ 0.8 (* 0.2 (cos (* *time* 2))))64
(+ 0.8 (* 0.2 (sin (* *time* 2)))))65
(set-color 0.3 0.3 1.0)66
(draw-filled-rect -40 -40 80 80)67
(set-color 1.0 1.0 1.0)68
(draw-rect -40 -40 80 80)69
(pop-transform)71
(when *font*72
(label "Combined" 650 250))74
;; 4. Nested transforms - orbiting squares75
(push-transform)76
(translate 150 400)78
;; Outer rotation79
(push-transform)80
(rotate *angle*)82
;; Draw center83
(set-color 1.0 1.0 0.0)84
(draw-filled-rect -15 -15 30 30)86
;; Orbiting square 187
(push-transform)88
(translate 70 0)89
(rotate (* *angle* -2))90
(set-color 1.0 0.5 0.0)91
(draw-filled-rect -12 -12 24 24)92
(pop-transform)94
;; Orbiting square 295
(push-transform)96
(translate -70 0)97
(rotate (* *angle* -2))98
(set-color 0.0 1.0 0.5)99
(draw-filled-rect -12 -12 24 24)100
(pop-transform)102
(pop-transform)103
(pop-transform)105
(when *font*106
(label "Orbiting" 150 500))108
;; 5. Triangle rotation109
(push-transform)110
(translate 400 400)111
(rotate (* *angle* 0.7))112
(set-color 1.0 0.0 1.0)113
(fill-triangle 0 -50 -43 25 43 25)114
(set-color 1.0 1.0 1.0)115
(draw-triangle 0 -50 -43 25 43 25)116
(pop-transform)118
(when *font*119
(label "Triangle" 400 500))121
;; 6. Line spinner122
(push-transform)123
(translate 650 400)124
(let loop ((i 0))125
(when (< i 8)126
(push-transform)127
(rotate (+ *angle* (* i 0.785))) ; i * pi/4128
(set-color (/ i 8.0) 1.0 (- 1.0 (/ i 8.0)))129
(draw-line 0 0 60 0)130
(pop-transform)131
(loop (+ i 1))))132
(pop-transform)134
(when *font*135
(label "Spinner" 650 500))137
(when (key-pressed? 'escape)138
(request-quit))140
(end-frame))142
(define (on-cleanup) #t)144
(app-run on-init on-frame on-cleanup "Transform Demo" 800 550)