GFXprim
2D bitmap graphics library with emphasis on speed and correctness
Loading...
Searching...
No Matches
gp_clipboard.h
1// SPDX-License-Identifier: LGPL-2.1-or-later
2/*
3 * Copyright (C) 2009-2021 Cyril Hrubis <metan@ucw.cz>
4 */
5/*
6
7 Clipboard is, by definition, asynchronous. Getting a clipboard data requires
8 roundtrip to a server in most cases.
9
10 Getting the clipboard starts by sending a clipboard request. Once clipboard
11 data are ready the application will get an GP_EV_SYS_CLIPBOARD event and the
12 data can be retrieved by calling the clipboard get function.
13
14 */
15
16#ifndef BACKENDS_GP_CLIPBOARD_H
17#define BACKENDS_GP_CLIPBOARD_H
18
19#include <backends/gp_types.h>
20
21enum gp_clipboard_op {
22 GP_CLIPBOARD_SET,
23 GP_CLIPBOARD_REQUEST,
24 GP_CLIPBOARD_GET,
25 GP_CLIPBOARD_CLEAR,
26};
27
28struct gp_clipboard {
29 enum gp_clipboard_op op;
30 union {
31 const char *str;
32 char *ret;
33 };
34 size_t len;
35};
36
46int gp_backend_clipboard(gp_backend *self, gp_clipboard *op);
47
55static inline int gp_backend_clipboard_set(gp_backend *self, const char *str, size_t len)
56{
57 struct gp_clipboard op = {
58 .op = GP_CLIPBOARD_SET,
59 .str = str,
60 .len = len,
61 };
62
63 return gp_backend_clipboard(self, &op);
64}
65
71static inline int gp_backend_clipboard_request(gp_backend *self)
72{
73 struct gp_clipboard op = {.op = GP_CLIPBOARD_REQUEST};
74
75 return gp_backend_clipboard(self, &op);
76}
77
89static inline char *gp_backend_clipboard_get(gp_backend *self)
90{
91 struct gp_clipboard op = {.op = GP_CLIPBOARD_GET};
92
93 gp_backend_clipboard(self, &op);
94
95 return op.ret;
96}
97
103static inline void gp_backend_clipboard_ready(gp_backend *self)
104{
105 gp_ev_queue_push(self->event_queue, GP_EV_SYS, GP_EV_SYS_CLIPBOARD, 0, 0);
106}
107
108#endif /* BACKENDS_GP_CLIPBOARD_H */