mirror of
https://github.com/penpot/penpot.git
synced 2025-01-08 07:50:43 -05:00
42 lines
1.4 KiB
Markdown
42 lines
1.4 KiB
Markdown
|
# 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).
|