penpot/frontend/src/app/render_wasm/deserializers.cljs
alonso.torres baa90ea8bf WIP
2025-12-10 09:45:06 +01:00

68 lines
2.2 KiB
Clojure

;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS INC
(ns app.render-wasm.deserializers
(:require
[app.common.data :as d]
[app.common.geom.matrix :as gmt]
[app.common.geom.point :as gpt]
[app.common.uuid :as uuid]))
(defn read-modifier-entry
[heapu32 heapf32 offset]
(let [id1 (aget heapu32 (+ offset 0))
id2 (aget heapu32 (+ offset 1))
id3 (aget heapu32 (+ offset 2))
id4 (aget heapu32 (+ offset 3))
a (aget heapf32 (+ offset 4))
b (aget heapf32 (+ offset 5))
c (aget heapf32 (+ offset 6))
d (aget heapf32 (+ offset 7))
e (aget heapf32 (+ offset 8))
f (aget heapf32 (+ offset 9))]
(d/vec2 (uuid/from-unsigned-parts id1 id2 id3 id4)
(gmt/matrix a b c d e f))))
(defn read-selection-rect
[heapf32 offset]
(let [width (aget heapf32 (+ offset 0))
height (aget heapf32 (+ offset 1))
cx (aget heapf32 (+ offset 2))
cy (aget heapf32 (+ offset 3))
a (aget heapf32 (+ offset 4))
b (aget heapf32 (+ offset 5))
c (aget heapf32 (+ offset 6))
d (aget heapf32 (+ offset 7))
e (aget heapf32 (+ offset 8))
f (aget heapf32 (+ offset 9))]
{:width width
:height height
:center (gpt/point cx cy)
:transform (gmt/matrix a b c d e f)}))
(defn read-position-data-entry
[heapu32 heapf32 offset]
(let [paragraph (aget heapu32 (+ offset 0))
span (aget heapu32 (+ offset 1))
start-pos (aget heapu32 (+ offset 2))
end-pos (aget heapu32 (+ offset 3))
x (aget heapf32 (+ offset 4))
y (aget heapf32 (+ offset 5))
width (aget heapf32 (+ offset 6))
height (aget heapf32 (+ offset 7))
direction (aget heapu32 (+ offset 8))]
{:paragraph paragraph
:span span
:start-pos start-pos
:end-pos end-pos
:x x
:y y
:width width
:height height
:direction direction}))