0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-23 23:18:48 -05:00
penpot/render-wasm/docs/serialization.md
2025-01-13 07:48:11 +01:00

2.3 KiB

Serialization

Paths

Paths are made of segments of 28 bytes each. The layout (assuming positions in a Uint8Array) is the following:

Offset Length (bytes) Data Type Field
0 2 u16 Command
2 2 u16 Flags
4 4 f32 c1_x
8 4 f32 c1_y
12 4 f32 c2_x
16 4 f32 c2_y
20 4 f32 x
24 4 f32 y

Command can be one of these values:

  • :move-to: 1
  • :line-to: 2
  • :curve-to: 3
  • :close-path: 4

Flags is not being used at the moment.

Gradient stops

Gradient stops are serialized in a Uint8Array, each stop taking 5 bytes.

Offset Length (bytes) Data Type Field
0 1 u8 Red
1 1 u8 Green
2 1 u8 Blue
3 1 u8 Alpha
4 1 u8 Stop Offset

Red, Green, Blue and Alpha are the RGBA components of the stop.

Stop offset is the offset, being integer values ranging from 0 to 100 (both inclusive).

Stroke Caps

Stroke caps are serialized as u8:

Value Field
1 Line
2 Triangle
3 Rectangle
4 Circle
5 Diamond
6 Round
7 Square
_ None

Stroke Sytles

Stroke styles are serialized as u8:

Value Field
1 Dotted
2 Dashed
3 Mixed
_ Solid

Bool Operations

Bool operations (bool-type) are serialized as u8:

Value Field
0 Union
1 Difference
2 Intersection
3 Exclusion
_ Union

BlurType

Blur types are serialized as u8:

Value Field
1 Layer
_ None