aboutsummaryrefslogtreecommitdiff
path: root/include/rootston/output.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/rootston/output.h')
-rw-r--r--include/rootston/output.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/include/rootston/output.h b/include/rootston/output.h
new file mode 100644
index 00000000..3a6d3cc7
--- /dev/null
+++ b/include/rootston/output.h
@@ -0,0 +1,50 @@
+#ifndef _ROOTSTON_OUTPUT_H
+#define _ROOTSTON_OUTPUT_H
+
+#include <time.h>
+#include <pixman.h>
+#include <wayland-server.h>
+
+/**
+ * Damage tracking requires to keep track of previous frames' damage. To allow
+ * damage tracking to work with triple buffering, a history of two frames is
+ * required.
+ */
+#define ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN 2
+
+struct roots_desktop;
+
+struct roots_output {
+ struct roots_desktop *desktop;
+ struct wlr_output *wlr_output;
+ struct wl_list link; // roots_desktop:outputs
+
+ struct roots_view *fullscreen_view;
+
+ struct timespec last_frame;
+ pixman_region32_t damage; // in ouput-local coordinates
+
+ // circular queue for previous damage
+ pixman_region32_t previous_damage[ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN];
+ size_t previous_damage_idx;
+
+ struct wl_listener frame;
+ struct wl_listener mode;
+ struct wl_listener needs_swap;
+};
+
+void output_add_notify(struct wl_listener *listener, void *data);
+void output_remove_notify(struct wl_listener *listener, void *data);
+
+struct roots_view;
+struct roots_drag_icon;
+
+void output_damage_whole(struct roots_output *output);
+void output_damage_whole_view(struct roots_output *output,
+ struct roots_view *view);
+void output_damage_from_view(struct roots_output *output,
+ struct roots_view *view);
+void output_damage_whole_drag_icon(struct roots_output *output,
+ struct roots_drag_icon *icon);
+
+#endif