aboutsummaryrefslogtreecommitdiffstats
path: root/compositor.h
diff options
context:
space:
mode:
Diffstat (limited to 'compositor.h')
-rw-r--r--compositor.h145
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