aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-04-25 15:06:58 -0400
committerDrew DeVault <sir@cmpwn.com>2017-04-25 15:06:58 -0400
commitde01e654cef2c72dce3adb580e20fe2cbc8aeb16 (patch)
tree11dbed7b9a15b1f0bb43320243c74e780e791c99 /include
parent52e6ed54cbaf05cd1829099e04427d1706ca0da4 (diff)
Flesh out wayland backend somewhat, add example
Diffstat (limited to 'include')
-rw-r--r--include/backend/wayland.h21
-rw-r--r--include/common/log.h18
-rw-r--r--include/wlr/backend.h7
-rw-r--r--include/wlr/backend/wayland.h14
-rw-r--r--include/wlr/common/list.h31
-rw-r--r--include/wlr/common/log.h16
-rw-r--r--include/wlr/wayland.h32
7 files changed, 136 insertions, 3 deletions
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 <wayland-client.h>
+#include <wayland-server.h>
+#include <wlr/common/list.h>
+#include <wlr/wayland.h>
+
+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 <stdbool.h>
+#include <wlr/common/log.h>
+
+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 <wayland-client.h>
+#include <wayland-server.h>
+#include <wlr/wayland.h>
+
+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 <stddef.h>
+
+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 <stdbool.h>
+
+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 <wayland-server.h>
+#include <wlr/common/list.h>
+
+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