AtlatestRepositorysigil-studio
sigil-studio / tree / testtest-font.sgl
1
;;; test-font.sgl - Test font loading and text rendering3
(import (sigil core)4
(sigil app)5
(sigil graphics)6
(sigil graphics font))8
(display "Loading font...\n")10
(define font #f)11
(define font-small #f)12
(define time 0.0)13
(define fps 0.0)14
(define frame-count 0)15
(define fps-timer 0.0)16
(define message "Practical Symbolic Power")18
;; Set to #t to use fixed 800x400 viewport with letterboxing19
(define use-fixed-viewport #t)21
(define (on-init)22
(display "Initializing...\n")23
(set! font (load-font "test/Saucer.ttf" 48))24
(set! font-small (load-font "test/Saucer.ttf" 20))25
;; Enable fixed viewport if desired26
(when use-fixed-viewport27
(set-viewport 800 400)28
(set-letterbox-color 0.1 0.0 0.15)) ;; Dark purple bars29
(if font30
(begin31
(display "Font loaded! Size: ")32
(display (font-size font))33
(display ", Line height: ")34
(display (font-line-height font))35
(newline))36
(display "ERROR: Failed to load font!\n")))38
(define (on-frame)39
(let ((dt (frame-time)))40
(set! time (+ time dt))41
;; Update FPS counter every second42
(set! frame-count (+ frame-count 1))43
(set! fps-timer (+ fps-timer dt))44
(when (>= fps-timer 1.0)45
(set! fps frame-count)46
(set! frame-count 0)47
(set! fps-timer (- fps-timer 1.0))))49
(begin-frame)50
(clear-screen 0.05 0.05 0.1)52
(when font53
;; Draw wavy text with color gradient54
(let ((start-x 80)55
(base-y 200)56
(amplitude 30)57
(frequency 0.3)58
(speed 4.0))59
(let loop ((i 0)60
(x start-x))61
(when (< i (string-length message))62
(let* ((char (string-ref message i))63
(phase (+ (* i frequency) (* time speed)))64
(y-offset (* amplitude (sin phase)))65
;; Rotating color gradient using sine for smooth cycling66
(color-phase (+ (* i 0.25) (* time 2.0)))67
(wave (* 0.5 (+ 1.0 (sin color-phase)))) ;; 0 to 1 smoothly68
(r 1.0)69
(g (- 0.9 (* 0.4 wave)))70
(b (* 0.2 (- 1.0 wave))))71
(set-color r g b)72
(let ((advance (draw-text-char font char x (+ base-y y-offset))))73
(loop (+ i 1) (+ x advance)))))))75
;; Draw FPS counter in top right76
(when font-small77
(let* ((fps-text (string-append (number->string fps) " FPS"))78
(text-w (text-width font-small fps-text))79
;; Use fixed width when viewport enabled, else reactive80
(screen-w (if use-fixed-viewport 800 (frame-width))))81
(set-color 0.6 0.6 0.6)82
(draw-text font-small fps-text (- screen-w text-w 10) 25))))84
(end-frame))86
(define (on-cleanup)87
(display "Cleaning up...\n"))89
(display "Starting app...\n")90
(app-run on-init on-frame on-cleanup "Sigil Demo" 800 400)