GFXprim
2D bitmap graphics library with emphasis on speed and correctness
Loading...
Searching...
No Matches
gp_widget_event.h
Go to the documentation of this file.
1//SPDX-License-Identifier: LGPL-2.0-or-later
2
3/*
4
5 Copyright (c) 2014-2020 Cyril Hrubis <metan@ucw.cz>
6
7 */
8
18#ifndef GP_WIDGET_EVENT_H
19#define GP_WIDGET_EVENT_H
20
21#include <stdarg.h>
22#include <widgets/gp_widget_types.h>
23
47
49#define GP_WIDGET_EVENT_DEFAULT_MASK ( \
50 (1<<GP_WIDGET_EVENT_NEW) | \
51 (1<<GP_WIDGET_EVENT_FREE) | \
52 (1<<GP_WIDGET_EVENT_WIDGET) \
53)
54
63void gp_widget_event_mask(gp_widget *self, enum gp_widget_event_type ev_type);
64
73void gp_widget_event_unmask(gp_widget *self, enum gp_widget_event_type ev_type);
74
82
88 struct gp_widget *self;
90 uint16_t type;
92 uint16_t sub_type;
93 /* internal DO NOT TOUCH */
94 const struct gp_widget_render_ctx *ctx;
96 union {
97 void *ptr;
98 long val;
99 struct gp_bbox *bbox;
100 struct gp_event *input_ev;
101 };
102};
103
110
121static inline int gp_widget_send_event(gp_widget *self,
122 enum gp_widget_event_type type,
123 ...)
124{
125 if (!self->on_event)
126 return 0;
127
128 if (!(self->event_mask & (1<<type)))
129 return 0;
130
131 const struct gp_widget_render_ctx *ctx = NULL;
132
133 va_list va;
134 va_start(va, type);
135 if (type == GP_WIDGET_EVENT_INPUT ||
136 type == GP_WIDGET_EVENT_RESIZE ||
137 type == GP_WIDGET_EVENT_REDRAW ||
139 ctx = va_arg(va, void*);
140 long val = va_arg(va, long);
141 va_end(va);
142
143 gp_widget_event ev = {
144 .self = self,
145 .type = type,
146 .ctx = ctx,
147 .val = val,
148 };
149
150 return self->on_event(&ev);
151}
152
163static inline int gp_widget_send_widget_event(gp_widget *self,
164 unsigned int sub_type,
165 ...)
166{
167 if (!self->on_event)
168 return 0;
169
170 va_list va;
171 va_start(va, sub_type);
172 long val = va_arg(va, long);
173 va_end(va);
174
175 gp_widget_event ev = {
176 .self = self,
178 .sub_type = sub_type,
179 .val = val,
180 };
181
182 return self->on_event(&ev);
183}
184
204int gp_widget_input_inject(gp_widget *self, gp_widget_event *ev);
205
206#endif /* GP_WIDGET_EVENT_H */
const char * gp_widget_event_type_name(enum gp_widget_event_type ev_type)
Returns string name for a given event type.
static int gp_widget_send_event(gp_widget *self, enum gp_widget_event_type type,...)
Helper function to send a widget library event to application.
void gp_widget_event_unmask(gp_widget *self, enum gp_widget_event_type ev_type)
Unmasks widget events.
gp_widget_event_type
Widget event type.
@ GP_WIDGET_EVENT_FREE
@ GP_WIDGET_EVENT_INPUT
@ GP_WIDGET_EVENT_REDRAW
@ GP_WIDGET_EVENT_WIDGET
@ GP_WIDGET_EVENT_COLOR_SCHEME
@ GP_WIDGET_EVENT_MAX
@ GP_WIDGET_EVENT_NEW
@ GP_WIDGET_EVENT_RESIZE
int gp_widget_input_inject(gp_widget *self, gp_widget_event *ev)
A helper function to inject key and utf input events to a widget.
void gp_widget_event_mask(gp_widget *self, enum gp_widget_event_type ev_type)
Masks widget events.
static int gp_widget_send_widget_event(gp_widget *self, unsigned int sub_type,...)
Helper function to send a widget specific event to application.
void gp_widget_event_dump(gp_widget_event *ev)
Prints event details into stdout.
A bounding box.
Definition gp_bbox.h:23
Event structure passed to widget event handler.
struct gp_widget * self