From de01e654cef2c72dce3adb580e20fe2cbc8aeb16 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Tue, 25 Apr 2017 15:06:58 -0400 Subject: Flesh out wayland backend somewhat, add example --- include/backend/wayland.h | 21 ++++++++++++++++++--- include/common/log.h | 18 ++++++++++++++++++ include/wlr/backend.h | 7 +++++++ include/wlr/backend/wayland.h | 14 ++++++++++++++ include/wlr/common/list.h | 31 +++++++++++++++++++++++++++++++ include/wlr/common/log.h | 16 ++++++++++++++++ include/wlr/wayland.h | 32 ++++++++++++++++++++++++++++++++ 7 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 include/common/log.h create mode 100644 include/wlr/backend.h create mode 100644 include/wlr/backend/wayland.h create mode 100644 include/wlr/common/list.h create mode 100644 include/wlr/common/log.h create mode 100644 include/wlr/wayland.h (limited to 'include') diff --git a/include/backend/wayland.h b/include/backend/wayland.h index 9a445af9..368b0724 100644 --- a/include/backend/wayland.h +++ b/include/backend/wayland.h @@ -1,9 +1,24 @@ -#ifndef _WLR_BACKEND_WAYLAND_INTERNAL_H -#define _WLR_BACKEND_WAYLAND_INTERNAL_H +#ifndef _WLR_INTERNAL_BACKEND_WAYLAND_H +#define _WLR_INTERNAL_BACKEND_WAYLAND_H -struct wlr_wayland_backend { +#include +#include +#include +#include + +struct wlr_wl_backend { + /* local state */ struct wl_display *local_display; + /* remote state */ struct wl_display *remote_display; + struct wl_registry *remote_registry; + struct wl_compositor *remote_compositor; + struct wl_shell *shell; + struct wl_shm *shm; + struct wlr_wl_seat *seat; + list_t *outputs; }; +void wlr_wlb_registry_poll(struct wlr_wl_backend *backend); + #endif diff --git a/include/common/log.h b/include/common/log.h new file mode 100644 index 00000000..849f8ef0 --- /dev/null +++ b/include/common/log.h @@ -0,0 +1,18 @@ +#ifndef _WLR_INTERNAL_COMMON_LOG_H +#define _WLR_INTERNAL_COMMON_LOG_H +#include +#include + +void wlr_log_errno(log_importance_t verbosity, char* format, ...) __attribute__((format(printf,2,3))); + +void wlr_log_errno(log_importance_t verbosity, char* format, ...) __attribute__((format(printf,2,3))); + +void _wlr_log(const char *filename, int line, log_importance_t verbosity, const char* format, ...) __attribute__((format(printf,4,5))); + +#define wlr_log(VERBOSITY, FMT, ...) \ + _wlr_log(__FILE__, __LINE__, VERBOSITY, FMT, ##__VA_ARGS__) + +#define wlr_vlog(VERBOSITY, FMT, VA_ARGS) \ + _wlr_vlog(__FILE__, __LINE__, VERBOSITY, FMT, VA_ARGS) + +#endif diff --git a/include/wlr/backend.h b/include/wlr/backend.h new file mode 100644 index 00000000..527efa05 --- /dev/null +++ b/include/wlr/backend.h @@ -0,0 +1,7 @@ +#ifndef _WLR_BACKEND_H +#define _WLR_BACKEND_H + +struct wlr_backend *wlr_backend_init(); +void wlr_backend_free(struct wlr_backend *backend); + +#endif diff --git a/include/wlr/backend/wayland.h b/include/wlr/backend/wayland.h new file mode 100644 index 00000000..4318cc26 --- /dev/null +++ b/include/wlr/backend/wayland.h @@ -0,0 +1,14 @@ +#ifndef _WLR_BACKEND_WAYLAND_INTERNAL_H +#define _WLR_BACKEND_WAYLAND_INTERNAL_H + +#include +#include +#include + +struct wlr_wl_backend; + +void wlr_wl_backend_free(struct wlr_wl_backend *backend); +struct wlr_wl_backend *wlr_wl_backend_init(struct wl_display *display, + size_t outputs); + +#endif diff --git a/include/wlr/common/list.h b/include/wlr/common/list.h new file mode 100644 index 00000000..2bc82570 --- /dev/null +++ b/include/wlr/common/list.h @@ -0,0 +1,31 @@ +#ifndef _WLR_LIST_H +#define _WLR_LIST_H + +#include + +typedef struct { + size_t capacity; + size_t length; + void **items; +} list_t; + +list_t *list_create(void); +void list_free(list_t *list); +void list_foreach(list_t *list, void (*callback)(void* item)); +void list_add(list_t *list, void *item); +void list_push(list_t *list, void *item); +void list_insert(list_t *list, size_t index, void *item); +void list_del(list_t *list, size_t index); +void *list_pop(list_t *list); +void *list_peek(list_t *list); +void list_cat(list_t *list, list_t *source); +// See qsort. Remember to use *_qsort functions as compare functions, +// because they dereference the left and right arguments first! +void list_qsort(list_t *list, int compare(const void *left, const void *right)); +// Return index for first item in list that returns 0 for given compare +// function or -1 if none matches. +int list_seq_find(list_t *list, + int compare(const void *item, const void *cmp_to), + const void *cmp_to); + +#endif diff --git a/include/wlr/common/log.h b/include/wlr/common/log.h new file mode 100644 index 00000000..5b4d5a53 --- /dev/null +++ b/include/wlr/common/log.h @@ -0,0 +1,16 @@ +#ifndef _WLR_COMMON_LOG_H +#define _WLR_COMMON_LOG_H +#include + +typedef enum { + L_SILENT = 0, + L_ERROR = 1, + L_INFO = 2, + L_DEBUG = 3, +} log_importance_t; + +typedef void (*log_callback_t)(log_importance_t importance, const char *fmt, va_list args); + +void init_log(log_callback_t callback); + +#endif diff --git a/include/wlr/wayland.h b/include/wlr/wayland.h new file mode 100644 index 00000000..1c0b30ae --- /dev/null +++ b/include/wlr/wayland.h @@ -0,0 +1,32 @@ +#ifndef _WLR_WAYLAND_H +#define _WLR_WAYLAND_H + +#include +#include + +struct wlr_wl_seat { + struct wl_seat *wl_seat; + uint32_t capabilities; + const char *name; + list_t *outputs; + list_t *pointers; +}; + +struct wlr_wl_output { + struct wl_output *wl_output; + uint32_t flags; + uint32_t width, height; + uint32_t scale; +}; + +struct wlr_wl_keyboard { + struct wl_keyboard *wl_keyboard; +}; + +struct wlr_wl_pointer { + struct wl_pointer *wl_pointer; + struct wl_surface *current_surface; + wl_fixed_t x, y; +}; + +#endif -- cgit v1.2.3