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-2024 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>
23
92
104 int (*on_event)(gp_widget_event *), void *priv);
105
115
125
133
141 uint16_t type;
150 uint16_t sub_type;
151 /* internal DO NOT TOUCH */
152 const struct gp_widget_render_ctx *ctx;
154 union {
158 void *ptr;
168 long val;
175 struct gp_bbox *bbox;
185 };
186};
187
194
205static inline int gp_widget_send_event(gp_widget *self,
207 ...)
208{
209 if (!self->on_event)
210 return 0;
211
212 if (!(self->event_mask & type))
213 return 0;
214
215 const struct gp_widget_render_ctx *ctx = NULL;
216
217 va_list va;
218 va_start(va, type);
219 if (type == GP_WIDGET_EVENT_INPUT ||
220 type == GP_WIDGET_EVENT_RESIZE ||
221 type == GP_WIDGET_EVENT_REDRAW ||
223 ctx = va_arg(va, void*);
224 long val = va_arg(va, long);
225 va_end(va);
226
227 gp_widget_event ev = {
228 .self = self,
229 .type = type,
230 .ctx = ctx,
231 .val = val,
232 };
233
234 return self->on_event(&ev);
235}
236
253 unsigned int sub_type,
254 ...)
255{
256 if (!self->on_event)
257 return 0;
258
259 va_list va;
260 va_start(va, sub_type);
261 long val = va_arg(va, long);
262 va_end(va);
263
264 gp_widget_event ev = {
265 .self = self,
267 .sub_type = sub_type,
268 .val = val,
269 };
270
271 return self->on_event(&ev);
272}
273
294
295#endif /* GP_WIDGET_EVENT_H */
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_events_unmask(gp_widget *self, enum gp_widget_event_type evs)
Unmasks widget event.
gp_widget_event_type
Widget event type.
@ GP_WIDGET_EVENT_FREE
Widget is about to be freed.
@ GP_WIDGET_EVENT_INPUT
An input event.
@ GP_WIDGET_EVENT_REDRAW
Pixmap redraw event.
@ GP_WIDGET_EVENT_DEFAULT_MASK
Default widget event mask.
@ GP_WIDGET_EVENT_WIDGET
Widget specific event.
@ GP_WIDGET_EVENT_COLOR_SCHEME
A color scheme has changed.
@ GP_WIDGET_EVENT_NEW
Widget was created and initialized.
@ GP_WIDGET_EVENT_RESIZE
Widget was resized.
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.
const char * gp_widget_event_type_name(enum gp_widget_event_type ev)
Returns string name for a given event type.
void gp_widget_events_mask(gp_widget *self, enum gp_widget_event_type evs)
Masks widget event.
void gp_widget_on_event_set(gp_widget *self, int(*on_event)(gp_widget_event *), void *priv)
Sets a widget event handler.
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.
Common widget types.
A bounding box.
Definition gp_bbox.h:23
An input event.
Definition gp_event.h:153
uint16_t type
enum gp_event_type
Definition gp_event.h:155
Event structure passed to widget event handler.
struct gp_event * input_ev
An input event.
long val
Optional integer value.
gp_widget * self
The widget the event is for.
uint16_t type
An event type, enum gp_widget_event_type.
struct gp_bbox * bbox
Optional bounding box.
uint16_t sub_type
Widget specific subtype defined by widgets.
void * ptr
Optional pointer.
Global widget (rendering) context.
A widget base.
Definition gp_widget.h:28
uint32_t event_mask
A mask to enable and disable a widget events.
Definition gp_widget.h:150
unsigned int type
A widget type enum gp_widget_type.
Definition gp_widget.h:39
int(* on_event)(gp_widget_event *)
An application event handler.
Definition gp_widget.h:61