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
26#include "wlr/util/box.h"
27
32
35struct wlr_scene_tree;
37struct wlr_pointer_axis_event;
38
39#include "env.h"
40#include "input.h"
41
42#define WLR_USE_UNSTABLE
43#include <wlr/types/wlr_pointer.h>
44#undef WLR_USE_UNSTABLE
45
46#ifdef __cplusplus
47extern "C" {
48#endif // __cplusplus
49
53 void (*destroy)(wlmtk_element_t *element_ptr);
54
56 struct wlr_scene_node *(*create_scene_node)(
57 wlmtk_element_t *element_ptr,
58 struct wlr_scene_tree *wlr_scene_tree_ptr);
59
62 wlmtk_element_t *element_ptr,
63 int *x1_ptr,
64 int *y1_ptr,
65 int *x2_ptr,
66 int *y2_ptr);
67
70 wlmtk_element_t *element_ptr,
71 int *left_ptr,
72 int *top_ptr,
73 int *right_ptr,
74 int *bottom_ptr);
75
96 bool (*pointer_motion)(wlmtk_element_t *element_ptr,
97 double x, double y,
98 uint32_t time_msec);
99
108 bool (*pointer_button)(wlmtk_element_t *element_ptr,
109 const wlmtk_button_event_t *button_event_ptr);
110
120 wlmtk_element_t *element_ptr,
121 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr);
122
132 void (*pointer_enter)(wlmtk_element_t *element_ptr);
133
139 void (*pointer_leave)(wlmtk_element_t *element_ptr);
140};
141
200
209bool wlmtk_element_init(wlmtk_element_t *element_ptr,
210 wlmtk_env_t *env_ptr);
211
221 wlmtk_element_t *element_ptr,
222 const wlmtk_element_vmt_t *element_vmt_ptr);
223
230 wlmtk_element_t *element_ptr);
231
233bs_dllist_node_t *wlmtk_dlnode_from_element(
234 wlmtk_element_t *element_ptr);
237 bs_dllist_node_t *dlnode_ptr);
238
253 wlmtk_element_t *element_ptr,
254 wlmtk_container_t *parent_container_ptr);
255
273 wlmtk_element_t *element_ptr);
274
281void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible);
282
291 wlmtk_element_t *element_ptr,
292 int *x_ptr,
293 int *y_ptr);
294
303 wlmtk_element_t *element_ptr,
304 int x,
305 int y);
306
321 wlmtk_element_t *element_ptr,
322 int *x1_ptr,
323 int *y1_ptr,
324 int *x2_ptr,
325 int *y2_ptr)
326{
327 element_ptr->vmt.get_pointer_area(
328 element_ptr, x1_ptr, y1_ptr, x2_ptr, y2_ptr);
329}
330
341 wlmtk_element_t *element_ptr,
342 int *left_ptr,
343 int *top_ptr,
344 int *right_ptr,
345 int *bottom_ptr)
346{
347 element_ptr->vmt.get_dimensions(
348 element_ptr, left_ptr, top_ptr, right_ptr, bottom_ptr);
349}
350
359static inline struct wlr_box wlmtk_element_get_dimensions_box(
360 wlmtk_element_t *element_ptr)
361{
362 struct wlr_box box;
363 element_ptr->vmt.get_dimensions(
364 element_ptr, &box.x, &box.y, &box.width, &box.height);
365 box.width += box.x;
366 box.height += box.y;
367 return box;
368}
369
383 wlmtk_element_t *element_ptr,
384 double x,
385 double y,
386 uint32_t time_msec);
387
390 wlmtk_element_t *element_ptr,
391 const wlmtk_button_event_t *button_event_ptr)
392{
393 return element_ptr->vmt.pointer_button(element_ptr, button_event_ptr);
394}
395
397static inline bool wlmtk_element_pointer_axis(
398 wlmtk_element_t *element_ptr,
399 struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
400{
401 return element_ptr->vmt.pointer_axis(
402 element_ptr, wlr_pointer_axis_event_ptr);
403}
404
412static inline void wlmtk_element_destroy(
413 wlmtk_element_t *element_ptr) {
414 element_ptr->vmt.destroy(element_ptr);
415}
416
418extern const bs_test_case_t wlmtk_element_test_cases[];
419
445
454
455#ifdef __cplusplus
456} // extern "C"
457#endif // __cplusplus
458
459#endif /* __WLMTK_ELEMENT_H__ */
460/* == End of element.h ===================================================== */
wlmtk_fake_element_t * wlmtk_fake_element_create(void)
Definition element.c:414
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:340
static bool wlmtk_element_pointer_axis(wlmtk_element_t *element_ptr, struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
Definition element.h:397
static bool wlmtk_element_pointer_button(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.h:389
void wlmtk_element_fini(wlmtk_element_t *element_ptr)
Definition element.c:128
bs_dllist_node_t * wlmtk_dlnode_from_element(wlmtk_element_t *element_ptr)
Definition element.c:139
static struct wlr_box wlmtk_element_get_dimensions_box(wlmtk_element_t *element_ptr)
Definition element.h:359
static void wlmtk_element_destroy(wlmtk_element_t *element_ptr)
Definition element.h:412
const bs_test_case_t wlmtk_element_test_cases[]
Definition element.c:573
wlmtk_element_t * wlmtk_element_from_dlnode(bs_dllist_node_t *dlnode_ptr)
Definition element.c:146
void wlmtk_element_attach_to_scene_graph(wlmtk_element_t *element_ptr)
Definition element.c:163
bool wlmtk_element_pointer_motion(wlmtk_element_t *element_ptr, double x, double y, uint32_t time_msec)
Definition element.c:260
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:239
void wlmtk_element_set_visible(wlmtk_element_t *element_ptr, bool visible)
Definition element.c:207
void wlmtk_element_set_parent_container(wlmtk_element_t *element_ptr, wlmtk_container_t *parent_container_ptr)
Definition element.c:153
bool wlmtk_element_init(wlmtk_element_t *element_ptr, wlmtk_env_t *env_ptr)
Definition element.c:73
void wlmtk_element_get_position(wlmtk_element_t *element_ptr, int *x_ptr, int *y_ptr)
Definition element.c:223
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:320
Definition input.h:42
Definition container.h:55
Definition element.h:143
wlmtk_element_vmt_t vmt
Definition element.h:165
bool pointer_inside
Definition element.h:198
bool visible
Definition element.h:174
bs_dllist_node_t dlnode
Definition element.h:162
int y
Definition element.h:157
struct wlr_scene_node * wlr_scene_node_ptr
Definition element.h:171
uint32_t last_pointer_time_msec
Definition element.h:196
struct wl_listener wlr_scene_node_destroy_listener
Definition element.h:177
double last_pointer_x
Definition element.h:186
double last_pointer_y
Definition element.h:194
wlmtk_env_t * env_ptr
Definition element.h:168
wlmtk_container_t * parent_container_ptr
Definition element.h:160
int x
Definition element.h:151
Definition element.h:51
void(* pointer_enter)(wlmtk_element_t *element_ptr)
Definition element.h:132
void(* get_dimensions)(wlmtk_element_t *element_ptr, int *x1_ptr, int *y1_ptr, int *x2_ptr, int *y2_ptr)
Definition element.h:61
bool(* pointer_button)(wlmtk_element_t *element_ptr, const wlmtk_button_event_t *button_event_ptr)
Definition element.h:108
bool(* pointer_axis)(wlmtk_element_t *element_ptr, struct wlr_pointer_axis_event *wlr_pointer_axis_event_ptr)
Definition element.h:119
void(* pointer_leave)(wlmtk_element_t *element_ptr)
Definition element.h:139
bool(* pointer_motion)(wlmtk_element_t *element_ptr, double x, double y, uint32_t time_msec)
Definition element.h:96
void(* destroy)(wlmtk_element_t *element_ptr)
Definition element.h:53
void(* get_pointer_area)(wlmtk_element_t *element_ptr, int *left_ptr, int *top_ptr, int *right_ptr, int *bottom_ptr)
Definition element.h:69
Definition env.c:32
Definition element.h:421
bool pointer_enter_called
Definition element.h:433
bool pointer_leave_called
Definition element.h:435
bool pointer_button_called
Definition element.h:437
wlmtk_element_vmt_t orig_vmt
Definition element.h:425
bool pointer_axis_called
Definition element.h:441
bool pointer_motion_called
Definition element.h:430
wlmtk_element_t element
Definition element.h:423
wlmtk_button_event_t pointer_button_event
Definition element.h:439