/ example / red-window.scm
red-window.scm
 1  #!/usr/bin/env -S guile --no-auto-compile -e main
 2  !#
 3  (use-modules
 4   (wayland server display)
 5   (wayland signal)
 6   (wayland server listener)
 7   (util572 color)
 8   (wlroots))
 9  
10  ;;; this a simple example, can not input, display cursor , display client.
11  ;;; please don't try at tty. use x11 or wayland backend. it just display a
12  ;;; red windows.
13  
14  (define w-display (wl-display-create))
15  (define w-backend (wlr-backend-autocreate w-display))
16  (define w-renderer (wlr-renderer-autocreate w-backend))
17  (define w-allocator (wlr-allocator-autocreate w-backend w-renderer))
18  
19  (define output-frame-listener
20    (make-wl-listener
21     (lambda (listener output)
22       (wlr-output-attach-render output #f)
23       (call-with-renderer
24        w-renderer
25        (.width output) (.height output)
26        (lambda (renderer . _)
27          (wlr-renderer-clear renderer (make-rgba-color "#f000"))))
28       (wlr-output-commit output))))
29  
30  (define w-backend-new-output-listener
31    (make-wl-listener
32     (lambda (listener output)
33       (display "I get new output!\n")
34       (wlr-output-init-render
35        output w-allocator w-renderer)
36       (wl-signal-add (get-event-signal output 'frame) output-frame-listener)
37       (wlr-output-enable output #t)
38       (wlr-output-commit output))))
39  
40  (define (main . _)
41    (wlr-renderer-init-wl-display w-renderer w-display)
42  
43    (wl-signal-add (get-event-signal w-backend 'new-output)
44                   w-backend-new-output-listener)
45  
46    (wlr-backend-start w-backend)
47  
48    (setenv "WAYLAND_DISPLAY" (wl-display-add-socket-auto w-display))
49  
50    (wl-display-run w-display)
51  
52    (wl-display-destroy-clients w-display)
53    (wl-display-destroy w-display))