;; 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.serializers (:require [app.common.uuid :as uuid] [cuerdas.core :as str])) (defn u8 [value] (let [u8-arr (js/Uint8Array. 1)] (aset u8-arr 0 value) u8-arr)) (defn f32->u8 [value] (let [f32-arr (js/Float32Array. 1)] (aset f32-arr 0 value) (js/Uint8Array. (.-buffer f32-arr)))) (defn i32->u8 [value] (let [i32-arr (js/Int32Array. 1)] (aset i32-arr 0 value) (js/Uint8Array. (.-buffer i32-arr)))) (defn bool->u8 [value] (let [result (js/Uint8Array. 1)] (aset result 0 (if value 1 0)) result)) (defn uuid->u8 [id] (let [buffer (uuid/get-u32 id) u32-arr (js/Uint32Array. 4)] (aset u32-arr 0 (aget buffer 0)) (aset u32-arr 1 (aget buffer 1)) (aset u32-arr 2 (aget buffer 2)) (aset u32-arr 3 (aget buffer 3)) (js/Uint8Array. (.-buffer u32-arr)))) (defn matrix->u8 [{:keys [a b c d e f]}] (let [f32-arr (js/Float32Array. 6)] (aset f32-arr 0 a) (aset f32-arr 1 b) (aset f32-arr 2 c) (aset f32-arr 3 d) (aset f32-arr 4 e) (aset f32-arr 5 f) (js/Uint8Array. (.-buffer f32-arr)))) (defn translate-shape-type [type] (case type :frame 0 :group 1 :bool 2 :rect 3 :path 4 :text 5 :circle 6 :svg-raw 7 :image 8)) (defn translate-stroke-style [stroke-style] (case stroke-style :dotted 1 :dashed 2 :mixed 3 0)) (defn translate-stroke-cap [stroke-cap] (case stroke-cap :line-arrow 1 :triangle-arrow 2 :square-marker 3 :circle-marker 4 :diamond-marker 5 :round 6 :square 7 0)) (defn serialize-path-attrs [svg-attrs] (reduce (fn [acc [key value]] (str/concat acc (str/kebab key) "\0" value "\0")) "" svg-attrs)) (defn translate-blend-mode [blend-mode] (case blend-mode :normal 3 :darken 16 :multiply 24 :color-burn 19 :lighten 17 :screen 14 :color-dodge 18 :overlay 15 :soft-light 21 :hard-light 20 :difference 22 :exclusion 23 :hue 25 :saturation 26 :color 27 :luminosity 28 3)) (defn translate-constraint-h [type] (case type :left 0 :right 1 :leftright 2 :center 3 :scale 4)) (defn translate-constraint-v [type] (case type :top 0 :bottom 1 :topbottom 2 :center 3 :scale 4)) (defn translate-bool-type [bool-type] (case bool-type :union 0 :difference 1 :intersection 2 :exclusion 3 0)) (defn translate-blur-type [blur-type] (case blur-type :layer-blur 1 0)) (defn translate-layout-flex-dir [flex-dir] (case flex-dir :row 0 :row-reverse 1 :column 2 :column-reverse 3)) (defn translate-layout-grid-dir [flex-dir] (case flex-dir :row 0 :column 1)) (defn translate-layout-align-items [align-items] (case align-items :start 0 :end 1 :center 2 :stretch 3)) (defn translate-layout-align-content [align-content] (case align-content :start 0 :end 1 :center 2 :space-between 3 :space-around 4 :space-evenly 5 :stretch 6)) (defn translate-layout-justify-items [justify-items] (case justify-items :start 0 :end 1 :center 2 :stretch 3)) (defn translate-layout-justify-content [justify-content] (case justify-content :start 0 :end 1 :center 2 :space-between 3 :space-around 4 :space-evenly 5 :stretch 6)) (defn translate-layout-wrap-type [wrap-type] (case wrap-type :wrap 0 :nowrap 1)) (defn translate-grid-track-type [type] (case type :percent 0 :flex 1 :auto 2 :fixed 3)) (defn translate-layout-sizing [value] (case value :fill 0 :fix 1 :auto 2)) (defn translate-align-self [value] (when value (case value :auto 0 :start 1 :end 2 :center 3 :stretch 4))) (defn translate-justify-self [value] (when value (case value :auto 0 :start 1 :end 2 :center 3 :stretch 4))) (defn translate-shadow-style [style] (case style :drop-shadow 0 :inner-shadow 1 0))