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 <stdint.h>
26#include <wayland-server-core.h>
27#include <xkbcommon/xkbcommon.h>
28
29#define WLR_USE_UNSTABLE
30#include <wlr/util/box.h>
31#undef WLR_USE_UNSTABLE
32
33struct wlr_scene_tree;
34
39
43struct wlr_keyboard_key_event;
44
45#include "input.h"
46
47#define WLR_USE_UNSTABLE
48#include <wlr/types/wlr_pointer.h>
49#undef WLR_USE_UNSTABLE
50
51#ifdef __cplusplus
52extern "C" {
53#endif // __cplusplus
54
56typedef struct {
58 struct wl_signal pointer_enter;
60 struct wl_signal pointer_leave;
62 struct wl_signal pointer_motion;
64
68 void (*destroy)(wlmtk_element_t *element_ptr);
69
71 struct wlr_scene_node *(*create_scene_node)(
72 wlmtk_element_t *element_ptr,
73 struct wlr_scene_tree *wlr_scene_tree_ptr);
74
77 wlmtk_element_t *element_ptr,
78 int *x1_ptr,
79 int *y1_ptr,
80 int *x2_ptr,
81 int *y2_ptr);
82
96 wlmtk_element_t *element_ptr,
97 wlmtk_pointer_motion_event_t *motion_event_ptr);
98
110
120 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
141 void (*keyboard_blur)(wlmtk_element_t *element_ptr);
142
155 wlmtk_element_t *element_ptr,
156 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr);
157
173 wlmtk_element_t *element_ptr,
174 xkb_keysym_t keysym,
175 enum xkb_key_direction direction,
176 uint32_t modifiers);
177
183 void (*layout)(wlmtk_element_t *element_ptr);
184};
185
232
240bool wlmtk_element_init(wlmtk_element_t *element_ptr);
241
251 wlmtk_element_t *element_ptr,
252 const wlmtk_element_vmt_t *element_vmt_ptr);
253
260 wlmtk_element_t *element_ptr);
261
263bs_dllist_node_t *wlmtk_dlnode_from_element(
264 wlmtk_element_t *element_ptr);
267 bs_dllist_node_t *dlnode_ptr);
268
283 wlmtk_element_t *element_ptr,
284 wlmtk_container_t *parent_container_ptr);
285
303 wlmtk_element_t *element_ptr);
304
311void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible);
312
321 wlmtk_element_t *element_ptr,
322 int *x_ptr,
323 int *y_ptr);
324
333 wlmtk_element_t *element_ptr,
334 int x,
335 int y);
336
347 wlmtk_element_t *element_ptr,
348 int *left_ptr,
349 int *top_ptr,
350 int *right_ptr,
351 int *bottom_ptr)
352{
353 element_ptr->vmt.get_dimensions(
354 element_ptr, left_ptr, top_ptr, right_ptr, bottom_ptr);
355}
356
365static inline struct wlr_box wlmtk_element_get_dimensions_box(
366 wlmtk_element_t *element_ptr)
367{
368 struct wlr_box box;
369 element_ptr->vmt.get_dimensions(
370 element_ptr, &box.x, &box.y, &box.width, &box.height);
371 box.width -= box.x;
372 box.height -= box.y;
373 return box;
374}
375
387 wlmtk_element_t *element_ptr,
388 wlmtk_pointer_motion_event_t *pointer_motion_ptr);
389
399 wlmtk_element_t *element_ptr,
400 const wlmtk_button_event_t *button_event_ptr);
401
411 wlmtk_element_t *element_ptr,
412 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr);
413
427 wlmtk_element_t *element_ptr,
428 wlmtk_pointer_motion_event_t *motion_event_ptr);
429
439
446
449 wlmtk_element_t *element_ptr)
450{
451 element_ptr->vmt.keyboard_blur(element_ptr);
452}
453
456 wlmtk_element_t *element_ptr,
457 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr)
458{
459 return element_ptr->vmt.keyboard_event(
460 element_ptr, wlr_keyboard_key_event_ptr);
461}
462
464static inline bool wlmtk_element_keyboard_sym(
465 wlmtk_element_t *element_ptr,
466 xkb_keysym_t keysym,
467 enum xkb_key_direction direction,
468 uint32_t modifiers)
469{
470 return element_ptr->vmt.keyboard_sym(
471 element_ptr, keysym, direction, modifiers);
472}
473
475static inline void wlmtk_element_layout(wlmtk_element_t *element_ptr)
476{
477 element_ptr->vmt.layout(element_ptr);
478}
479
487static inline void wlmtk_element_destroy(
488 wlmtk_element_t *element_ptr) {
489 element_ptr->vmt.destroy(element_ptr);
490}
491
493extern const bs_test_case_t wlmtk_element_test_cases[];
494
527
536
546 wlmtk_fake_element_t *fake_element_ptr,
547 int width, int height);
548
556
557#ifdef __cplusplus
558} // extern "C"
559#endif // __cplusplus
560
561#endif /* __WLMTK_ELEMENT_H__ */
562/* == End of element.h ===================================================== */
void wlmtk_fake_element_grab_keyboard(wlmtk_fake_element_t *fake_element_ptr)
Definition element.c:514
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:483
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:346
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:351
bool wlmtk_element_pointer_motion(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *pointer_motion_ptr)
Definition element.c:267
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:365
static void wlmtk_element_destroy(wlmtk_element_t *element_ptr)
Definition element.h:487
bool wlmtk_element_pointer_focus(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *motion_event_ptr)
Definition element.c:313
const bs_test_case_t wlmtk_element_test_cases[]
Definition element.c:676
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:464
bool wlmtk_element_pointer_button(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.c:295
void wlmtk_element_pointer_blur(wlmtk_element_t *element_ptr)
Definition element.c:336
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:247
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:303
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:231
static bool wlmtk_element_keyboard_event(wlmtk_element_t *element_ptr, struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr)
Definition element.h:455
static void wlmtk_element_layout(wlmtk_element_t *element_ptr)
Definition element.h:475
static void wlmtk_element_keyboard_blur(wlmtk_element_t *element_ptr)
Definition element.h:448
void wlmtk_fake_element_set_dimensions(wlmtk_fake_element_t *fake_element_ptr, int width, int height)
Definition element.c:501
Definition input.h:62
Definition container.h:42
Definition element.h:187
wlmtk_element_vmt_t vmt
Definition element.h:192
bool pointer_inside
Definition element.h:227
bool visible
Definition element.h:224
bs_dllist_node_t dlnode
Definition element.h:189
int y
Definition element.h:221
bool inhibit_pointer_blur
Definition element.h:230
struct wlr_scene_node * wlr_scene_node_ptr
Definition element.h:200
struct wl_listener wlr_scene_node_destroy_listener
Definition element.h:203
wlmtk_pointer_motion_event_t last_pointer_motion_event
Definition element.h:206
wlmtk_container_t * parent_container_ptr
Definition element.h:197
wlmtk_element_events_t events
Definition element.h:194
int x
Definition element.h:215
Definition element.h:66
bool(* keyboard_sym)(wlmtk_element_t *element_ptr, xkb_keysym_t keysym, enum xkb_key_direction direction, uint32_t modifiers)
Definition element.h:172
void(* pointer_grab_cancel)(wlmtk_element_t *element_ptr)
Definition element.h:109
void(* get_dimensions)(wlmtk_element_t *element_ptr, int *x1_ptr, int *y1_ptr, int *x2_ptr, int *y2_ptr)
Definition element.h:76
void(* keyboard_blur)(wlmtk_element_t *element_ptr)
Definition element.h:141
bool(* keyboard_event)(wlmtk_element_t *element_ptr, struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr)
Definition element.h:154
bool(* pointer_button)(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.h:119
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:68
void(* layout)(wlmtk_element_t *element_ptr)
Definition element.h:183
bool(* pointer_accepts_motion)(wlmtk_element_t *element_ptr, wlmtk_pointer_motion_event_t *motion_event_ptr)
Definition element.h:95
Definition element.h:56
Definition element.h:496
bool pointer_grab_cancel_called
Definition element.h:514
bool keyboard_event_called
Definition element.h:518
bool has_keyboard_focus
Definition element.h:516
bool layout_called
Definition element.h:522
bool pointer_button_called
Definition element.h:508
wlmtk_element_vmt_t orig_vmt
Definition element.h:500
bool pointer_axis_called
Definition element.h:512
bool keyboard_sym_called
Definition element.h:520
wlmtk_element_t element
Definition element.h:498
wlmtk_button_event_t pointer_button_event
Definition element.h:510
bool pointer_accepts_motion_called
Definition element.h:505
Definition input.h:74