1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#[macro_use]
extern crate serde;
use std::ffi::CString;
use std::os::raw::c_char;
use wasm_bindgen::prelude::*;
use serde::{Serialize};
#[derive(Serialize)]
pub enum NativeMessage {
TextCreate(AnyCreatePatch),
TextUpdate(TextPatch),
TextDelete(Vec<u64>), FrameCreate(AnyCreatePatch),
FrameUpdate(FramePatch),
FrameDelete(Vec<u64>),
ScrollerCreate(AnyCreatePatch),
ScrollerUpdate(ScrollerPatch),
ScrollerDelete(Vec<u64>),
}
#[derive(Deserialize)]
#[repr(C)]
pub enum NativeInterrupt {
Click(ClickInterruptArgs),
Scroll(ScrollInterruptArgs),
}
#[repr(C)]
pub struct InterruptBuffer {
pub data_ptr: *const u8,
pub length: u64,
}
#[repr(C)]
pub struct NativeMessageQueue {
pub data_ptr: *mut [u8],
pub length: u64,
}
#[derive(Serialize)]
pub struct MessageQueue {
pub messages: Vec<NativeMessage>,
}
#[derive(Deserialize)]
#[repr(C)]
pub struct ClickInterruptArgs {
pub x: f64,
pub y: f64,
}
#[derive(Deserialize)]
#[repr(C)]
pub struct ScrollInterruptArgs {
pub id_chain: Vec<u64>,
pub delta_x: f64,
pub delta_y: f64,
}
#[derive(Default, Serialize)]
#[repr(C)]
pub struct FramePatch {
pub id_chain: Vec<u64>,
pub size_x: Option<f64>,
pub size_y: Option<f64>,
pub transform: Option<Vec<f64>>,
}
#[derive(Default, Serialize)]
#[repr(C)]
pub struct TextPatch {
pub id_chain: Vec<u64>,
pub content: Option<String>, pub transform: Option<Vec<f64>>,
pub size_x: Option<f64>,
pub size_y: Option<f64>,
pub font: FontPatch,
pub fill: Option<ColorVariantMessage>, }
#[derive(Default, Serialize)]
#[repr(C)]
pub struct FontPatch {
pub family: Option<String>,
pub variant: Option<String>,
pub size: Option<f64>,
}
#[derive(Serialize)]
#[repr(C)]
pub enum ColorVariantMessage {
Hlca([f64; 4]),
Rgba([f64; 4]),
}
impl Default for ColorVariantMessage {
fn default() -> Self {
ColorVariantMessage::Rgba([1.0,0.5,0.0,1.0])
}
}
#[derive(Default, Serialize)]
#[repr(C)]
pub struct ScrollerPatch {
pub id_chain: Vec<u64>,
pub size_frame_x: Option<f64>,
pub size_frame_y: Option<f64>,
pub size_inner_pane_x: Option<f64>,
pub size_inner_pane_y: Option<f64>,
pub transform: Option<Vec<f64>>,
pub scroll_x: Option<bool>,
pub scroll_y: Option<bool>,
}
#[derive(Serialize)]
#[repr(C)]
pub struct AnyCreatePatch {
pub id_chain: Vec<u64>,
pub clipping_ids: Vec<Vec<u64>>,
}