subsurface: Rewrite the subsurface tree (#4877)

This commit is contained in:
Vaxry 2024-02-29 00:03:28 +00:00 committed by GitHub
parent 1e7eb3a5a5
commit b1c0f1cc01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 312 additions and 414 deletions

View file

@ -0,0 +1,51 @@
#pragma once
#include "../defines.hpp"
#include <vector>
#include "WLSurface.hpp"
class CWindow;
class CSubsurface {
public:
// root dummy nodes
CSubsurface(CWindow* pOwner);
// real nodes
CSubsurface(wlr_subsurface* pSubsurface, CWindow* pOwner);
~CSubsurface();
Vector2D coordsRelativeToParent();
Vector2D coordsGlobal();
void onCommit();
void onDestroy();
void onNewSubsurface(wlr_subsurface* pSubsurface);
void onMap();
void onUnmap();
void recheckDamageForSubsurfaces();
private:
DYNLISTENER(destroySubsurface);
DYNLISTENER(commitSubsurface);
DYNLISTENER(newSubsurface);
DYNLISTENER(mapSubsurface);
DYNLISTENER(unmapSubsurface);
wlr_subsurface* m_pSubsurface = nullptr;
CWLSurface m_sWLSurface;
Vector2D m_vLastSize = {};
// if nullptr, means it's a dummy node
CSubsurface* m_pParent = nullptr;
CWindow* m_pWindowParent = nullptr;
std::vector<std::unique_ptr<CSubsurface>> m_vChildren;
void initSignals();
void initExistingSubsurfaces();
void checkSiblingDamage();
};