1 #ifndef __BROADWAY_PROTOCOL_H__
2 #define __BROADWAY_PROTOCOL_H__
3 
4 #include <glib.h>
5 
6 typedef struct  {
7     gint32 x, y;
8     gint32 width, height;
9 } BroadwayRect;
10 
11 typedef enum { /* Sync changes with broadway.js and node_type_is_container() */
12   BROADWAY_NODE_TEXTURE = 0,
13   BROADWAY_NODE_CONTAINER = 1,
14   BROADWAY_NODE_COLOR = 2,
15   BROADWAY_NODE_BORDER = 3,
16   BROADWAY_NODE_OUTSET_SHADOW = 4,
17   BROADWAY_NODE_INSET_SHADOW = 5,
18   BROADWAY_NODE_ROUNDED_CLIP = 6,
19   BROADWAY_NODE_LINEAR_GRADIENT = 7,
20   BROADWAY_NODE_SHADOW = 8,
21   BROADWAY_NODE_OPACITY = 9,
22   BROADWAY_NODE_CLIP = 10,
23   BROADWAY_NODE_TRANSFORM = 11,
24   BROADWAY_NODE_DEBUG = 12,
25   BROADWAY_NODE_REUSE = 13,
26 } BroadwayNodeType;
27 
28 typedef enum { /* Sync changes with broadway.js */
29   BROADWAY_NODE_OP_INSERT_NODE = 0,
30   BROADWAY_NODE_OP_REMOVE_NODE = 1,
31   BROADWAY_NODE_OP_MOVE_AFTER_CHILD = 2,
32   BROADWAY_NODE_OP_PATCH_TEXTURE = 3,
33   BROADWAY_NODE_OP_PATCH_TRANSFORM = 4,
34 } BroadwayNodeOpType;
35 
36 static const char *broadway_node_type_names[] G_GNUC_UNUSED =  {
37   "TEXTURE",
38   "CONTAINER",
39   "COLOR",
40   "BORDER",
41   "OUTSET_SHADOW",
42   "INSET_SHADOW",
43   "ROUNDED_CLIP",
44   "LINEAR_GRADIENT",
45   "SHADOW",
46   "OPACITY",
47   "CLIP",
48   "TRANSFORM",
49   "DEBUG",
50   "REUSE",
51 };
52 
53 typedef enum {
54   BROADWAY_EVENT_ENTER = 0,
55   BROADWAY_EVENT_LEAVE = 1,
56   BROADWAY_EVENT_POINTER_MOVE = 2,
57   BROADWAY_EVENT_BUTTON_PRESS = 3,
58   BROADWAY_EVENT_BUTTON_RELEASE = 4,
59   BROADWAY_EVENT_TOUCH = 5,
60   BROADWAY_EVENT_SCROLL = 6,
61   BROADWAY_EVENT_KEY_PRESS = 7,
62   BROADWAY_EVENT_KEY_RELEASE = 8,
63   BROADWAY_EVENT_GRAB_NOTIFY = 9,
64   BROADWAY_EVENT_UNGRAB_NOTIFY = 10,
65   BROADWAY_EVENT_CONFIGURE_NOTIFY = 11,
66   BROADWAY_EVENT_SCREEN_SIZE_CHANGED = 12,
67   BROADWAY_EVENT_FOCUS = 13,
68   BROADWAY_EVENT_ROUNDTRIP_NOTIFY = 14,
69 } BroadwayEventType;
70 
71 typedef enum {
72   BROADWAY_OP_GRAB_POINTER = 0,
73   BROADWAY_OP_UNGRAB_POINTER = 1,
74   BROADWAY_OP_NEW_SURFACE = 2,
75   BROADWAY_OP_SHOW_SURFACE = 3,
76   BROADWAY_OP_HIDE_SURFACE = 4,
77   BROADWAY_OP_RAISE_SURFACE = 5,
78   BROADWAY_OP_LOWER_SURFACE = 6,
79   BROADWAY_OP_DESTROY_SURFACE = 7,
80   BROADWAY_OP_MOVE_RESIZE = 8,
81   BROADWAY_OP_SET_TRANSIENT_FOR = 9,
82   BROADWAY_OP_DISCONNECTED = 10,
83   BROADWAY_OP_SURFACE_UPDATE = 11,
84   BROADWAY_OP_SET_SHOW_KEYBOARD = 12,
85   BROADWAY_OP_UPLOAD_TEXTURE = 13,
86   BROADWAY_OP_RELEASE_TEXTURE = 14,
87   BROADWAY_OP_SET_NODES = 15,
88   BROADWAY_OP_ROUNDTRIP = 16,
89 } BroadwayOpType;
90 
91 typedef struct {
92   guint32 type;
93   guint32 serial;
94   guint64 time;
95 } BroadwayInputBaseMsg;
96 
97 typedef struct {
98   BroadwayInputBaseMsg base;
99   guint32 mouse_surface_id; /* The real surface, not taking grabs into account */
100   guint32 event_surface_id;
101   gint32 root_x;
102   gint32 root_y;
103   gint32 win_x;
104   gint32 win_y;
105   guint32 state;
106 } BroadwayInputPointerMsg;
107 
108 typedef struct {
109   BroadwayInputPointerMsg pointer;
110   guint32 mode;
111 } BroadwayInputCrossingMsg;
112 
113 typedef struct {
114   BroadwayInputPointerMsg pointer;
115   guint32 button;
116 } BroadwayInputButtonMsg;
117 
118 typedef struct {
119   BroadwayInputPointerMsg pointer;
120   gint32 dir;
121 } BroadwayInputScrollMsg;
122 
123 typedef struct {
124   BroadwayInputBaseMsg base;
125   guint32 touch_type;
126   guint32 event_surface_id;
127   guint32 sequence_id;
128   guint32 is_emulated;
129   gint32 root_x;
130   gint32 root_y;
131   gint32 win_x;
132   gint32 win_y;
133   guint32 state;
134 } BroadwayInputTouchMsg;
135 
136 typedef struct {
137   BroadwayInputBaseMsg base;
138   guint32 surface_id;
139   guint32 state;
140   gint32 key;
141 } BroadwayInputKeyMsg;
142 
143 typedef struct {
144   BroadwayInputBaseMsg base;
145   gint32 res;
146 } BroadwayInputGrabReply;
147 
148 typedef struct {
149   BroadwayInputBaseMsg base;
150   gint32 id;
151   gint32 x;
152   gint32 y;
153   gint32 width;
154   gint32 height;
155 } BroadwayInputConfigureNotify;
156 
157 typedef struct {
158   BroadwayInputBaseMsg base;
159   gint32 id;
160   guint32 tag;
161   guint32 local;
162 } BroadwayInputRoundtripNotify;
163 
164 typedef struct {
165   BroadwayInputBaseMsg base;
166   guint32 width;
167   guint32 height;
168   guint32 scale;
169 } BroadwayInputScreenResizeNotify;
170 
171 typedef struct {
172   BroadwayInputBaseMsg base;
173   gint32 id;
174 } BroadwayInputDeleteNotify;
175 
176 typedef struct {
177   BroadwayInputBaseMsg base;
178   gint32 new_id;
179   gint32 old_id;
180 } BroadwayInputFocusMsg;
181 
182 typedef union {
183   BroadwayInputBaseMsg base;
184   BroadwayInputPointerMsg pointer;
185   BroadwayInputCrossingMsg crossing;
186   BroadwayInputButtonMsg button;
187   BroadwayInputScrollMsg scroll;
188   BroadwayInputTouchMsg touch;
189   BroadwayInputKeyMsg key;
190   BroadwayInputGrabReply grab_reply;
191   BroadwayInputConfigureNotify configure_notify;
192   BroadwayInputRoundtripNotify roundtrip_notify;
193   BroadwayInputDeleteNotify delete_notify;
194   BroadwayInputScreenResizeNotify screen_resize_notify;
195   BroadwayInputFocusMsg focus;
196 } BroadwayInputMsg;
197 
198 typedef enum {
199   BROADWAY_REQUEST_NEW_SURFACE,
200   BROADWAY_REQUEST_FLUSH,
201   BROADWAY_REQUEST_SYNC,
202   BROADWAY_REQUEST_QUERY_MOUSE,
203   BROADWAY_REQUEST_DESTROY_SURFACE,
204   BROADWAY_REQUEST_SHOW_SURFACE,
205   BROADWAY_REQUEST_HIDE_SURFACE,
206   BROADWAY_REQUEST_SET_TRANSIENT_FOR,
207   BROADWAY_REQUEST_MOVE_RESIZE,
208   BROADWAY_REQUEST_GRAB_POINTER,
209   BROADWAY_REQUEST_UNGRAB_POINTER,
210   BROADWAY_REQUEST_FOCUS_SURFACE,
211   BROADWAY_REQUEST_SET_SHOW_KEYBOARD,
212   BROADWAY_REQUEST_UPLOAD_TEXTURE,
213   BROADWAY_REQUEST_RELEASE_TEXTURE,
214   BROADWAY_REQUEST_SET_NODES,
215   BROADWAY_REQUEST_ROUNDTRIP,
216 } BroadwayRequestType;
217 
218 typedef struct {
219   guint32 size;
220   guint32 serial;
221   guint32 type;
222 } BroadwayRequestBase, BroadwayRequestFlush, BroadwayRequestSync, BroadwayRequestQueryMouse;
223 
224 typedef struct {
225   BroadwayRequestBase base;
226   guint32 id;
227 } BroadwayRequestDestroySurface, BroadwayRequestShowSurface, BroadwayRequestHideSurface, BroadwayRequestFocusSurface;
228 
229 typedef struct {
230   BroadwayRequestBase base;
231   guint32 id;
232   guint32 tag;
233 } BroadwayRequestRoundtrip;
234 
235 typedef struct {
236   BroadwayRequestBase base;
237   guint32 id;
238   guint32 parent;
239 } BroadwayRequestSetTransientFor;
240 
241 typedef struct {
242   BroadwayRequestBase base;
243   guint32 id;
244   guint32 offset;
245   guint32 size;
246 } BroadwayRequestUploadTexture;
247 
248 typedef struct {
249   BroadwayRequestBase base;
250   guint32 id;
251 } BroadwayRequestReleaseTexture;
252 
253 typedef struct {
254   BroadwayRequestBase base;
255   guint32 id;
256   guint32 data[1];
257 } BroadwayRequestSetNodes;
258 
259 
260 typedef struct {
261   BroadwayRequestBase base;
262   guint32 id;
263   guint32 owner_events;
264   guint32 event_mask;
265   guint32 time_;
266 } BroadwayRequestGrabPointer;
267 
268 typedef struct {
269   BroadwayRequestBase base;
270   guint32 time_;
271 } BroadwayRequestUngrabPointer;
272 
273 typedef struct {
274   BroadwayRequestBase base;
275   gint32 x;
276   gint32 y;
277   guint32 width;
278   guint32 height;
279 } BroadwayRequestNewSurface;
280 
281 typedef struct {
282   BroadwayRequestBase base;
283   guint32 id;
284   guint32 with_move;
285   gint32 x;
286   gint32 y;
287   guint32 width;
288   guint32 height;
289 } BroadwayRequestMoveResize;
290 
291 typedef struct {
292   BroadwayRequestBase base;
293   guint32 show_keyboard;
294 } BroadwayRequestSetShowKeyboard;
295 
296 typedef union {
297   BroadwayRequestBase base;
298   BroadwayRequestNewSurface new_surface;
299   BroadwayRequestFlush flush;
300   BroadwayRequestSync sync;
301   BroadwayRequestRoundtrip roundtrip;
302   BroadwayRequestQueryMouse query_mouse;
303   BroadwayRequestDestroySurface destroy_surface;
304   BroadwayRequestShowSurface show_surface;
305   BroadwayRequestHideSurface hide_surface;
306   BroadwayRequestSetTransientFor set_transient_for;
307   BroadwayRequestMoveResize move_resize;
308   BroadwayRequestGrabPointer grab_pointer;
309   BroadwayRequestUngrabPointer ungrab_pointer;
310   BroadwayRequestFocusSurface focus_surface;
311   BroadwayRequestSetShowKeyboard set_show_keyboard;
312   BroadwayRequestUploadTexture upload_texture;
313   BroadwayRequestReleaseTexture release_texture;
314   BroadwayRequestSetNodes set_nodes;
315 } BroadwayRequest;
316 
317 typedef enum {
318   BROADWAY_REPLY_EVENT,
319   BROADWAY_REPLY_SYNC,
320   BROADWAY_REPLY_QUERY_MOUSE,
321   BROADWAY_REPLY_NEW_SURFACE,
322   BROADWAY_REPLY_GRAB_POINTER,
323   BROADWAY_REPLY_UNGRAB_POINTER
324 } BroadwayReplyType;
325 
326 typedef struct {
327   guint32 size;
328   guint32 in_reply_to;
329   guint32 type;
330 } BroadwayReplyBase, BroadwayReplySync;
331 
332 typedef struct {
333   BroadwayReplyBase base;
334   guint32 id;
335 } BroadwayReplyNewSurface;
336 
337 typedef struct {
338   BroadwayReplyBase base;
339   guint32 status;
340 } BroadwayReplyGrabPointer, BroadwayReplyUngrabPointer;
341 
342 typedef struct {
343   BroadwayReplyBase base;
344   guint32 surface;
345   gint32 root_x;
346   gint32 root_y;
347   guint32 mask;
348 } BroadwayReplyQueryMouse;
349 
350 typedef struct {
351   BroadwayReplyBase base;
352   BroadwayInputMsg msg;
353 } BroadwayReplyEvent;
354 
355 typedef union {
356   BroadwayReplyBase base;
357   BroadwayReplyEvent event;
358   BroadwayReplyQueryMouse query_mouse;
359   BroadwayReplyNewSurface new_surface;
360   BroadwayReplyGrabPointer grab_pointer;
361   BroadwayReplyUngrabPointer ungrab_pointer;
362 } BroadwayReply;
363 
364 #endif /* __BROADWAY_PROTOCOL_H__ */
365