|
166 | 166 |
|
167 | 167 |
|
168 | 168 | (eval-when (:compile-toplevel :load-toplevel :execute) |
169 | | - (defconstant +rr-config-status+ '#(:success :invalid-config-time :invalid-time :failed)) |
170 | | - (defconstant +rr-connection+ '#(:connected :disconnected :unknown-connection))) |
| 169 | + (defconstant +rr-config-status-vector+ |
| 170 | + '#(:success :invalid-config-time :invalid-time :failed)) |
| 171 | + (defconstant +connection-vector+ |
| 172 | + '#(:connected :disconnected :unknown-connection))) |
| 173 | + |
| 174 | +(deftype rr-config-status () |
| 175 | + '(member :success :invalid-config-time :invalid-time :failed)) |
| 176 | + |
| 177 | +(deftype connection () |
| 178 | + '(member :connected :disconnected :unknown-connection)) |
171 | 179 |
|
172 | 180 | ;;; mask-vectors and types |
173 | 181 |
|
|
214 | 222 |
|
215 | 223 | ;; temporarily here since not in xrender.lisp |
216 | 224 |
|
217 | | - |
218 | 225 | (eval-when (:compile-toplevel :load-toplevel :execute) |
219 | | - (defconstant +render-subpixel-order+ |
220 | | - '#(:unknown :horizontal-RGB :horizontal-BGR :vertical-RGB :vertical-BGR :none))) |
| 226 | + (defconstant +render-subpixel-order-vector+ |
| 227 | + '#(:unknown |
| 228 | + :horizontal-RGB :horizontal-BGR |
| 229 | + :vertical-RGB :vertical-BGR |
| 230 | + :none))) |
| 231 | + |
| 232 | +(deftype render-subpixel-order () |
| 233 | + '(member |
| 234 | + :unknown |
| 235 | + :horizontal-RGB :horizontal-BGR |
| 236 | + :vertical-RGB :vertical-BGR |
| 237 | + :none)) |
221 | 238 |
|
222 | 239 | ;; mask encode-decode functions |
223 | 240 |
|
|
259 | 276 |
|
260 | 277 | (deftype size-id () 'card16) |
261 | 278 | (deftype rr-mode () '(or null resource-id)) |
| 279 | +(deftype crtc () 'resource-id) |
262 | 280 | (deftype output () 'resource-id) |
263 | | -(deftype connection () '(or +connected+ +disconnected+ +unknown-connection+)) |
264 | 281 |
|
265 | 282 | ;; structs |
266 | 283 |
|
|
467 | 484 | (card16 refresh) |
468 | 485 | (pad16)) |
469 | 486 | (values |
470 | | - (member8-vector-get 1 +rr-config-status+) |
| 487 | + (member8-vector-get 1 +rr-config-status-vector+) |
471 | 488 | (card32-get 8) ;; timestamp |
472 | 489 | (card32-get 12) ;; config timestamp |
473 | 490 | (window-get 16) ;; root window |
474 | | - (member16-vector-get 20 +render-subpixel-order+) ;; sub pixel order |
| 491 | + (member16-vector-get 20 +render-subpixel-order-vector+) |
475 | 492 | )))) |
476 | 493 |
|
477 | 494 | (defun rr-select-input (window enable) |
|
572 | 589 | (string-get name-bytes name-start)) |
573 | 590 | )))) |
574 | 591 |
|
575 | | - |
576 | | - |
577 | | -(defun rr-get-output-info (display output config-timestamp &optional (result-type 'list)) |
578 | | -"FIXME: indexes might be off, name not decoded properly" |
579 | | - (with-buffer-request-and-reply (display (randr-opcode display) nil :sizes (8 16 32)) |
| 592 | +(declaim (ftype (function (display output timestamp &optional t) |
| 593 | + (values rr-config-status |
| 594 | + timestamp |
| 595 | + crtc |
| 596 | + card32 |
| 597 | + card32 |
| 598 | + connection |
| 599 | + render-subpixel-order |
| 600 | + (clx-sequence crtc) |
| 601 | + card16 |
| 602 | + (clx-sequence rr-mode) |
| 603 | + (clx-sequence output) |
| 604 | + string |
| 605 | + &optional)) |
| 606 | + rr-get-output-info)) |
| 607 | +(defun rr-get-output-info (display output config-timestamp |
| 608 | + &optional (result-type 'list)) |
| 609 | + "Execute the RRGetOutputInfo request and return its result as multiple |
| 610 | +values consisting of: |
| 611 | +
|
| 612 | +1. Configuration status |
| 613 | +2. Timestamp |
| 614 | +3. Current connected CRTC |
| 615 | +4. Width in millimeters |
| 616 | +5. Height in millimeters |
| 617 | +6. Connection |
| 618 | +7. Subpixel order |
| 619 | +8. Sequence of CRTCs |
| 620 | +9. Number of preferred modes |
| 621 | +10. Sequence of modes |
| 622 | +11. Sequence of clones |
| 623 | +12. Name" |
| 624 | + (with-buffer-request-and-reply (display (randr-opcode display) nil |
| 625 | + :sizes (8 16 32)) |
580 | 626 | ((data +rr-getoutputinfo+) |
581 | 627 | (card32 output) |
582 | 628 | (card32 config-timestamp)) |
583 | 629 | (let* ((num-crtcs (card16-get 26)) |
584 | | - (num-modes (card16-get 28)) |
585 | | - (num-clones (card16-get 32)) |
586 | | - (name-length (card16-get 34)) |
587 | | - (crtc-start 26) |
588 | | - (mode-start (index+ crtc-start (index* num-crtcs 4))) |
589 | | - (clone-start (index+ mode-start (index* num-modes 4))) |
590 | | - (name-start (index+ clone-start (index* num-clones 4)))) |
| 630 | + (num-modes (card16-get 28)) |
| 631 | + (num-clones (card16-get 32)) |
| 632 | + (name-length (card16-get 34)) |
| 633 | + (crtc-start 36) |
| 634 | + (mode-start (index+ crtc-start (index* num-crtcs 4))) |
| 635 | + (clone-start (index+ mode-start (index* num-modes 4))) |
| 636 | + (name-start (index+ clone-start (index* num-clones 4)))) |
591 | 637 | (values |
592 | | - (member8-vector-get 1 +rr-config-status+) |
593 | | - (card32-get 8) ; timestamp |
594 | | - (card32-get 12) ; current connected crtc |
595 | | - (card32-get 16) ; width in mm |
596 | | - (card32-get 20) ; height in mm |
597 | | - (member8-vector-get 24 +rr-connection+) |
598 | | - (member8-vector-get 25 +render-subpixel-order+) ; sub-pixel-order |
599 | | - (sequence-get :result-type result-type :length num-crtcs :index 26) |
600 | | - (card16-get 30) |
601 | | - (sequence-get :result-type result-type :length num-modes :index mode-start) |
602 | | - (sequence-get :result-type result-type :length num-clones :index clone-start) |
603 | | - ;(string-get name-length name-start ) |
604 | | - (sequence-get :result-type 'string :format card16 :length name-length :index name-start :transform #'code-char)) |
605 | | -))) |
| 638 | + (member8-vector-get 1 +rr-config-status-vector+) |
| 639 | + (card32-get 8) ; Timestamp |
| 640 | + (card32-get 12) ; Current connected CRTC |
| 641 | + (card32-get 16) ; Width in millimeters |
| 642 | + (card32-get 20) ; Height in millimeters |
| 643 | + (member8-vector-get 24 +connection-vector+) |
| 644 | + (member8-vector-get 25 +render-subpixel-order-vector+) |
| 645 | + (sequence-get :result-type result-type :length num-crtcs |
| 646 | + :index crtc-start) |
| 647 | + (card16-get 30) ; Number of preferred modes |
| 648 | + (sequence-get :result-type result-type :length num-modes |
| 649 | + :index mode-start) |
| 650 | + (sequence-get :result-type result-type :length num-clones |
| 651 | + :index clone-start) |
| 652 | + (string-get name-length name-start))))) |
606 | 653 |
|
607 | 654 | (defun rr-list-output-properties (display output &optional (result-type 'list)) |
608 | 655 | "Returns a list of atom properties for given display. ?keep it simple and return id's or atom-names?" |
|
754 | 801 | (pos-outputs (card16-get 30)) |
755 | 802 | (pos-start (index+ +replysize+ (index* num-outputs 4)))) |
756 | 803 | (values |
757 | | - (member8-vector-get 1 +rr-config-status+) |
| 804 | + (member8-vector-get 1 +rr-config-status-vector+) |
758 | 805 | (card32-get 8) ; timestamp |
759 | 806 | (int16-get 12) ; x |
760 | 807 | (int16-get 14) ; y |
|
782 | 829 | (pad16) |
783 | 830 | ((sequence :format card32) seq)) |
784 | 831 | (values |
785 | | - (member8-vector-get 1 +rr-config-status+) |
| 832 | + (member8-vector-get 1 +rr-config-status-vector+) |
786 | 833 | (card32-get 8) ; new timestamp |
787 | 834 | )))) |
788 | 835 |
|
|
908 | 955 | ;; ((data +rr-getpanning+) |
909 | 956 | ;; (card32 crtc)) |
910 | 957 | ;; (values |
911 | | -;; (member8-vector-get 1 +rr-config-status+) |
| 958 | +;; (member8-vector-get 1 +rr-config-status-vector+) |
912 | 959 | ;; (card32-get 8) ; timestamp |
913 | 960 | ;; (rr-panning-get 12) |
914 | 961 | ;; ;(sequence-get :length 8 :format card16 :index 12 :result-type result-type) |
|
928 | 975 | ;; (rr-panning rr-panning)) |
929 | 976 |
|
930 | 977 | ;; (values |
931 | | -;; (member8-vector-get 1 +rr-config-status+) |
| 978 | +;; (member8-vector-get 1 +rr-config-status-vector+) |
932 | 979 | ;; ; (card32-get 8) ; new timestamp |
933 | 980 | ;; ))) |
934 | 981 |
|
|
0 commit comments