diff options
Diffstat (limited to 'compositor.h')
| -rw-r--r-- | compositor.h | 145 |
1 files changed, 139 insertions, 6 deletions
diff --git a/compositor.h b/compositor.h index 7ff340c..a4e42f0 100644 --- a/compositor.h +++ b/compositor.h @@ -19,9 +19,131 @@ #ifndef _WAYLAND_SYSTEM_COMPOSITOR_H_ #define _WAYLAND_SYSTEM_COMPOSITOR_H_ -struct wlsc_input_device; -void -wlsc_device_get_position(struct wlsc_input_device *device, int32_t *x, int32_t *y); +#include <termios.h> +#include <xf86drm.h> +#include <xf86drmMode.h> +#include <libudev.h> +#include "wayland.h" +#include "wayland-util.h" + +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0]) + +struct wlsc_matrix { + GLfloat d[16]; +}; + +struct wl_visual { + struct wl_object base; +}; + +struct wlsc_surface; + +struct wlsc_listener { + struct wl_list link; + void (*func)(struct wlsc_listener *listener, + struct wlsc_surface *surface); +}; + +struct wlsc_output { + struct wl_object base; + struct wl_list link; + struct wlsc_compositor *compositor; + struct wlsc_surface *background; + struct wlsc_matrix matrix; + int32_t x, y, width, height; + + drmModeModeInfo mode; + uint32_t crtc_id; + uint32_t connector_id; + + GLuint rbo[2]; + uint32_t fb_id[2]; + EGLImageKHR image[2]; + uint32_t current; +}; + +struct wlsc_input_device { + struct wl_object base; + int32_t x, y; + struct wlsc_compositor *ec; + struct wlsc_surface *sprite; + struct wl_list link; + + int grab; + struct wlsc_surface *grab_surface; + struct wlsc_surface *pointer_focus; + struct wlsc_surface *keyboard_focus; + struct wl_array keys; + + struct wlsc_listener listener; +}; + +struct wlsc_compositor { + struct wl_compositor base; + struct wl_visual argb_visual, premultiplied_argb_visual, rgb_visual; + + EGLDisplay display; + EGLContext context; + int drm_fd; + GLuint fbo, vbo; + GLuint proj_uniform, tex_uniform; + struct wl_display *wl_display; + + /* There can be more than one, but not right now... */ + struct wlsc_input_device *input_device; + + struct wl_list output_list; + struct wl_list input_device_list; + struct wl_list surface_list; + + struct wl_list surface_destroy_listener_list; + + struct wl_event_source *term_signal_source; + + /* tty handling state */ + int tty_fd; + uint32_t vt_active : 1; + + struct termios terminal_attributes; + struct wl_event_source *tty_input_source; + struct wl_event_source *enter_vt_source; + struct wl_event_source *leave_vt_source; + + struct udev *udev; + + /* Repaint state. */ + struct wl_event_source *timer_source; + int repaint_needed; + int repaint_on_timeout; + struct timespec previous_swap; + uint32_t current_frame; + struct wl_event_source *drm_source; + + uint32_t modifier_state; +}; + +#define MODIFIER_CTRL (1 << 8) +#define MODIFIER_ALT (1 << 9) + +struct wlsc_vector { + GLfloat f[4]; +}; + +struct wlsc_surface { + struct wl_surface base; + struct wlsc_compositor *compositor; + struct wl_visual *visual; + GLuint texture; + EGLImageKHR image; + int width, height; + struct wl_list link; + struct wlsc_matrix matrix; + struct wlsc_matrix matrix_inv; +}; + void notify_motion(struct wlsc_input_device *device, int x, int y); void @@ -29,8 +151,19 @@ notify_button(struct wlsc_input_device *device, int32_t button, int32_t state); void notify_key(struct wlsc_input_device *device, uint32_t key, uint32_t state); -struct evdev_input_device * -evdev_input_device_create(struct wlsc_input_device *device, - struct wl_display *display, const char *path); +void +wlsc_compositor_present_drm(struct wlsc_compositor *wlsc); +int +wlsc_compositor_init_drm(struct wlsc_compositor *ec); +void +wlsc_compositor_finish_frame(struct wlsc_compositor *compositor, int msecs); +struct wlsc_input_device * +wlsc_input_device_create(struct wlsc_compositor *ec); + +void +screenshooter_create(struct wlsc_compositor *ec); + +extern const char *option_background; +extern int option_connector; #endif |
