mirror of
https://github.com/penpot/penpot.git
synced 2025-05-28 22:06:13 +02:00
✨ Embed stop data into RawGradientData
This commit is contained in:
parent
e7b74939cb
commit
281c0068d9
3 changed files with 69 additions and 38 deletions
|
@ -223,7 +223,7 @@
|
|||
(h/call wasm/internal-module "_add_shape_solid_fill" rgba))
|
||||
|
||||
(some? gradient)
|
||||
(let [size (sr-fills/gradient-byte-size gradient)
|
||||
(let [size sr-fills/GRADIENT-BYTE-SIZE
|
||||
offset (mem/alloc-bytes size)
|
||||
heap (mem/get-heap-u32)]
|
||||
(sr-fills/write-gradient-fill! offset heap gradient opacity)
|
||||
|
@ -269,7 +269,7 @@
|
|||
|
||||
(cond
|
||||
(some? gradient)
|
||||
(let [size (sr-fills/gradient-byte-size gradient)
|
||||
(let [size sr-fills/GRADIENT-BYTE-SIZE
|
||||
offset (mem/alloc-bytes size)
|
||||
heap (mem/get-heap-u32)]
|
||||
(sr-fills/write-gradient-fill! offset heap gradient opacity)
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
(:require
|
||||
[app.render-wasm.serializers.color :as clr]))
|
||||
|
||||
(def GRADIENT-STOP-SIZE 8)
|
||||
(def GRADIENT-BASE-SIZE 24)
|
||||
(def ^:private GRADIENT-STOP-SIZE 8)
|
||||
(def ^:private GRADIENT-BASE-SIZE 28)
|
||||
;; TODO: Define in shape model
|
||||
(def ^:private MAX-GRADIENT-STOPS 8)
|
||||
|
||||
(defn gradient-byte-size
|
||||
[gradient]
|
||||
(let [stops (:stops gradient)]
|
||||
(+ GRADIENT-BASE-SIZE (* (count stops) GRADIENT-STOP-SIZE))))
|
||||
(def GRADIENT-BYTE-SIZE
|
||||
(+ GRADIENT-BASE-SIZE (* MAX-GRADIENT-STOPS GRADIENT-STOP-SIZE)))
|
||||
|
||||
(defn write-gradient-fill!
|
||||
[offset heap gradient opacity]
|
||||
|
@ -18,13 +18,14 @@
|
|||
end-x (:end-x gradient)
|
||||
end-y (:end-y gradient)
|
||||
width (or (:width gradient) 0)
|
||||
stops (:stops gradient)]
|
||||
stops (take MAX-GRADIENT-STOPS (:stops gradient))]
|
||||
(.setFloat32 dview offset start-x true)
|
||||
(.setFloat32 dview (+ offset 4) start-y true)
|
||||
(.setFloat32 dview (+ offset 8) end-x true)
|
||||
(.setFloat32 dview (+ offset 12) end-y true)
|
||||
(.setFloat32 dview (+ offset 16) opacity true)
|
||||
(.setFloat32 dview (+ offset 20) width true)
|
||||
(.setUint32 dview (+ offset 24) (count stops) true)
|
||||
(loop [stops (seq stops) offset (+ offset GRADIENT-BASE-SIZE)]
|
||||
(if (empty? stops)
|
||||
offset
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue