wlmaker
Loading...
Searching...
No Matches
element.h
Go to the documentation of this file.
1/* ========================================================================= */
21#ifndef __WLMTK_ELEMENT_H__
22#define __WLMTK_ELEMENT_H__
23
24#include <libbase/libbase.h>
25#include <stdbool.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 wlr_scene_tree;
35
40
44struct wlr_keyboard_key_event;
45
46#include "input.h"
47
48#define WLR_USE_UNSTABLE
49#include <wlr/types/wlr_pointer.h>
50#undef WLR_USE_UNSTABLE
51
52#ifdef __cplusplus
53extern "C" {
54#endif // __cplusplus
55
57typedef struct {
59 struct wl_signal pointer_enter;
61 struct wl_signal pointer_leave;
63 struct wl_signal pointer_motion;
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
97 wlmtk_element_t *element_ptr,
98 wlmtk_pointer_motion_event_t *motion_event_ptr);
99
111
121 wlmtk_element_t *element_ptr,
122 const wlmtk_button_event_t *button_event_ptr);
123
133 wlmtk_element_t *element_ptr,
134 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr);
135
142 void (*keyboard_blur)(wlmtk_element_t *element_ptr);
143
156 wlmtk_element_t *element_ptr,
157 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr);
158
174 wlmtk_element_t *element_ptr,
175 xkb_keysym_t keysym,
176 enum xkb_key_direction direction,
177 uint32_t modifiers);
178
184 void (*layout)(wlmtk_element_t *element_ptr);
185};
186
233
241bool wlmtk_element_init(wlmtk_element_t *element_ptr);
242
252 wlmtk_element_t *element_ptr,
253 const wlmtk_element_vmt_t *element_vmt_ptr);
254
261 wlmtk_element_t *element_ptr);
262
264bs_dllist_node_t *wlmtk_dlnode_from_element(
265 wlmtk_element_t *element_ptr);
268 bs_dllist_node_t *dlnode_ptr);
269
284 wlmtk_element_t *element_ptr,
285 wlmtk_container_t *parent_container_ptr);
286
304 wlmtk_element_t *element_ptr);
305
312void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible);
313
316
325 wlmtk_element_t *element_ptr,
326 int *x_ptr,
327 int *y_ptr);
328
337 wlmtk_element_t *element_ptr,
338 int x,
339 int y);
340
351 wlmtk_element_t *element_ptr,
352 int *left_ptr,
353 int *top_ptr,
354 int *right_ptr,
355 int *bottom_ptr)
356{
357 element_ptr->vmt.get_dimensions(
358 element_ptr, left_ptr, top_ptr, right_ptr, bottom_ptr);
359}
360
369static inline struct wlr_box wlmtk_element_get_dimensions_box(
370 wlmtk_element_t *element_ptr)
371{
372 struct wlr_box box;
373 element_ptr->vmt.get_dimensions(
374 element_ptr, &box.x, &box.y, &box.width, &box.height);
375 box.width -= box.x;
376 box.height -= box.y;
377 return box;
378}
379
391 wlmtk_element_t *element_ptr,
392 wlmtk_pointer_motion_event_t *pointer_motion_ptr);
393
403 wlmtk_element_t *element_ptr,
404 const wlmtk_button_event_t *button_event_ptr);
405
415 wlmtk_element_t *element_ptr,
416 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr);
417
431 wlmtk_element_t *element_ptr,
432 wlmtk_pointer_motion_event_t *motion_event_ptr);
433
443
450
453 wlmtk_element_t *element_ptr)
454{
455 element_ptr->vmt.keyboard_blur(element_ptr);
456}
457
460 wlmtk_element_t *element_ptr,
461 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr)
462{
463 return element_ptr->vmt.keyboard_event(
464 element_ptr, wlr_keyboard_key_event_ptr);
465}
466
468static inline bool wlmtk_element_keyboard_sym(
469 wlmtk_element_t *element_ptr,
470 xkb_keysym_t keysym,
471 enum xkb_key_direction direction,
472 uint32_t modifiers)
473{
474 return element_ptr->vmt.keyboard_sym(
475 element_ptr, keysym, direction, modifiers);
476}
477
479static inline void wlmtk_element_layout(wlmtk_element_t *element_ptr)
480{
481 element_ptr->vmt.layout(element_ptr);
482}
483
491static inline void wlmtk_element_destroy(
492 wlmtk_element_t *element_ptr) {
493 element_ptr->vmt.destroy(element_ptr);
494}
495
497extern const bs_test_set_t wlmtk_element_test_set;
498
531
540
550 wlmtk_fake_element_t *fake_element_ptr,
551 int width, int height);
552
560
561#ifdef __cplusplus
562} // extern "C"
563#endif // __cplusplus
564
565#endif /* __WLMTK_ELEMENT_H__ */
566/* == End of element.h ===================================================== */
void wlmtk_element_invalidate_parent_layout(wlmtk_element_t *element_ptr)
Definition element.c:229
void wlmtk_fake_element_grab_keyboard(wlmtk_fake_element_t *fake_element_ptr)
Definition element.c:516
bool wlmtk_element_init(wlmtk_element_t *element_ptr)
Definition element.c:74
wlmtk_fake_element_t * wlmtk_fake_element_create(void)
Definition element.c:488
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:350
void wlmtk_element_fini(wlmtk_element_t *element_ptr)
Definition element.c:136
void wlmtk_element_pointer_grab_cancel(wlmtk_element_t *element_ptr)
Definition element.c:356
const bs_test_set_t wlmtk_element_test_set
Definition element.c:693
bool wlmtk_element_pointer_motion(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *pointer_motion_ptr)
Definition element.c:272
bs_dllist_node_t * wlmtk_dlnode_from_element(wlmtk_element_t *element_ptr)
Definition element.c:147
static struct wlr_box wlmtk_element_get_dimensions_box(wlmtk_element_t *element_ptr)
Definition element.h:369
static void wlmtk_element_destroy(wlmtk_element_t *element_ptr)
Definition element.h:491
bool wlmtk_element_pointer_focus(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *motion_event_ptr)
Definition element.c:318
wlmtk_element_t * wlmtk_element_from_dlnode(bs_dllist_node_t *dlnode_ptr)
Definition element.c:154
void wlmtk_element_attach_to_scene_graph(wlmtk_element_t *element_ptr)
Definition element.c:171
static bool wlmtk_element_keyboard_sym(wlmtk_element_t *element_ptr, xkb_keysym_t keysym, enum xkb_key_direction direction, uint32_t modifiers)
Definition element.h:468
bool wlmtk_element_pointer_button(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.c:300
void wlmtk_element_pointer_blur(wlmtk_element_t *element_ptr)
Definition element.c:341
wlmtk_element_vmt_t wlmtk_element_extend(wlmtk_element_t *element_ptr, const wlmtk_element_vmt_t *element_vmt_ptr)
Definition element.c:89
void wlmtk_element_set_position(wlmtk_element_t *element_ptr, int x, int y)
Definition element.c:254
void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible)
Definition element.c:215
bool wlmtk_element_pointer_axis(wlmtk_element_t *element_ptr, struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
Definition element.c:308
void wlmtk_element_set_parent_container(wlmtk_element_t *element_ptr, wlmtk_container_t *parent_container_ptr)
Definition element.c:161
void wlmtk_element_get_position(wlmtk_element_t *element_ptr, int *x_ptr, int *y_ptr)
Definition element.c:238
static bool wlmtk_element_keyboard_event(wlmtk_element_t *element_ptr, struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr)
Definition element.h:459
static void wlmtk_element_layout(wlmtk_element_t *element_ptr)
Definition element.h:479
static void wlmtk_element_keyboard_blur(wlmtk_element_t *element_ptr)
Definition element.h:452
void wlmtk_fake_element_set_dimensions(wlmtk_fake_element_t *fake_element_ptr, int width, int height)
Definition element.c:506
Definition input.h:63
Definition container.h:43
Definition element.h:188
wlmtk_element_vmt_t vmt
Definition element.h:193
bool pointer_inside
Definition element.h:228
bool visible
Definition element.h:225
bs_dllist_node_t dlnode
Definition element.h:190
int y
Definition element.h:222
bool inhibit_pointer_blur
Definition element.h:231
struct wlr_scene_node * wlr_scene_node_ptr
Definition element.h:201
struct wl_listener wlr_scene_node_destroy_listener
Definition element.h:204
wlmtk_pointer_motion_event_t last_pointer_motion_event
Definition element.h:207
wlmtk_container_t * parent_container_ptr
Definition element.h:198
wlmtk_element_events_t events
Definition element.h:195
int x
Definition element.h:216
Definition element.h:67
bool(* keyboard_sym)(wlmtk_element_t *element_ptr, xkb_keysym_t keysym, enum xkb_key_direction direction, uint32_t modifiers)
Definition element.h:173
void(* pointer_grab_cancel)(wlmtk_element_t *element_ptr)
Definition element.h:110
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:142
bool(* keyboard_event)(wlmtk_element_t *element_ptr, struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr)
Definition element.h:155
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:132
void(* destroy)(wlmtk_element_t *element_ptr)
Definition element.h:69
void(* layout)(wlmtk_element_t *element_ptr)
Definition element.h:184
bool(* pointer_accepts_motion)(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *motion_event_ptr)
Definition element.h:96
Definition element.h:57
Definition element.h:500
bool pointer_grab_cancel_called
Definition element.h:518
bool keyboard_event_called
Definition element.h:522
bool has_keyboard_focus
Definition element.h:520
bool layout_called
Definition element.h:526
bool pointer_button_called
Definition element.h:512
wlmtk_element_vmt_t orig_vmt
Definition element.h:504
bool pointer_axis_called
Definition element.h:516
bool keyboard_sym_called
Definition element.h:524
wlmtk_element_t element
Definition element.h:502
wlmtk_button_event_t pointer_button_event
Definition element.h:514
bool pointer_accepts_motion_called
Definition element.h:509
Definition input.h:75