blob: 2938ac8db4cef1ca5d0b6be674f4db1141c5c331 [file] [log] [blame]
Kristian Høgsbergffd710e2008-12-02 15:15:01 -05001/*
2 * Copyright © 2008 Kristian Høgsberg
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that copyright
7 * notice and this permission notice appear in supporting documentation, and
8 * that the name of the copyright holders not be used in advertising or
9 * publicity pertaining to distribution of the software without specific,
10 * written prior permission. The copyright holders make no representations
11 * about the suitability of this software for any purpose. It is provided "as
12 * is" without express or implied warranty.
13 *
14 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20 * OF THIS SOFTWARE.
21 */
22
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040023#ifndef _WAYLAND_CLIENT_H
24#define _WAYLAND_CLIENT_H
25
Kristian Høgsbergb56cb002010-07-29 15:43:46 -040026#include "wayland-util.h"
Kristian Høgsberg2d6b7c12010-06-25 16:51:57 -040027
Kristian Høgsbergda6c6b12010-06-10 13:48:44 -040028#ifdef __cplusplus
29extern "C" {
30#endif
31
Kristian Høgsberg94448c02008-12-30 11:03:33 -050032struct wl_object;
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040033struct wl_display;
34struct wl_surface;
Kristian Høgsbergde31d5c2008-12-18 17:55:33 -050035struct wl_visual;
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040036
Kristian Høgsbergfb590842008-11-07 14:27:23 -050037#define WL_DISPLAY_READABLE 0x01
38#define WL_DISPLAY_WRITABLE 0x02
39
Kristian Høgsberg94448c02008-12-30 11:03:33 -050040int
41wl_object_implements(struct wl_object *object,
42 const char *interface, int version);
43
Kristian Høgsbergfb590842008-11-07 14:27:23 -050044typedef int (*wl_display_update_func_t)(uint32_t mask, void *data);
45
Kristian Høgsbergdc0f3552008-12-07 15:22:22 -050046struct wl_display *wl_display_create(const char *name, size_t name_size);
Kristian Høgsberg427524a2008-10-08 13:32:07 -040047void wl_display_destroy(struct wl_display *display);
Kristian Høgsbergfb590842008-11-07 14:27:23 -050048int wl_display_get_fd(struct wl_display *display,
49 wl_display_update_func_t update, void *data);
50
Kristian Høgsberg427524a2008-10-08 13:32:07 -040051void wl_display_iterate(struct wl_display *display, uint32_t mask);
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040052
Kristian Høgsberg94448c02008-12-30 11:03:33 -050053struct wl_global_listener;
54typedef void (*wl_display_global_func_t)(struct wl_display *display,
55 struct wl_object *object,
56 void *data);
Kristian Høgsbergee02ca62008-12-21 23:37:12 -050057void
Kristian Høgsberg94448c02008-12-30 11:03:33 -050058wl_display_remove_global_listener(struct wl_display *display,
59 struct wl_global_listener *listener);
60
61struct wl_global_listener *
62wl_display_add_global_listener(struct wl_display *display,
63 wl_display_global_func_t handler, void *data);
Kristian Høgsbergd2412e22008-12-15 20:35:24 -050064struct wl_compositor *
65wl_display_get_compositor(struct wl_display *display);
Kristian Høgsbergde31d5c2008-12-18 17:55:33 -050066struct wl_visual *
67wl_display_get_argb_visual(struct wl_display *display);
68struct wl_visual *
69wl_display_get_premultiplied_argb_visual(struct wl_display *display);
70struct wl_visual *
71wl_display_get_rgb_visual(struct wl_display *display);
Kristian Høgsbergd2412e22008-12-15 20:35:24 -050072
Kristian Høgsberg94448c02008-12-30 11:03:33 -050073struct wl_compositor_listener {
Kristian Høgsberg478d9262010-06-08 20:34:11 -040074 void (*device)(void *data,
75 struct wl_compositor *compositor,
76 const char *device);
Kristian Høgsberg94448c02008-12-30 11:03:33 -050077 void (*acknowledge)(void *data,
78 struct wl_compositor *compositor,
79 uint32_t key, uint32_t frame);
80 void (*frame)(void *data,
81 struct wl_compositor *compositor,
82 uint32_t frame, uint32_t timestamp);
83};
84
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040085struct wl_surface *
Kristian Høgsbergd2412e22008-12-15 20:35:24 -050086wl_compositor_create_surface(struct wl_compositor *compositor);
Kristian Høgsberg40979232008-11-25 22:40:39 -050087void
Kristian Høgsbergd2412e22008-12-15 20:35:24 -050088wl_compositor_commit(struct wl_compositor *compositor, uint32_t key);
Kristian Høgsberg94448c02008-12-30 11:03:33 -050089int
90wl_compositor_add_listener(struct wl_compositor *compostior,
91 const struct wl_compositor_listener *listener,
92 void *data);
93
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040094
Kristian Høgsberg05eff512008-10-07 10:10:36 -040095void wl_surface_destroy(struct wl_surface *surface);
Kristian Høgsbergde31d5c2008-12-18 17:55:33 -050096void wl_surface_attach(struct wl_surface *surface, uint32_t name,
97 int32_t width, int32_t height, uint32_t stride,
98 struct wl_visual *visual);
Kristian Høgsberg05eff512008-10-07 10:10:36 -040099void wl_surface_map(struct wl_surface *surface,
100 int32_t x, int32_t y, int32_t width, int32_t height);
Kristian Høgsberg7f77bd82008-11-07 08:39:37 -0500101void wl_surface_damage(struct wl_surface *surface,
102 int32_t x, int32_t y, int32_t width, int32_t height);
Kristian Høgsberga67a71a2008-10-07 10:10:36 -0400103
Kristian Høgsbergecf65fe2009-09-18 09:49:21 -0400104void wl_surface_set_user_data(struct wl_surface *surface, void *user_data);
105void *wl_surface_get_user_data(struct wl_surface *surface);
106
Kristian Høgsberg94448c02008-12-30 11:03:33 -0500107struct wl_output;
108struct wl_output_listener {
109 void (*geometry)(void *data,
110 struct wl_output *output,
111 int32_t width, int32_t height);
112};
113
114int
115wl_output_add_listener(struct wl_output *output,
116 const struct wl_output_listener *listener,
117 void *data);
118
119struct wl_input_device;
120struct wl_input_device_listener {
121 void (*motion)(void *data,
122 struct wl_input_device *input_device,
Kristian Høgsberg808fd412010-07-20 17:06:19 -0400123 uint32_t time,
Kristian Høgsberg94448c02008-12-30 11:03:33 -0500124 int32_t x, int32_t y, int32_t sx, int32_t sy);
125 void (*button)(void *data,
126 struct wl_input_device *input_device,
Kristian Høgsberg808fd412010-07-20 17:06:19 -0400127 uint32_t time,
128 uint32_t button, uint32_t state);
Kristian Høgsberg94448c02008-12-30 11:03:33 -0500129 void (*key)(void *data,
130 struct wl_input_device *input_device,
Kristian Høgsberg808fd412010-07-20 17:06:19 -0400131 uint32_t time,
Kristian Høgsberg94448c02008-12-30 11:03:33 -0500132 uint32_t button, uint32_t state);
Kristian Høgsbergdb6c2f32009-02-22 21:51:24 -0500133 void (*pointer_focus)(void *data,
134 struct wl_input_device *input_device,
Kristian Høgsberg808fd412010-07-20 17:06:19 -0400135 uint32_t time,
Kristian Høgsbergdb6c2f32009-02-22 21:51:24 -0500136 struct wl_surface *surface);
137 void (*keyboard_focus)(void *data,
138 struct wl_input_device *input_device,
Kristian Høgsberg808fd412010-07-20 17:06:19 -0400139 uint32_t time,
Kristian Høgsberg3c38fa02009-02-23 22:30:29 -0500140 struct wl_surface *surface,
141 struct wl_array *keys);
Kristian Høgsberg94448c02008-12-30 11:03:33 -0500142};
143
144int
145wl_input_device_add_listener(struct wl_input_device *input_device,
146 const struct wl_input_device_listener *listener,
147 void *data);
148
Kristian Høgsberg1e4b86a2008-11-23 23:41:08 -0500149
150/* These entry points are for client side implementation of custom
151 * objects. */
152
153uint32_t wl_display_get_object_id(struct wl_display *display,
Kristian Høgsberg8049cbb2008-12-21 22:50:32 -0500154 const char *interface, uint32_t version);
Kristian Høgsberg1e4b86a2008-11-23 23:41:08 -0500155uint32_t wl_display_allocate_id(struct wl_display *display);
156void wl_display_write(struct wl_display *display,
157 const void *data,
158 size_t count);
Kristian Høgsberg94448c02008-12-30 11:03:33 -0500159void wl_display_advertise_global(struct wl_display *display,
160 struct wl_object *object);
Kristian Høgsbergda6c6b12010-06-10 13:48:44 -0400161
162#ifdef __cplusplus
163}
164#endif
165
Kristian Høgsberga67a71a2008-10-07 10:10:36 -0400166#endif