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 <wayland-server.h>
25#include <xkbcommon/xkbcommon.h>
26
27#include "wlr/util/box.h"
28
33
36struct wlr_scene_tree;
38struct wlr_pointer_axis_event;
40struct wlr_keyboard_key_event;
41
42#include "env.h"
43#include "input.h"
44
45#define WLR_USE_UNSTABLE
46#include <wlr/types/wlr_pointer.h>
47#undef WLR_USE_UNSTABLE
48
49#ifdef __cplusplus
50extern "C" {
51#endif // __cplusplus
52
56 void (*destroy)(wlmtk_element_t *element_ptr);
57
59 struct wlr_scene_node *(*create_scene_node)(
60 wlmtk_element_t *element_ptr,
61 struct wlr_scene_tree *wlr_scene_tree_ptr);
62
65 wlmtk_element_t *element_ptr,
66 int *x1_ptr,
67 int *y1_ptr,
68 int *x2_ptr,
69 int *y2_ptr);
70
73 wlmtk_element_t *element_ptr,
74 int *left_ptr,
75 int *top_ptr,
76 int *right_ptr,
77 int *bottom_ptr);
78
99 bool (*pointer_motion)(wlmtk_element_t *element_ptr,
100 double x, double y,
101 uint32_t time_msec);
102
111 bool (*pointer_button)(wlmtk_element_t *element_ptr,
112 const wlmtk_button_event_t *button_event_ptr);
113
123 wlmtk_element_t *element_ptr,
124 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr);
125
135 void (*pointer_enter)(wlmtk_element_t *element_ptr);
136
142 void (*pointer_leave)(wlmtk_element_t *element_ptr);
143
150 void (*keyboard_blur)(wlmtk_element_t *element_ptr);
151
164 wlmtk_element_t *element_ptr,
165 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr,
166 const xkb_keysym_t *key_syms,
167 size_t key_syms_count,
168 uint32_t modifiers);
169};
170
229
238bool wlmtk_element_init(wlmtk_element_t *element_ptr,
239 wlmtk_env_t *env_ptr);
240
250 wlmtk_element_t *element_ptr,
251 const wlmtk_element_vmt_t *element_vmt_ptr);
252
259 wlmtk_element_t *element_ptr);
260
262bs_dllist_node_t *wlmtk_dlnode_from_element(
263 wlmtk_element_t *element_ptr);
266 bs_dllist_node_t *dlnode_ptr);
267
282 wlmtk_element_t *element_ptr,
283 wlmtk_container_t *parent_container_ptr);
284
302 wlmtk_element_t *element_ptr);
303
310void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible);
311
320 wlmtk_element_t *element_ptr,
321 int *x_ptr,
322 int *y_ptr);
323
332 wlmtk_element_t *element_ptr,
333 int x,
334 int y);
335
350 wlmtk_element_t *element_ptr,
351 int *x1_ptr,
352 int *y1_ptr,
353 int *x2_ptr,
354 int *y2_ptr)
355{
356 element_ptr->vmt.get_pointer_area(
357 element_ptr, x1_ptr, y1_ptr, x2_ptr, y2_ptr);
358}
359
370 wlmtk_element_t *element_ptr,
371 int *left_ptr,
372 int *top_ptr,
373 int *right_ptr,
374 int *bottom_ptr)
375{
376 element_ptr->vmt.get_dimensions(
377 element_ptr, left_ptr, top_ptr, right_ptr, bottom_ptr);
378}
379
388static inline struct wlr_box wlmtk_element_get_dimensions_box(
389 wlmtk_element_t *element_ptr)
390{
391 struct wlr_box box;
392 element_ptr->vmt.get_dimensions(
393 element_ptr, &box.x, &box.y, &box.width, &box.height);
394 box.width += box.x;
395 box.height += box.y;
396 return box;
397}
398
412 wlmtk_element_t *element_ptr,
413 double x,
414 double y,
415 uint32_t time_msec);
416
419 wlmtk_element_t *element_ptr,
420 const wlmtk_button_event_t *button_event_ptr)
421{
422 return element_ptr->vmt.pointer_button(element_ptr, button_event_ptr);
423}
424
426static inline bool wlmtk_element_pointer_axis(
427 wlmtk_element_t *element_ptr,
428 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
429{
430 return element_ptr->vmt.pointer_axis(
431 element_ptr, wlr_pointer_axis_event_ptr);
432}
433
436 wlmtk_element_t *element_ptr,
437 struct wlr_keyboard_key_event *wlr_keyboard_key_event_ptr,
438 const xkb_keysym_t *key_syms,
439 size_t key_syms_count,
440 uint32_t modifiers)
441{
442 return element_ptr->vmt.keyboard_event(
443 element_ptr, wlr_keyboard_key_event_ptr,
444 key_syms, key_syms_count, modifiers);
445}
446
449 wlmtk_element_t *element_ptr)
450{
451 element_ptr->vmt.keyboard_blur(element_ptr);
452}
453
461static inline void wlmtk_element_destroy(
462 wlmtk_element_t *element_ptr) {
463 element_ptr->vmt.destroy(element_ptr);
464}
465
467extern const bs_test_case_t wlmtk_element_test_cases[];
468
499
508
516
517#ifdef __cplusplus
518} // extern "C"
519#endif // __cplusplus
520
521#endif /* __WLMTK_ELEMENT_H__ */
522/* == End of element.h ===================================================== */
void wlmtk_fake_element_grab_keyboard(wlmtk_fake_element_t *fake_element_ptr)
Definition element.c:477
wlmtk_fake_element_t * wlmtk_fake_element_create(void)
Definition element.c:459
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:369
static bool wlmtk_element_pointer_axis(wlmtk_element_t *element_ptr, struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
Definition element.h:426
static bool wlmtk_element_pointer_button(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.h:418
void wlmtk_element_fini(wlmtk_element_t *element_ptr)
Definition element.c:144
bs_dllist_node_t * wlmtk_dlnode_from_element(wlmtk_element_t *element_ptr)
Definition element.c:155
static struct wlr_box wlmtk_element_get_dimensions_box(wlmtk_element_t *element_ptr)
Definition element.h:388
static void wlmtk_element_destroy(wlmtk_element_t *element_ptr)
Definition element.h:461
const bs_test_case_t wlmtk_element_test_cases[]
Definition element.c:655
wlmtk_element_t * wlmtk_element_from_dlnode(bs_dllist_node_t *dlnode_ptr)
Definition element.c:162
void wlmtk_element_attach_to_scene_graph(wlmtk_element_t *element_ptr)
Definition element.c:179
bool wlmtk_element_pointer_motion(wlmtk_element_t *element_ptr, double x, double y, uint32_t time_msec)
Definition element.c:276
wlmtk_element_vmt_t wlmtk_element_extend(wlmtk_element_t *element_ptr, const wlmtk_element_vmt_t *element_vmt_ptr)
Definition element.c:99
void wlmtk_element_set_position(wlmtk_element_t *element_ptr, int x, int y)
Definition element.c:255
void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible)
Definition element.c:223
void wlmtk_element_set_parent_container(wlmtk_element_t *element_ptr, wlmtk_container_t *parent_container_ptr)
Definition element.c:169
bool wlmtk_element_init(wlmtk_element_t *element_ptr, wlmtk_env_t *env_ptr)
Definition element.c:83
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:435
void wlmtk_element_get_position(wlmtk_element_t *element_ptr, int *x_ptr, int *y_ptr)
Definition element.c:239
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:349
static void wlmtk_element_keyboard_blur(wlmtk_element_t *element_ptr)
Definition element.h:448
Definition input.h:42
Definition container.h:55
Definition element.h:172
wlmtk_element_vmt_t vmt
Definition element.h:194
bool pointer_inside
Definition element.h:227
bool visible
Definition element.h:203
bs_dllist_node_t dlnode
Definition element.h:191
int y
Definition element.h:186
struct wlr_scene_node * wlr_scene_node_ptr
Definition element.h:200
uint32_t last_pointer_time_msec
Definition element.h:225
struct wl_listener wlr_scene_node_destroy_listener
Definition element.h:206
double last_pointer_x
Definition element.h:215
double last_pointer_y
Definition element.h:223
wlmtk_env_t * env_ptr
Definition element.h:197
wlmtk_container_t * parent_container_ptr
Definition element.h:189
int x
Definition element.h:180
Definition element.h:54
void(* pointer_enter)(wlmtk_element_t *element_ptr)
Definition element.h:135
void(* get_dimensions)(wlmtk_element_t *element_ptr, int *x1_ptr, int *y1_ptr, int *x2_ptr, int *y2_ptr)
Definition element.h:64
void(* keyboard_blur)(wlmtk_element_t *element_ptr)
Definition element.h:150
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:163
bool(* pointer_button)(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.h:111
bool(* pointer_axis)(wlmtk_element_t *element_ptr, struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
Definition element.h:122
void(* pointer_leave)(wlmtk_element_t *element_ptr)
Definition element.h:142
bool(* pointer_motion)(wlmtk_element_t *element_ptr, double x, double y, uint32_t time_msec)
Definition element.h:99
void(* destroy)(wlmtk_element_t *element_ptr)
Definition element.h:56
void(* get_pointer_area)(wlmtk_element_t *element_ptr, int *left_ptr, int *top_ptr, int *right_ptr, int *bottom_ptr)
Definition element.h:72
Definition env.c:32
Definition element.h:470
bool keyboard_event_called
Definition element.h:494
bool has_keyboard_focus
Definition element.h:492
bool pointer_enter_called
Definition element.h:482
bool pointer_leave_called
Definition element.h:484
bool pointer_button_called
Definition element.h:486
wlmtk_element_vmt_t orig_vmt
Definition element.h:474
bool pointer_axis_called
Definition element.h:490
bool pointer_motion_called
Definition element.h:479
wlmtk_element_t element
Definition element.h:472
wlmtk_button_event_t pointer_button_event
Definition element.h:488