summaryrefslogtreecommitdiff
path: root/src/helpers/SubsurfaceTree.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/helpers/SubsurfaceTree.hpp')
-rw-r--r--src/helpers/SubsurfaceTree.hpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/helpers/SubsurfaceTree.hpp b/src/helpers/SubsurfaceTree.hpp
new file mode 100644
index 00000000..df92033a
--- /dev/null
+++ b/src/helpers/SubsurfaceTree.hpp
@@ -0,0 +1,50 @@
+#pragma once
+
+#include "../defines.hpp"
+#include <list>
+
+struct SSubsurface;
+
+typedef void (*applyGlobalOffsetFn)(void *, int *, int *);
+
+struct SSurfaceTreeNode {
+ wlr_surface* pSurface = nullptr;
+
+ DYNMULTILISTENER(newSubsurface);
+ DYNMULTILISTENER(commit);
+ DYNMULTILISTENER(destroy);
+
+ SSurfaceTreeNode* pParent = nullptr;
+ SSubsurface* pSubsurface = nullptr;
+
+ std::list<SSubsurface> childSubsurfaces;
+
+ applyGlobalOffsetFn offsetfn;
+ void *globalOffsetData;
+
+ bool operator==(const SSurfaceTreeNode& rhs) {
+ return pSurface == rhs.pSurface;
+ }
+};
+
+struct SSubsurface {
+ wlr_subsurface* pSubsurface = nullptr;
+
+ SSurfaceTreeNode* pParent = nullptr;
+ SSurfaceTreeNode* pChild = nullptr;
+
+ DYNMULTILISTENER(map);
+ DYNMULTILISTENER(unmap);
+ DYNMULTILISTENER(destroy);
+
+ bool operator==(const SSubsurface& rhs) {
+ return pSubsurface == rhs.pSubsurface;
+ }
+};
+
+namespace SubsurfaceTree {
+ SSurfaceTreeNode* createTreeRoot(wlr_surface*, applyGlobalOffsetFn, void*);
+ void destroySurfaceTree(SSurfaceTreeNode*);
+
+ inline std::list<SSurfaceTreeNode> surfaceTreeNodes;
+};