compositor: Adapt to wl_surface going away
[profile/ivi/weston-ivi-shell.git] / src / compositor.h
1 /*
2  * Copyright © 2008-2011 Kristian Høgsberg
3  * Copyright © 2012 Collabora, Ltd.
4  *
5  * Permission to use, copy, modify, distribute, and sell this software and
6  * its documentation for any purpose is hereby granted without fee, provided
7  * that the above copyright notice appear in all copies and that both that
8  * copyright notice and this permission notice appear in supporting
9  * documentation, and that the name of the copyright holders not be used in
10  * advertising or publicity pertaining to distribution of the software
11  * without specific, written prior permission.  The copyright holders make
12  * no representations about the suitability of this software for any
13  * purpose.  It is provided "as is" without express or implied warranty.
14  *
15  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
16  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
18  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
19  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
20  * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
21  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22  */
23
24 #ifndef _WAYLAND_SYSTEM_COMPOSITOR_H_
25 #define _WAYLAND_SYSTEM_COMPOSITOR_H_
26
27 #ifdef  __cplusplus
28 extern "C" {
29 #endif
30
31 #include <pixman.h>
32 #include <xkbcommon/xkbcommon.h>
33 #include <wayland-server.h>
34
35 #include "version.h"
36 #include "matrix.h"
37 #include "config-parser.h"
38
39 #define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
40
41 #define container_of(ptr, type, member) ({                              \
42         const __typeof__( ((type *)0)->member ) *__mptr = (ptr);        \
43         (type *)( (char *)__mptr - offsetof(type,member) );})
44
45 struct weston_transform {
46         struct weston_matrix matrix;
47         struct wl_list link;
48 };
49
50 struct weston_surface;
51 struct shell_surface;
52 struct weston_seat;
53 struct weston_output;
54 struct input_method;
55
56 enum weston_keyboard_modifier {
57         MODIFIER_CTRL = (1 << 0),
58         MODIFIER_ALT = (1 << 1),
59         MODIFIER_SUPER = (1 << 2),
60         MODIFIER_SHIFT = (1 << 3),
61 };
62
63 enum weston_led {
64         LED_NUM_LOCK = (1 << 0),
65         LED_CAPS_LOCK = (1 << 1),
66         LED_SCROLL_LOCK = (1 << 2),
67 };
68
69 struct weston_mode {
70         uint32_t flags;
71         int32_t width, height;
72         uint32_t refresh;
73         struct wl_list link;
74 };
75
76 struct weston_shell_client {
77         void (*send_configure)(struct weston_surface *surface,
78                                uint32_t edges, int32_t width, int32_t height);
79 };
80
81 struct weston_shell_interface {
82         void *shell;                    /* either desktop or tablet */
83
84         struct shell_surface *(*create_shell_surface)(void *shell,
85                                                       struct weston_surface *surface,
86                                                       const struct weston_shell_client *client);
87
88         void (*set_toplevel)(struct shell_surface *shsurf);
89
90         void (*set_transient)(struct shell_surface *shsurf,
91                               struct weston_surface *parent,
92                               int x, int y, uint32_t flags);
93         void (*set_fullscreen)(struct shell_surface *shsurf,
94                                uint32_t method,
95                                uint32_t framerate,
96                                struct weston_output *output);
97         int (*move)(struct shell_surface *shsurf, struct weston_seat *ws);
98         int (*resize)(struct shell_surface *shsurf,
99                       struct weston_seat *ws, uint32_t edges);
100
101 };
102
103 struct weston_border {
104         int32_t left, right, top, bottom;
105 };
106
107 struct weston_animation {
108         void (*frame)(struct weston_animation *animation,
109                       struct weston_output *output, uint32_t msecs);
110         int frame_counter;
111         struct wl_list link;
112 };
113
114 struct weston_spring {
115         double k;
116         double friction;
117         double current;
118         double target;
119         double previous;
120         uint32_t timestamp;
121 };
122
123 enum {
124         ZOOM_FOCUS_POINTER,
125         ZOOM_FOCUS_TEXT
126 };
127
128 struct weston_fixed_point {
129         wl_fixed_t x, y;
130 };
131
132 struct weston_output_zoom {
133         int active;
134         uint32_t type;
135         float increment;
136         float level;
137         float max_level;
138         float trans_x, trans_y;
139         struct weston_animation animation_z;
140         struct weston_spring spring_z;
141         struct weston_animation animation_xy;
142         struct weston_spring spring_xy;
143         struct weston_fixed_point from;
144         struct weston_fixed_point to;
145         struct weston_fixed_point current;
146         struct weston_fixed_point text_cursor;
147 };
148
149 /* bit compatible with drm definitions. */
150 enum dpms_enum {
151         WESTON_DPMS_ON,
152         WESTON_DPMS_STANDBY,
153         WESTON_DPMS_SUSPEND,
154         WESTON_DPMS_OFF
155 };
156
157 struct weston_output {
158         uint32_t id;
159         char *name;
160
161         void *renderer_state;
162
163         struct wl_list link;
164         struct wl_list resource_list;
165         struct wl_global *global;
166         struct weston_compositor *compositor;
167         struct weston_matrix matrix;
168         struct wl_list animation_list;
169         int32_t x, y, width, height;
170         int32_t mm_width, mm_height;
171         struct weston_border border;
172         pixman_region32_t region;
173         pixman_region32_t previous_damage;
174         int repaint_needed;
175         int repaint_scheduled;
176         struct weston_output_zoom zoom;
177         int dirty;
178         struct wl_signal frame_signal;
179         struct wl_signal destroy_signal;
180         uint32_t frame_time;
181         int disable_planes;
182
183         char *make, *model, *serial_number;
184         uint32_t subpixel;
185         uint32_t transform;
186         
187         struct weston_mode *current;
188         struct weston_mode *origin;
189         struct wl_list mode_list;
190
191         void (*start_repaint_loop)(struct weston_output *output);
192         void (*repaint)(struct weston_output *output,
193                         pixman_region32_t *damage);
194         void (*destroy)(struct weston_output *output);
195         void (*assign_planes)(struct weston_output *output);
196         int (*switch_mode)(struct weston_output *output, struct weston_mode *mode);
197
198         /* backlight values are on 0-255 range, where higher is brighter */
199         uint32_t backlight_current;
200         void (*set_backlight)(struct weston_output *output, uint32_t value);
201         void (*set_dpms)(struct weston_output *output, enum dpms_enum level);
202
203         uint16_t gamma_size;
204         void (*set_gamma)(struct weston_output *output,
205                           uint16_t size,
206                           uint16_t *r,
207                           uint16_t *g,
208                           uint16_t *b);
209 };
210
211 struct weston_pointer_grab;
212 struct weston_pointer_grab_interface {
213         void (*focus)(struct weston_pointer_grab *grab,
214                       struct weston_surface *surface,
215                       wl_fixed_t x,
216                       wl_fixed_t y);
217         void (*motion)(struct weston_pointer_grab *grab,
218                        uint32_t time,
219                        wl_fixed_t x,
220                        wl_fixed_t y);
221         void (*button)(struct weston_pointer_grab *grab,
222                        uint32_t time, uint32_t button, uint32_t state);
223 };
224
225 struct weston_pointer_grab {
226         const struct weston_pointer_grab_interface *interface;
227         struct weston_pointer *pointer;
228         struct weston_surface *focus;
229         wl_fixed_t x, y;
230 };
231
232 struct weston_keyboard_grab;
233 struct weston_keyboard_grab_interface {
234         void (*key)(struct weston_keyboard_grab *grab, uint32_t time,
235                     uint32_t key, uint32_t state);
236         void (*modifiers)(struct weston_keyboard_grab *grab, uint32_t serial,
237                           uint32_t mods_depressed, uint32_t mods_latched,
238                           uint32_t mods_locked, uint32_t group);
239 };
240
241 struct weston_keyboard_grab {
242         const struct weston_keyboard_grab_interface *interface;
243         struct weston_keyboard *keyboard;
244         struct weston_surface *focus;
245         uint32_t key;
246 };
247
248 struct weston_touch_grab;
249 struct weston_touch_grab_interface {
250         void (*down)(struct weston_touch_grab *grab,
251                         uint32_t time,
252                         int touch_id,
253                         wl_fixed_t sx,
254                         wl_fixed_t sy);
255         void (*up)(struct weston_touch_grab *grab,
256                         uint32_t time,
257                         int touch_id);
258         void (*motion)(struct weston_touch_grab *grab,
259                         uint32_t time,
260                         int touch_id,
261                         wl_fixed_t sx,
262                         wl_fixed_t sy);
263 };
264
265 struct weston_touch_grab {
266         const struct weston_touch_grab_interface *interface;
267         struct weston_touch *touch;
268         struct weston_surface *focus;
269 };
270
271 struct wl_data_offer {
272         struct wl_resource resource;
273         struct wl_data_source *source;
274         struct wl_listener source_destroy_listener;
275 };
276
277 struct wl_data_source {
278         struct wl_resource resource;
279         struct wl_array mime_types;
280
281         void (*accept)(struct wl_data_source *source,
282                        uint32_t serial, const char *mime_type);
283         void (*send)(struct wl_data_source *source,
284                      const char *mime_type, int32_t fd);
285         void (*cancel)(struct wl_data_source *source);
286 };
287
288 struct weston_pointer {
289         struct weston_seat *seat;
290
291         struct wl_list resource_list;
292         struct weston_surface *focus;
293         struct wl_resource *focus_resource;
294         struct wl_listener focus_listener;
295         uint32_t focus_serial;
296         struct wl_signal focus_signal;
297
298         struct weston_pointer_grab *grab;
299         struct weston_pointer_grab default_grab;
300         wl_fixed_t grab_x, grab_y;
301         uint32_t grab_button;
302         uint32_t grab_serial;
303         uint32_t grab_time;
304
305         wl_fixed_t x, y;
306         struct weston_surface *current;
307         struct wl_listener current_listener;
308         wl_fixed_t current_x, current_y;
309
310         uint32_t button_count;
311 };
312
313
314 struct weston_touch {
315         struct weston_seat *seat;
316
317         struct wl_list resource_list;
318         struct weston_surface *focus;
319         struct wl_resource *focus_resource;
320         struct wl_listener focus_listener;
321         uint32_t focus_serial;
322         struct wl_signal focus_signal;
323
324         struct weston_touch_grab *grab;
325         struct weston_touch_grab default_grab;
326         wl_fixed_t grab_x, grab_y;
327         uint32_t grab_serial;
328         uint32_t grab_time;
329 };
330
331 struct weston_pointer *
332 weston_pointer_create(void);
333 void
334 weston_pointer_destroy(struct weston_pointer *pointer);
335 void
336 weston_pointer_set_focus(struct weston_pointer *pointer,
337                          struct weston_surface *surface,
338                          wl_fixed_t sx, wl_fixed_t sy);
339 void
340 weston_pointer_start_grab(struct weston_pointer *pointer,
341                           struct weston_pointer_grab *grab);
342 void
343 weston_pointer_end_grab(struct weston_pointer *pointer);
344 void
345 weston_pointer_set_current(struct weston_pointer *pointer,
346                            struct weston_surface *surface);
347
348 struct weston_keyboard *
349 weston_keyboard_create(void);
350 void
351 weston_keyboard_destroy(struct weston_keyboard *keyboard);
352 void
353 weston_keyboard_set_focus(struct weston_keyboard *keyboard,
354                           struct weston_surface *surface);
355 void
356 weston_keyboard_start_grab(struct weston_keyboard *device,
357                            struct weston_keyboard_grab *grab);
358 void
359 weston_keyboard_end_grab(struct weston_keyboard *keyboard);
360
361 struct weston_touch *
362 weston_touch_create(void);
363 void
364 weston_touch_destroy(struct weston_touch *touch);
365 void
366 weston_touch_start_grab(struct weston_touch *device,
367                         struct weston_touch_grab *grab);
368 void
369 weston_touch_end_grab(struct weston_touch *touch);
370
371 void
372 wl_data_device_set_keyboard_focus(struct weston_seat *seat);
373
374 int
375 wl_data_device_manager_init(struct wl_display *display);
376
377
378 void
379 weston_seat_set_selection(struct weston_seat *seat,
380                           struct wl_data_source *source, uint32_t serial);
381
382 struct weston_xkb_info {
383         struct xkb_keymap *keymap;
384         int keymap_fd;
385         size_t keymap_size;
386         char *keymap_area;
387         xkb_mod_index_t shift_mod;
388         xkb_mod_index_t caps_mod;
389         xkb_mod_index_t ctrl_mod;
390         xkb_mod_index_t alt_mod;
391         xkb_mod_index_t mod2_mod;
392         xkb_mod_index_t mod3_mod;
393         xkb_mod_index_t super_mod;
394         xkb_mod_index_t mod5_mod;
395         xkb_led_index_t num_led;
396         xkb_led_index_t caps_led;
397         xkb_led_index_t scroll_led;
398 };
399
400 struct weston_keyboard {
401         struct weston_seat *seat;
402
403         struct wl_list resource_list;
404         struct weston_surface *focus;
405         struct wl_resource *focus_resource;
406         struct wl_listener focus_listener;
407         uint32_t focus_serial;
408         struct wl_signal focus_signal;
409
410         struct weston_keyboard_grab *grab;
411         struct weston_keyboard_grab default_grab;
412         uint32_t grab_key;
413         uint32_t grab_serial;
414         uint32_t grab_time;
415
416         struct wl_array keys;
417
418         struct {
419                 uint32_t mods_depressed;
420                 uint32_t mods_latched;
421                 uint32_t mods_locked;
422                 uint32_t group;
423         } modifiers;
424
425         struct weston_keyboard_grab input_method_grab;
426         struct wl_resource *input_method_resource;
427 };
428
429 struct weston_seat {
430         struct wl_list base_resource_list;
431
432         struct weston_pointer *pointer;
433         struct weston_keyboard *keyboard;
434         struct weston_touch *touch;
435
436         struct wl_signal destroy_signal;
437
438         struct weston_compositor *compositor;
439         struct weston_surface *sprite;
440         struct wl_listener sprite_destroy_listener;
441         int32_t hotspot_x, hotspot_y;
442         struct wl_list link;
443         enum weston_keyboard_modifier modifier_state;
444         struct weston_surface *saved_kbd_focus;
445         struct wl_listener saved_kbd_focus_listener;
446
447         uint32_t selection_serial;
448         struct wl_data_source *selection_data_source;
449         struct wl_listener selection_data_source_listener;
450         struct wl_signal selection_signal;
451
452         struct wl_list drag_resource_list;
453         struct wl_client *drag_client;
454         struct wl_data_source *drag_data_source;
455         struct wl_listener drag_data_source_listener;
456         struct weston_surface *drag_focus;
457         struct wl_resource *drag_focus_resource;
458         struct wl_listener drag_focus_listener;
459         struct weston_pointer_grab drag_grab;
460         struct weston_surface *drag_surface;
461         struct wl_listener drag_surface_destroy_listener;
462         int32_t drag_dx, drag_dy;
463
464         uint32_t num_tp;
465
466         void (*led_update)(struct weston_seat *ws, enum weston_led leds);
467
468         struct weston_xkb_info xkb_info;
469         struct {
470                 struct xkb_state *state;
471                 enum weston_led leds;
472         } xkb_state;
473
474         struct input_method *input_method;
475 };
476
477 enum {
478         WESTON_COMPOSITOR_ACTIVE,
479         WESTON_COMPOSITOR_IDLE,         /* shell->unlock called on activity */
480         WESTON_COMPOSITOR_OFFSCREEN,    /* no rendering, no frame events */
481         WESTON_COMPOSITOR_SLEEPING      /* same as offscreen, but also set dmps
482                                          * to off */
483 };
484
485 struct weston_layer {
486         struct wl_list surface_list;
487         struct wl_list link;
488 };
489
490 struct weston_plane {
491         pixman_region32_t damage;
492         pixman_region32_t clip;
493         int32_t x, y;
494         struct wl_list link;
495 };
496
497 struct weston_renderer {
498         int (*read_pixels)(struct weston_output *output,
499                                pixman_format_code_t format, void *pixels,
500                                uint32_t x, uint32_t y,
501                                uint32_t width, uint32_t height);
502         void (*repaint_output)(struct weston_output *output,
503                                pixman_region32_t *output_damage);
504         void (*flush_damage)(struct weston_surface *surface);
505         void (*attach)(struct weston_surface *es, struct wl_buffer *buffer);
506         int (*create_surface)(struct weston_surface *surface);
507         void (*surface_set_color)(struct weston_surface *surface,
508                                float red, float green,
509                                float blue, float alpha);
510         void (*destroy_surface)(struct weston_surface *surface);
511         void (*destroy)(struct weston_compositor *ec);
512 };
513
514 struct weston_compositor {
515         struct wl_signal destroy_signal;
516
517         struct wl_display *wl_display;
518         struct weston_shell_interface shell_interface;
519
520         struct wl_signal activate_signal;
521         struct wl_signal kill_signal;
522         struct wl_signal idle_signal;
523         struct wl_signal wake_signal;
524
525         struct wl_signal show_input_panel_signal;
526         struct wl_signal hide_input_panel_signal;
527         struct wl_signal update_input_panel_signal;
528
529         struct wl_signal seat_created_signal;
530         struct wl_signal output_created_signal;
531
532         struct wl_event_loop *input_loop;
533         struct wl_event_source *input_loop_source;
534
535         struct weston_layer fade_layer;
536         struct weston_layer cursor_layer;
537
538         struct wl_list output_list;
539         struct wl_list seat_list;
540         struct wl_list layer_list;
541         struct wl_list surface_list;
542         struct wl_list plane_list;
543         struct wl_list key_binding_list;
544         struct wl_list button_binding_list;
545         struct wl_list axis_binding_list;
546         struct wl_list debug_binding_list;
547
548         uint32_t state;
549         struct wl_event_source *idle_source;
550         uint32_t idle_inhibit;
551         int idle_time;                  /* timeout, s */
552
553         /* Repaint state. */
554         struct wl_array vertices;
555         struct wl_array indices; /* only used in compositor-wayland */
556         struct wl_array vtxcnt;
557         struct weston_plane primary_plane;
558
559         uint32_t focus;
560
561         struct weston_renderer *renderer;
562
563         pixman_format_code_t read_format;
564
565         void (*destroy)(struct weston_compositor *ec);
566         void (*restore)(struct weston_compositor *ec);
567         int (*authenticate)(struct weston_compositor *c, uint32_t id);
568
569         void (*ping_handler)(struct weston_surface *surface, uint32_t serial);
570
571         int launcher_sock;
572
573         uint32_t output_id_pool;
574
575         struct xkb_rule_names xkb_names;
576         struct xkb_context *xkb_context;
577         struct weston_xkb_info xkb_info;
578 };
579
580 struct weston_buffer_reference {
581         struct wl_buffer *buffer;
582         struct wl_listener destroy_listener;
583 };
584
585 struct weston_region {
586         struct wl_resource resource;
587         pixman_region32_t region;
588 };
589
590 /* Using weston_surface transformations
591  *
592  * To add a transformation to a surface, create a struct weston_transform, and
593  * add it to the list surface->geometry.transformation_list. Whenever you
594  * change the list, anything under surface->geometry, or anything in the
595  * weston_transforms linked into the list, you must call
596  * weston_surface_geometry_dirty().
597  *
598  * The order in the list defines the order of transformations. Let the list
599  * contain the transformation matrices M1, ..., Mn as head to tail. The
600  * transformation is applied to surface-local coordinate vector p as
601  *    P = Mn * ... * M2 * M1 * p
602  * to produce the global coordinate vector P. The total transform
603  *    Mn * ... * M2 * M1
604  * is cached in surface->transform.matrix, and the inverse of it in
605  * surface->transform.inverse.
606  *
607  * The list always contains surface->transform.position transformation, which
608  * is the translation by surface->geometry.x and y.
609  *
610  * If you want to apply a transformation in local coordinates, add your
611  * weston_transform to the head of the list. If you want to apply a
612  * transformation in global coordinates, add it to the tail of the list.
613  *
614  * If surface->geometry.parent is set, the total transformation of this
615  * surface will be the parent's total transformation and this transformation
616  * combined:
617  *    Mparent * Mn * ... * M2 * M1
618  */
619
620 struct weston_surface {
621         struct wl_resource resource;
622         struct weston_compositor *compositor;
623         pixman_region32_t clip;
624         pixman_region32_t damage;
625         pixman_region32_t opaque;        /* part of geometry, see below */
626         pixman_region32_t input;
627         struct wl_list link;
628         struct wl_list layer_link;
629         float alpha;                     /* part of geometry, see below */
630         struct weston_plane *plane;
631
632         void *renderer_state;
633
634         /* Surface geometry state, mutable.
635          * If you change anything, call weston_surface_geometry_dirty().
636          * That includes the transformations referenced from the list.
637          */
638         struct {
639                 float x, y; /* surface translation on display */
640                 int32_t width, height;
641
642                 /* struct weston_transform */
643                 struct wl_list transformation_list;
644
645                 /* managed by weston_surface_set_transform_parent() */
646                 struct weston_surface *parent;
647                 struct wl_listener parent_destroy_listener;
648                 struct wl_list child_list; /* geometry.parent_link */
649                 struct wl_list parent_link;
650         } geometry;
651
652         /* State derived from geometry state, read-only.
653          * This is updated by weston_surface_update_transform().
654          */
655         struct {
656                 int dirty;
657
658                 pixman_region32_t boundingbox;
659                 pixman_region32_t opaque;
660
661                 /* matrix and inverse are used only if enabled = 1.
662                  * If enabled = 0, use x, y, width, height directly.
663                  */
664                 int enabled;
665                 struct weston_matrix matrix;
666                 struct weston_matrix inverse;
667
668                 struct weston_transform position; /* matrix from x, y */
669         } transform;
670
671         /*
672          * Which output to vsync this surface to.
673          * Used to determine, whether to send or queue frame events.
674          * Must be NULL, if 'link' is not in weston_compositor::surface_list.
675          */
676         struct weston_output *output;
677
678         /*
679          * A more complete representation of all outputs this surface is
680          * displayed on.
681          */
682         uint32_t output_mask;
683
684         struct wl_list frame_callback_list;
685
686         struct weston_buffer_reference buffer_ref;
687         uint32_t buffer_transform;
688         int keep_buffer; /* bool for backends to prevent early release */
689
690         /* All the pending state, that wl_surface.commit will apply. */
691         struct {
692                 /* wl_surface.attach */
693                 int newly_attached;
694                 struct wl_buffer *buffer;
695                 struct wl_listener buffer_destroy_listener;
696                 int32_t sx;
697                 int32_t sy;
698
699                 /* wl_surface.damage */
700                 pixman_region32_t damage;
701
702                 /* wl_surface.set_opaque_region */
703                 pixman_region32_t opaque;
704
705                 /* wl_surface.set_input_region */
706                 pixman_region32_t input;
707
708                 /* wl_surface.frame */
709                 struct wl_list frame_callback_list;
710
711                 /* wl_surface.set_buffer_transform */
712                 uint32_t buffer_transform;
713         } pending;
714
715         /*
716          * If non-NULL, this function will be called on surface::attach after
717          * a new buffer has been set up for this surface. The integer params
718          * are the sx and sy paramerters supplied to surface::attach .
719          */
720         void (*configure)(struct weston_surface *es, int32_t sx, int32_t sy, int32_t width, int32_t height);
721         void *configure_private;
722 };
723
724 enum weston_key_state_update {
725         STATE_UPDATE_AUTOMATIC,
726         STATE_UPDATE_NONE,
727 };
728
729 void
730 weston_version(int *major, int *minor, int *micro);
731
732 void
733 weston_surface_update_transform(struct weston_surface *surface);
734
735 void
736 weston_surface_geometry_dirty(struct weston_surface *surface);
737
738 void
739 weston_surface_to_global_fixed(struct weston_surface *surface,
740                                wl_fixed_t sx, wl_fixed_t sy,
741                                wl_fixed_t *x, wl_fixed_t *y);
742 void
743 weston_surface_to_global_float(struct weston_surface *surface,
744                                float sx, float sy, float *x, float *y);
745
746 void
747 weston_surface_from_global_float(struct weston_surface *surface,
748                                  float x, float y, float *sx, float *sy);
749 void
750 weston_surface_from_global(struct weston_surface *surface,
751                            int32_t x, int32_t y, int32_t *sx, int32_t *sy);
752 void
753 weston_surface_from_global_fixed(struct weston_surface *surface,
754                                  wl_fixed_t x, wl_fixed_t y,
755                                  wl_fixed_t *sx, wl_fixed_t *sy);
756 int32_t
757 weston_surface_buffer_width(struct weston_surface *surface);
758 int32_t
759 weston_surface_buffer_height(struct weston_surface *surface);
760
761 WL_EXPORT void
762 weston_surface_to_buffer_float(struct weston_surface *surface,
763                                float x, float y, float *bx, float *by);
764 pixman_box32_t
765 weston_surface_to_buffer_rect(struct weston_surface *surface,
766                               pixman_box32_t rect);
767
768 void
769 weston_spring_init(struct weston_spring *spring,
770                    double k, double current, double target);
771 void
772 weston_spring_update(struct weston_spring *spring, uint32_t msec);
773 int
774 weston_spring_done(struct weston_spring *spring);
775
776 void
777 weston_surface_activate(struct weston_surface *surface,
778                         struct weston_seat *seat);
779 void
780 notify_motion(struct weston_seat *seat, uint32_t time,
781               wl_fixed_t dx, wl_fixed_t dy);
782 void
783 notify_motion_absolute(struct weston_seat *seat, uint32_t time,
784                        wl_fixed_t x, wl_fixed_t y);
785 void
786 notify_button(struct weston_seat *seat, uint32_t time, int32_t button,
787               enum wl_pointer_button_state state);
788 void
789 notify_axis(struct weston_seat *seat, uint32_t time, uint32_t axis,
790             wl_fixed_t value);
791 void
792 notify_key(struct weston_seat *seat, uint32_t time, uint32_t key,
793            enum wl_keyboard_key_state state,
794            enum weston_key_state_update update_state);
795 void
796 notify_modifiers(struct weston_seat *seat, uint32_t serial);
797
798 void
799 notify_pointer_focus(struct weston_seat *seat, struct weston_output *output,
800                      wl_fixed_t x, wl_fixed_t y);
801
802 void
803 notify_keyboard_focus_in(struct weston_seat *seat, struct wl_array *keys,
804                          enum weston_key_state_update update_state);
805 void
806 notify_keyboard_focus_out(struct weston_seat *seat);
807
808 void
809 notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
810              wl_fixed_t x, wl_fixed_t y, int touch_type);
811
812 void
813 weston_layer_init(struct weston_layer *layer, struct wl_list *below);
814
815 void
816 weston_plane_init(struct weston_plane *plane, int32_t x, int32_t y);
817 void
818 weston_plane_release(struct weston_plane *plane);
819
820 void
821 weston_compositor_stack_plane(struct weston_compositor *ec,
822                               struct weston_plane *plane,
823                               struct weston_plane *above);
824
825 void
826 weston_output_finish_frame(struct weston_output *output, uint32_t msecs);
827 void
828 weston_output_schedule_repaint(struct weston_output *output);
829 void
830 weston_output_damage(struct weston_output *output);
831 void
832 weston_compositor_schedule_repaint(struct weston_compositor *compositor);
833 void
834 weston_compositor_fade(struct weston_compositor *compositor, float tint);
835 void
836 weston_compositor_damage_all(struct weston_compositor *compositor);
837 void
838 weston_compositor_unlock(struct weston_compositor *compositor);
839 void
840 weston_compositor_wake(struct weston_compositor *compositor);
841 void
842 weston_compositor_offscreen(struct weston_compositor *compositor);
843 void
844 weston_compositor_sleep(struct weston_compositor *compositor);
845 struct weston_surface *
846 weston_compositor_pick_surface(struct weston_compositor *compositor,
847                                wl_fixed_t x, wl_fixed_t y,
848                                wl_fixed_t *sx, wl_fixed_t *sy);
849
850
851 struct weston_binding;
852 typedef void (*weston_key_binding_handler_t)(struct weston_seat *seat,
853                                              uint32_t time, uint32_t key,
854                                              void *data);
855 struct weston_binding *
856 weston_compositor_add_key_binding(struct weston_compositor *compositor,
857                                   uint32_t key,
858                                   enum weston_keyboard_modifier modifier,
859                                   weston_key_binding_handler_t binding,
860                                   void *data);
861
862 typedef void (*weston_button_binding_handler_t)(struct weston_seat *seat,
863                                                 uint32_t time, uint32_t button,
864                                                 void *data);
865 struct weston_binding *
866 weston_compositor_add_button_binding(struct weston_compositor *compositor,
867                                      uint32_t button,
868                                      enum weston_keyboard_modifier modifier,
869                                      weston_button_binding_handler_t binding,
870                                      void *data);
871
872 typedef void (*weston_axis_binding_handler_t)(struct weston_seat *seat,
873                                               uint32_t time, uint32_t axis,
874                                               wl_fixed_t value, void *data);
875 struct weston_binding *
876 weston_compositor_add_axis_binding(struct weston_compositor *compositor,
877                                    uint32_t axis,
878                                    enum weston_keyboard_modifier modifier,
879                                    weston_axis_binding_handler_t binding,
880                                    void *data);
881 struct weston_binding *
882 weston_compositor_add_debug_binding(struct weston_compositor *compositor,
883                                     uint32_t key,
884                                     weston_key_binding_handler_t binding,
885                                     void *data);
886 void
887 weston_binding_destroy(struct weston_binding *binding);
888
889 void
890 weston_binding_list_destroy_all(struct wl_list *list);
891
892 void
893 weston_compositor_run_key_binding(struct weston_compositor *compositor,
894                                   struct weston_seat *seat, uint32_t time,
895                                   uint32_t key,
896                                   enum wl_keyboard_key_state state);
897 void
898 weston_compositor_run_button_binding(struct weston_compositor *compositor,
899                                      struct weston_seat *seat, uint32_t time,
900                                      uint32_t button,
901                                      enum wl_pointer_button_state value);
902 int
903 weston_compositor_run_axis_binding(struct weston_compositor *compositor,
904                                    struct weston_seat *seat, uint32_t time,
905                                    uint32_t axis, int32_t value);
906 int
907 weston_compositor_run_debug_binding(struct weston_compositor *compositor,
908                                     struct weston_seat *seat, uint32_t time,
909                                     uint32_t key,
910                                     enum wl_keyboard_key_state state);
911
912 int
913 weston_environment_get_fd(const char *env);
914
915 struct wl_list *
916 weston_compositor_top(struct weston_compositor *compositor);
917
918 struct weston_surface *
919 weston_surface_create(struct weston_compositor *compositor);
920
921 void
922 weston_surface_configure(struct weston_surface *surface,
923                          float x, float y, int width, int height);
924
925 void
926 weston_surface_restack(struct weston_surface *surface, struct wl_list *below);
927
928 void
929 weston_surface_set_position(struct weston_surface *surface,
930                             float x, float y);
931
932 void
933 weston_surface_set_transform_parent(struct weston_surface *surface,
934                                     struct weston_surface *parent);
935
936 int
937 weston_surface_is_mapped(struct weston_surface *surface);
938
939 void
940 weston_surface_schedule_repaint(struct weston_surface *surface);
941
942 void
943 weston_surface_damage(struct weston_surface *surface);
944
945 void
946 weston_surface_damage_below(struct weston_surface *surface);
947
948 void
949 weston_surface_move_to_plane(struct weston_surface *surface,
950                              struct weston_plane *plane);
951 void
952 weston_surface_unmap(struct weston_surface *surface);
953
954 void
955 weston_buffer_reference(struct weston_buffer_reference *ref,
956                         struct wl_buffer *buffer);
957
958 uint32_t
959 weston_compositor_get_time(void);
960
961 int
962 weston_compositor_init(struct weston_compositor *ec, struct wl_display *display,
963                        int *argc, char *argv[], const char *config_file);
964 void
965 weston_compositor_shutdown(struct weston_compositor *ec);
966 void
967 weston_text_cursor_position_notify(struct weston_surface *surface,
968                                                 wl_fixed_t x, wl_fixed_t y);
969 void
970 weston_output_init_zoom(struct weston_output *output);
971 void
972 weston_output_update_zoom(struct weston_output *output, uint32_t type);
973 void
974 weston_output_update_matrix(struct weston_output *output);
975 void
976 weston_output_move(struct weston_output *output, int x, int y);
977 void
978 weston_output_init(struct weston_output *output, struct weston_compositor *c,
979                    int x, int y, int width, int height, uint32_t transform);
980 void
981 weston_output_destroy(struct weston_output *output);
982
983 void
984 weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec);
985 void
986 weston_seat_init_pointer(struct weston_seat *seat);
987 int
988 weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap);
989 void
990 weston_seat_init_touch(struct weston_seat *seat);
991 void
992 weston_seat_repick(struct weston_seat *seat);
993
994 void
995 weston_seat_release(struct weston_seat *seat);
996 int
997 weston_compositor_xkb_init(struct weston_compositor *ec,
998                            struct xkb_rule_names *names);
999 void
1000 weston_compositor_xkb_destroy(struct weston_compositor *ec);
1001
1002 /* String literal of spaces, the same width as the timestamp. */
1003 #define STAMP_SPACE "               "
1004
1005 void
1006 weston_log_file_open(const char *filename);
1007 void
1008 weston_log_file_close(void);
1009 int
1010 weston_log(const char *fmt, ...)
1011         __attribute__ ((format (printf, 1, 2)));
1012 int
1013 weston_log_continue(const char *fmt, ...)
1014         __attribute__ ((format (printf, 1, 2)));
1015
1016 enum {
1017         TTY_ENTER_VT,
1018         TTY_LEAVE_VT
1019 };
1020
1021 typedef void (*tty_vt_func_t)(struct weston_compositor *compositor, int event);
1022
1023 struct tty *
1024 tty_create(struct weston_compositor *compositor,
1025            tty_vt_func_t vt_func, int tty_nr);
1026
1027 void
1028 tty_destroy(struct tty *tty);
1029
1030 void
1031 tty_reset(struct tty *tty);
1032
1033 int
1034 tty_activate_vt(struct tty *tty, int vt);
1035
1036 void
1037 screenshooter_create(struct weston_compositor *ec);
1038
1039 struct clipboard *
1040 clipboard_create(struct weston_seat *seat);
1041
1042 void
1043 text_cursor_position_notifier_create(struct weston_compositor *ec);
1044
1045 int
1046 text_backend_init(struct weston_compositor *ec);
1047
1048 struct weston_process;
1049 typedef void (*weston_process_cleanup_func_t)(struct weston_process *process,
1050                                             int status);
1051
1052 struct weston_process {
1053         pid_t pid;
1054         weston_process_cleanup_func_t cleanup;
1055         struct wl_list link;
1056 };
1057
1058 struct wl_client *
1059 weston_client_launch(struct weston_compositor *compositor,
1060                      struct weston_process *proc,
1061                      const char *path,
1062                      weston_process_cleanup_func_t cleanup);
1063
1064 void
1065 weston_watch_process(struct weston_process *process);
1066
1067 struct weston_surface_animation;
1068 typedef void (*weston_surface_animation_done_func_t)(struct weston_surface_animation *animation, void *data);
1069
1070 struct weston_surface_animation *
1071 weston_zoom_run(struct weston_surface *surface, float start, float stop,
1072                 weston_surface_animation_done_func_t done, void *data);
1073
1074 struct weston_surface_animation *
1075 weston_fade_run(struct weston_surface *surface,
1076                 float start, float end, float k,
1077                 weston_surface_animation_done_func_t done, void *data);
1078 void
1079 weston_fade_update(struct weston_surface_animation *fade,
1080                    float start, float end, float k);
1081
1082 struct weston_surface_animation *
1083 weston_slide_run(struct weston_surface *surface, float start, float stop,
1084                  weston_surface_animation_done_func_t done, void *data);
1085
1086 void
1087 weston_surface_set_color(struct weston_surface *surface,
1088                          float red, float green, float blue, float alpha);
1089
1090 void
1091 weston_surface_destroy(struct weston_surface *surface);
1092
1093 int
1094 weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode);
1095
1096 int
1097 noop_renderer_init(struct weston_compositor *ec);
1098
1099 struct weston_compositor *
1100 backend_init(struct wl_display *display, int *argc, char *argv[],
1101              const char *config_file);
1102
1103 int
1104 module_init(struct weston_compositor *compositor,
1105             int *argc, char *argv[], const char *config_file);
1106
1107 void
1108 weston_transformed_coord(int width, int height,
1109                          enum wl_output_transform transform,
1110                          float sx, float sy, float *bx, float *by);
1111 pixman_box32_t
1112 weston_transformed_rect(int width, int height,
1113                         enum wl_output_transform transform,
1114                         pixman_box32_t rect);
1115
1116 #ifdef  __cplusplus
1117 }
1118 #endif
1119
1120 #endif