aboutsummaryrefslogtreecommitdiff
path: root/include/wlr/util
diff options
context:
space:
mode:
Diffstat (limited to 'include/wlr/util')
-rw-r--r--include/wlr/util/edges.h28
-rw-r--r--include/wlr/util/log.h64
-rw-r--r--include/wlr/util/meson.build6
-rw-r--r--include/wlr/util/region.h56
4 files changed, 154 insertions, 0 deletions
diff --git a/include/wlr/util/edges.h b/include/wlr/util/edges.h
new file mode 100644
index 00000000..bf1eb1e7
--- /dev/null
+++ b/include/wlr/util/edges.h
@@ -0,0 +1,28 @@
+/*
+ * This is a stable interface of wlroots. Future changes will be limited to:
+ *
+ * - New functions
+ * - New struct members
+ * - New enum members
+ *
+ * Note that wlroots does not make an ABI compatibility promise - in the future,
+ * the layout and size of structs used by wlroots may change, requiring code
+ * depending on this header to be recompiled (but not edited).
+ *
+ * Breaking changes are announced by email and follow a 1-year deprecation
+ * schedule. Send an email to ~sircmpwn/wlroots-announce+subscribe@lists.sr.ht
+ * to receive these announcements.
+ */
+
+#ifndef WLR_UTIL_EDGES_H
+#define WLR_UTIL_EDGES_H
+
+enum wlr_edges {
+ WLR_EDGE_NONE = 0,
+ WLR_EDGE_TOP = 1,
+ WLR_EDGE_BOTTOM = 2,
+ WLR_EDGE_LEFT = 4,
+ WLR_EDGE_RIGHT = 8,
+};
+
+#endif
diff --git a/include/wlr/util/log.h b/include/wlr/util/log.h
new file mode 100644
index 00000000..2c441180
--- /dev/null
+++ b/include/wlr/util/log.h
@@ -0,0 +1,64 @@
+/*
+ * This is a stable interface of wlroots. Future changes will be limited to:
+ *
+ * - New functions
+ * - New struct members
+ * - New enum members
+ *
+ * Note that wlroots does not make an ABI compatibility promise - in the future,
+ * the layout and size of structs used by wlroots may change, requiring code
+ * depending on this header to be recompiled (but not edited).
+ *
+ * Breaking changes are announced by email and follow a 1-year deprecation
+ * schedule. Send an email to ~sircmpwn/wlroots-announce+subscribe@lists.sr.ht
+ * to receive these announcements.
+ */
+
+#ifndef WLR_UTIL_LOG_H
+#define WLR_UTIL_LOG_H
+
+#include <stdbool.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+
+enum wlr_log_importance {
+ WLR_SILENT = 0,
+ WLR_ERROR = 1,
+ WLR_INFO = 2,
+ WLR_DEBUG = 3,
+ WLR_LOG_IMPORTANCE_LAST,
+};
+
+typedef void (*wlr_log_func_t)(enum wlr_log_importance importance,
+ const char *fmt, va_list args);
+
+// Will log all messages less than or equal to `verbosity`
+// If `callback` is NULL, wlr will use its default logger.
+// The function can be called multiple times to update the verbosity or
+// callback function.
+void wlr_log_init(enum wlr_log_importance verbosity, wlr_log_func_t callback);
+
+// Returns the log verbosity provided to wlr_log_init
+enum wlr_log_importance wlr_log_get_verbosity(void);
+
+#ifdef __GNUC__
+#define _WLR_ATTRIB_PRINTF(start, end) __attribute__((format(printf, start, end)))
+#else
+#define _WLR_ATTRIB_PRINTF(start, end)
+#endif
+
+void _wlr_log(enum wlr_log_importance verbosity, const char *format, ...) _WLR_ATTRIB_PRINTF(2, 3);
+void _wlr_vlog(enum wlr_log_importance verbosity, const char *format, va_list args) _WLR_ATTRIB_PRINTF(2, 0);
+const char *_wlr_strip_path(const char *filepath);
+
+#define wlr_log(verb, fmt, ...) \
+ _wlr_log(verb, "[%s:%d] " fmt, _wlr_strip_path(__FILE__), __LINE__, ##__VA_ARGS__)
+
+#define wlr_vlog(verb, fmt, args) \
+ _wlr_vlog(verb, "[%s:%d] " fmt, _wlr_strip_path(__FILE__), __LINE__, args)
+
+#define wlr_log_errno(verb, fmt, ...) \
+ wlr_log(verb, fmt ": %s", ##__VA_ARGS__, strerror(errno))
+
+#endif
diff --git a/include/wlr/util/meson.build b/include/wlr/util/meson.build
new file mode 100644
index 00000000..ee72cbd6
--- /dev/null
+++ b/include/wlr/util/meson.build
@@ -0,0 +1,6 @@
+install_headers(
+ 'edges.h',
+ 'log.h',
+ 'region.h',
+ subdir: 'wlr/util',
+)
diff --git a/include/wlr/util/region.h b/include/wlr/util/region.h
new file mode 100644
index 00000000..4aca07e1
--- /dev/null
+++ b/include/wlr/util/region.h
@@ -0,0 +1,56 @@
+/*
+ * This is a stable interface of wlroots. Future changes will be limited to:
+ *
+ * - New functions
+ * - New struct members
+ * - New enum members
+ *
+ * Note that wlroots does not make an ABI compatibility promise - in the future,
+ * the layout and size of structs used by wlroots may change, requiring code
+ * depending on this header to be recompiled (but not edited).
+ *
+ * Breaking changes are announced by email and follow a 1-year deprecation
+ * schedule. Send an email to ~sircmpwn/wlroots-announce+subscribe@lists.sr.ht
+ * to receive these announcements.
+ */
+
+#ifndef WLR_UTIL_REGION_H
+#define WLR_UTIL_REGION_H
+
+#include <stdbool.h>
+#include <pixman.h>
+#include <wayland-server.h>
+
+/**
+ * Scales a region, ie. multiplies all its coordinates by `scale`.
+ *
+ * The resulting coordinates are rounded up or down so that the new region is
+ * at least as big as the original one.
+ */
+void wlr_region_scale(pixman_region32_t *dst, pixman_region32_t *src,
+ float scale);
+
+/**
+ * Applies a transform to a region inside a box of size `width` x `height`.
+ */
+void wlr_region_transform(pixman_region32_t *dst, pixman_region32_t *src,
+ enum wl_output_transform transform, int width, int height);
+
+/**
+ * Expands the region of `distance`. If `distance` is negative, it shrinks the
+ * region.
+ */
+void wlr_region_expand(pixman_region32_t *dst, pixman_region32_t *src,
+ int distance);
+
+/*
+ * Builds the smallest possible region that contains the region rotated about
+ * the point (ox, oy).
+ */
+void wlr_region_rotated_bounds(pixman_region32_t *dst, pixman_region32_t *src,
+ float rotation, int ox, int oy);
+
+bool wlr_region_confine(pixman_region32_t *region, double x1, double y1, double x2,
+ double y2, double *x2_out, double *y2_out);
+
+#endif