wlmaker
Loading...
Searching...
No Matches
element.h
Go to the documentation of this file.
1/* ========================================================================= */
20#ifndef __WLMTK_ELEMENT_H__
21#define __WLMTK_ELEMENT_H__
22
23#include <libbase/libbase.h>
24#include <stdbool.h>
25#include <stddef.h>
26#include <stdint.h>
27#include <wayland-server-core.h>
28#include <xkbcommon/xkbcommon.h>
29
30#define WLR_USE_UNSTABLE
31#include <wlr/util/box.h>
32#undef WLR_USE_UNSTABLE
33
34struct _wlmtk_element_t;
36struct wlr_scene_tree;
37
42
46struct wlr_keyboard_key_event;
47
48#include "input.h"
49
50#define WLR_USE_UNSTABLE
51#include <wlr/types/wlr_pointer.h>
52#undef WLR_USE_UNSTABLE
53
54#ifdef __cplusplus
55extern "C" {
56#endif // __cplusplus
57
59typedef struct {
61 struct wl_signal pointer_enter;
63 struct wl_signal pointer_leave;
65
69 void (*destroy)(wlmtk_element_t *element_ptr);
70
72 struct wlr_scene_node *(*create_scene_node)(
73 wlmtk_element_t *element_ptr,
74 struct wlr_scene_tree *wlr_scene_tree_ptr);
75
78 wlmtk_element_t *element_ptr,
79 int *x1_ptr,
80 int *y1_ptr,
81 int *x2_ptr,
82 int *y2_ptr);
83
86 wlmtk_element_t *element_ptr,
87 int *left_ptr,
88 int *top_ptr,
89 int *right_ptr,
90 int *bottom_ptr);
91
109 bool (*pointer_motion)(wlmtk_element_t *element_ptr,
110 wlmtk_pointer_motion_event_t *motion_event_ptr);
111
120 bool (*pointer_button)(wlmtk_element_t *element_ptr,
121 const wlmtk_button_event_t *button_event_ptr);
122
132 wlmtk_element_t *element_ptr,
133 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr);
134
146
153 void (*keyboard_blur)(wlmtk_element_t *element_ptr);
154
167 wlmtk_element_t *element_ptr,
168 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr,
169 const xkb_keysym_t *key_syms,
170 size_t key_syms_count,
171 uint32_t modifiers);
172};
173
216
224bool wlmtk_element_init(wlmtk_element_t *element_ptr);
225
235 wlmtk_element_t *element_ptr,
236 const wlmtk_element_vmt_t *element_vmt_ptr);
237
244 wlmtk_element_t *element_ptr);
245
247bs_dllist_node_t *wlmtk_dlnode_from_element(
248 wlmtk_element_t *element_ptr);
251 bs_dllist_node_t *dlnode_ptr);
252
267 wlmtk_element_t *element_ptr,
268 wlmtk_container_t *parent_container_ptr);
269
287 wlmtk_element_t *element_ptr);
288
295void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible);
296
305 wlmtk_element_t *element_ptr,
306 int *x_ptr,
307 int *y_ptr);
308
317 wlmtk_element_t *element_ptr,
318 int x,
319 int y);
320
335 wlmtk_element_t *element_ptr,
336 int *x1_ptr,
337 int *y1_ptr,
338 int *x2_ptr,
339 int *y2_ptr)
340{
341 element_ptr->vmt.get_pointer_area(
342 element_ptr, x1_ptr, y1_ptr, x2_ptr, y2_ptr);
343}
344
355 wlmtk_element_t *element_ptr,
356 int *left_ptr,
357 int *top_ptr,
358 int *right_ptr,
359 int *bottom_ptr)
360{
361 element_ptr->vmt.get_dimensions(
362 element_ptr, left_ptr, top_ptr, right_ptr, bottom_ptr);
363}
364
373static inline struct wlr_box wlmtk_element_get_dimensions_box(
374 wlmtk_element_t *element_ptr)
375{
376 struct wlr_box box;
377 element_ptr->vmt.get_dimensions(
378 element_ptr, &box.x, &box.y, &box.width, &box.height);
379 box.width += box.x;
380 box.height += box.y;
381 return box;
382}
383
395 wlmtk_element_t *element_ptr,
396 wlmtk_pointer_motion_event_t *pointer_motion_ptr);
397
400 wlmtk_element_t *element_ptr,
401 const wlmtk_button_event_t *button_event_ptr)
402{
403 return element_ptr->vmt.pointer_button(element_ptr, button_event_ptr);
404}
405
407static inline bool wlmtk_element_pointer_axis(
408 wlmtk_element_t *element_ptr,
409 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
410{
411 return element_ptr->vmt.pointer_axis(
412 element_ptr, wlr_pointer_axis_event_ptr);
413}
414
417 wlmtk_element_t *element_ptr)
418{
419 if (NULL != element_ptr->vmt.pointer_grab_cancel) {
420 element_ptr->vmt.pointer_grab_cancel(element_ptr);
421 }
422}
423
426 wlmtk_element_t *element_ptr,
427 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr,
428 const xkb_keysym_t *key_syms,
429 size_t key_syms_count,
430 uint32_t modifiers)
431{
432 return element_ptr->vmt.keyboard_event(
433 element_ptr, wlr_keyboard_key_event_ptr,
434 key_syms, key_syms_count, modifiers);
435}
436
439 wlmtk_element_t *element_ptr)
440{
441 element_ptr->vmt.keyboard_blur(element_ptr);
442}
443
451static inline void wlmtk_element_destroy(
452 wlmtk_element_t *element_ptr) {
453 element_ptr->vmt.destroy(element_ptr);
454}
455
457extern const bs_test_case_t wlmtk_element_test_cases[];
458
487
496
504
505#ifdef __cplusplus
506} // extern "C"
507#endif // __cplusplus
508
509#endif /* __WLMTK_ELEMENT_H__ */
510/* == End of element.h ===================================================== */
void wlmtk_fake_element_grab_keyboard(wlmtk_fake_element_t *fake_element_ptr)
Definition element.c:444
bool wlmtk_element_init(wlmtk_element_t *element_ptr)
Definition element.c:80
wlmtk_fake_element_t * wlmtk_fake_element_create(void)
Definition element.c:426
static void wlmtk_element_get_dimensions(wlmtk_element_t *element_ptr, int *left_ptr, int *top_ptr, int *right_ptr, int *bottom_ptr)
Definition element.h:354
static bool wlmtk_element_pointer_axis(wlmtk_element_t *element_ptr, struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
Definition element.h:407
static bool wlmtk_element_pointer_button(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.h:399
void wlmtk_element_fini(wlmtk_element_t *element_ptr)
Definition element.c:137
bool wlmtk_element_pointer_motion(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *pointer_motion_ptr)
Definition element.c:269
bs_dllist_node_t * wlmtk_dlnode_from_element(wlmtk_element_t *element_ptr)
Definition element.c:148
static struct wlr_box wlmtk_element_get_dimensions_box(wlmtk_element_t *element_ptr)
Definition element.h:373
static void wlmtk_element_destroy(wlmtk_element_t *element_ptr)
Definition element.h:451
const bs_test_case_t wlmtk_element_test_cases[]
Definition element.c:604
wlmtk_element_t * wlmtk_element_from_dlnode(bs_dllist_node_t *dlnode_ptr)
Definition element.c:155
void wlmtk_element_attach_to_scene_graph(wlmtk_element_t *element_ptr)
Definition element.c:172
wlmtk_element_vmt_t wlmtk_element_extend(wlmtk_element_t *element_ptr, const wlmtk_element_vmt_t *element_vmt_ptr)
Definition element.c:94
void wlmtk_element_set_position(wlmtk_element_t *element_ptr, int x, int y)
Definition element.c:248
void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible)
Definition element.c:216
void wlmtk_element_set_parent_container(wlmtk_element_t *element_ptr, wlmtk_container_t *parent_container_ptr)
Definition element.c:162
static bool wlmtk_element_keyboard_event(wlmtk_element_t *element_ptr, struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr, const xkb_keysym_t *key_syms, size_t key_syms_count, uint32_t modifiers)
Definition element.h:425
void wlmtk_element_get_position(wlmtk_element_t *element_ptr, int *x_ptr, int *y_ptr)
Definition element.c:232
static void wlmtk_element_get_pointer_area(wlmtk_element_t *element_ptr, int *x1_ptr, int *y1_ptr, int *x2_ptr, int *y2_ptr)
Definition element.h:334
static void wlmtk_element_keyboard_blur(wlmtk_element_t *element_ptr)
Definition element.h:438
static void wlmtk_element_pointer_grab_cancel(wlmtk_element_t *element_ptr)
Definition element.h:416
Definition input.h:63
Definition container.h:60
Definition element.h:175
wlmtk_element_vmt_t vmt
Definition element.h:197
bool pointer_inside
Definition element.h:214
bool visible
Definition element.h:205
bs_dllist_node_t dlnode
Definition element.h:194
int y
Definition element.h:189
struct wlr_scene_node * wlr_scene_node_ptr
Definition element.h:202
struct wl_listener wlr_scene_node_destroy_listener
Definition element.h:208
wlmtk_pointer_motion_event_t last_pointer_motion_event
Definition element.h:211
wlmtk_container_t * parent_container_ptr
Definition element.h:192
wlmtk_element_events_t events
Definition element.h:199
int x
Definition element.h:183
Definition element.h:67
void(* pointer_grab_cancel)(wlmtk_element_t *element_ptr)
Definition element.h:145
void(* get_dimensions)(wlmtk_element_t *element_ptr, int *x1_ptr, int *y1_ptr, int *x2_ptr, int *y2_ptr)
Definition element.h:77
void(* keyboard_blur)(wlmtk_element_t *element_ptr)
Definition element.h:153
bool(* pointer_motion)(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *motion_event_ptr)
Definition element.h:109
bool(* keyboard_event)(wlmtk_element_t *element_ptr, struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr, const xkb_keysym_t *key_syms, size_t key_syms_count, uint32_t modifiers)
Definition element.h:166
bool(* pointer_button)(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.h:120
bool(* pointer_axis)(wlmtk_element_t *element_ptr, struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
Definition element.h:131
void(* destroy)(wlmtk_element_t *element_ptr)
Definition element.h:69
void(* get_pointer_area)(wlmtk_element_t *element_ptr, int *left_ptr, int *top_ptr, int *right_ptr, int *bottom_ptr)
Definition element.h:85
Definition element.h:59
Definition element.h:460
bool pointer_grab_cancel_called
Definition element.h:478
bool keyboard_event_called
Definition element.h:482
bool has_keyboard_focus
Definition element.h:480
bool pointer_button_called
Definition element.h:472
wlmtk_element_vmt_t orig_vmt
Definition element.h:464
bool pointer_axis_called
Definition element.h:476
bool pointer_motion_called
Definition element.h:469
wlmtk_element_t element
Definition element.h:462
wlmtk_button_event_t pointer_button_event
Definition element.h:474
Definition input.h:73