From 57b605dab42af45c7d16cfeb926714165bc63788 Mon Sep 17 00:00:00 2001
From: Vasilij Schneidermann <mail@vasilij.de>
Date: Thu, 2 Jan 2025 19:29:47 +0100
Subject: [PATCH 2/4] cairo: Rework cairo_matrix_t to use records
---
cairo/0.1.18/cairo.scm | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/cairo/0.1.18/cairo.scm b/cairo/0.1.18/cairo.scm
index 2fe7bf92..6f8ff693 100644
|
a
|
b
|
EOF
|
| 275 | 275 | |
| 276 | 276 | ;; Matrix operations |
| 277 | 277 | |
| 278 | | (define-foreign-type cairo_matrix_t (c-pointer "cairo_matrix_t") |
| 279 | | values |
| 280 | | (cut tag-pointer <> 'cairo-matrix)) |
| | 278 | (define-foreign-variable sizeof-cairo-matrix int "sizeof(cairo_matrix_t)") |
| | 279 | |
| | 280 | ;; see cairo-font/text-extents for the construction |
| | 281 | (define-record cairo-matrix-type buffer) |
| | 282 | (let ((maker make-cairo-matrix-type)) |
| | 283 | (set! make-cairo-matrix-type |
| | 284 | (lambda () (maker (make-blob sizeof-cairo-matrix))))) |
| | 285 | |
| | 286 | (define-foreign-type cairo_matrix_t scheme-pointer cairo-matrix-type-buffer) |
| 281 | 287 | |
| 282 | 288 | (define (cairo-transform/matrix ctx v) |
| 283 | 289 | (when (not (= (f64vector-length v) 6)) |
| 284 | 290 | (error "Vector size mismatch should be 6, is " (f64vector-length v))) |
| 285 | | (cairo-transform ctx v)) |
| | 291 | (let ((matrix (make-cairo-matrix-type))) |
| | 292 | (cairo-matrix-init matrix |
| | 293 | (f64vector-ref v 0) |
| | 294 | (f64vector-ref v 1) |
| | 295 | (f64vector-ref v 2) |
| | 296 | (f64vector-ref v 3) |
| | 297 | (f64vector-ref v 4) |
| | 298 | (f64vector-ref v 5)) |
| | 299 | (cairo-transform ctx matrix))) |
| 286 | 300 | |
| 287 | | (define cairo-new-matrix |
| 288 | | (make-f64vector 6 0)) |
| 289 | 301 | |
| 290 | 302 | ; accessors for each element might be nice, but probably not |
| 291 | 303 | ; immediately necessary |