penpot/render-wasm/docs/serialization.md
Alonso Torres 83d41dba6f
Serialization of grid layout data (#6148)
*  Add serializators for grid layout properties

*  Extract serializers for wasm api module
2025-03-26 12:10:31 +01:00

278 lines
5.4 KiB
Markdown

# Serialization
## Shape Type
Shape types are serialized as `u8`:
| Value | Field |
| ----- | ------ |
| 0 | Frame |
| 1 | Group |
| 2 | Bool |
| 3 | Rect |
| 4 | Path |
| 5 | Text |
| 6 | Circle |
| 7 | SvgRaw |
| 8 | Image |
| \_ | Rect |
## Horizontal Constraint
Horizontal constraints are serialized as `u8`:
| Value | Field |
| ----- | --------- |
| 0 | Left |
| 1 | Right |
| 2 | LeftRight |
| 3 | Center |
| 4 | Scale |
| \_ | None |
## Vertical Constraint
Vertical constraints are serialized as `u8`:
| Value | Field |
| ----- | --------- |
| 0 | Top |
| 1 | Bottom |
| 2 | TopBottom |
| 3 | Center |
| 4 | Scale |
| \_ | None |
## 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 |
## Shadow Styles
Shadow styles are serialized as `u8`:
| Value | Field |
| ----- | ------------ |
| 0 | Drop Shadow |
| 1 | Inner Shadow |
| \_ | Drop Shadow |
## Layout
### Flex Direction
| Value | Field |
| ----- | ------------- |
| 0 | Row |
| 1 | RowReverse |
| 2 | Column |
| 3 | ColumnReverse |
| \_ | error |
### Grid Direction
| Value | Field |
| ----- | ------------- |
| 0 | Row |
| 1 | Column |
| \_ | error |
### Align Items
| Value | Field |
| ----- | ------- |
| 0 | Start |
| 1 | End |
| 2 | Center |
| 3 | Stretch |
| \_ | error |
### Align self
| Value | Field |
| ----- | ------- |
| 0 | Start |
| 1 | End |
| 2 | Center |
| 3 | Stretch |
| \_ | error |
### Align Content
| Value | Field |
| ----- | ------------- |
| 0 | Start |
| 1 | End |
| 2 | Center |
| 3 | Space between |
| 4 | Space around |
| 5 | Space evenly |
| 6 | Stretch |
| \_ | error |
### Justify items
| Value | Field |
| ----- | ------- |
| 0 | Start |
| 1 | End |
| 2 | Center |
| 3 | Stretch |
| \_ | error |
### Justify content
| Value | Field |
| ----- | ------------- |
| 0 | Start |
| 1 | End |
| 2 | Center |
| 3 | Space between |
| 4 | Space around |
| 5 | Space evenly |
| 6 | Stretch |
| \_ | error |
### Align Self
| Value | Field |
| ----- | ------- |
| 0 | Auto |
| 1 | Start |
| 2 | End |
| 3 | Center |
| 4 | Stretch |
| \_ | error |
### Justify Self
| Value | Field |
| ----- | ------- |
| 0 | Auto |
| 1 | Start |
| 2 | End |
| 3 | Center |
| 4 | Stretch |
| \_ | error |
### Wrap type
| Value | Field |
| ----- | ------- |
| 0 | Wrap |
| 1 | No Wrap |
| \_ | error |
### Sizing
| Value | Field |
| ----- | ----- |
| 0 | Fill |
| 1 | Fix |
| 2 | Auto |
| \_ | error |
### Grid Track Type
| Value | Field |
| ----- | ------- |
| 0 | Percent |
| 1 | Flex |
| 2 | Auto |
| 3 | Fixed |
| \_ | error |
## Font
### Style
| Value | Variant |
| ----- | ------- |
| 0 | Normal |
| 1 | Italic |
| \_ | Normal |