diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2024-04-27 12:43:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-27 12:43:12 +0100 |
| commit | bca7804bb6e1bf5ce5a99b9ae4806be25e36993c (patch) | |
| tree | ebd3a578de1dfe11b54f9440cfc3a408ffa6a620 /src/render/decorations/DecorationPositioner.hpp | |
| parent | 25aec3ac8ce65ed224f025f8f6dfef73780577a4 (diff) | |
internal: Window storage rework - part 1 (#5762)
* Window storage rework - part 1
* format
* remove useless include
* fix pch
* format
* fix crash in dwindle
* fix vram leak
* prefer .expired() for bool checks
Diffstat (limited to 'src/render/decorations/DecorationPositioner.hpp')
| -rw-r--r-- | src/render/decorations/DecorationPositioner.hpp | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/src/render/decorations/DecorationPositioner.hpp b/src/render/decorations/DecorationPositioner.hpp index 140ecace..b99891b6 100644 --- a/src/render/decorations/DecorationPositioner.hpp +++ b/src/render/decorations/DecorationPositioner.hpp @@ -3,12 +3,15 @@ #include <cstdint> #include <memory> #include <vector> -#include <unordered_map> +#include <map> #include "../../helpers/Box.hpp" class CWindow; class IHyprWindowDecoration; +typedef std::shared_ptr<CWindow> PHLWINDOW; +typedef std::weak_ptr<CWindow> PHLWINDOWREF; + enum eDecorationPositioningPolicy { DECORATION_POSITION_ABSOLUTE = 0, /* Decoration wants absolute positioning */ DECORATION_POSITION_STICKY, /* Decoration is stuck to some edge of a window */ @@ -59,21 +62,21 @@ class CDecorationPositioner { public: CDecorationPositioner(); - Vector2D getEdgeDefinedPoint(uint32_t edges, CWindow* pWindow); + Vector2D getEdgeDefinedPoint(uint32_t edges, PHLWINDOW pWindow); // called on resize, or insert/removal of a new deco - void onWindowUpdate(CWindow* pWindow); + void onWindowUpdate(PHLWINDOW pWindow); void uncacheDecoration(IHyprWindowDecoration* deco); - SWindowDecorationExtents getWindowDecorationReserved(CWindow* pWindow); - SWindowDecorationExtents getWindowDecorationExtents(CWindow* pWindow, bool inputOnly = false); - CBox getBoxWithIncludedDecos(CWindow* pWindow); + SWindowDecorationExtents getWindowDecorationReserved(PHLWINDOW pWindow); + SWindowDecorationExtents getWindowDecorationExtents(PHLWINDOW pWindow, bool inputOnly = false); + CBox getBoxWithIncludedDecos(PHLWINDOW pWindow); void repositionDeco(IHyprWindowDecoration* deco); CBox getWindowDecorationBox(IHyprWindowDecoration* deco); - void forceRecalcFor(CWindow* pWindow); + void forceRecalcFor(PHLWINDOW pWindow); private: struct SWindowPositioningData { - CWindow* pWindow = nullptr; + PHLWINDOWREF pWindow; IHyprWindowDecoration* pDecoration = nullptr; SDecorationPositioningInfo positioningInfo; SDecorationPositioningReply lastReply; @@ -87,13 +90,13 @@ class CDecorationPositioner { bool needsRecalc = false; }; - std::unordered_map<CWindow*, SWindowData> m_mWindowDatas; - std::vector<std::unique_ptr<SWindowPositioningData>> m_vWindowPositioningDatas; + std::map<PHLWINDOWREF, SWindowData, std::owner_less<PHLWINDOWREF>> m_mWindowDatas; + std::vector<std::unique_ptr<SWindowPositioningData>> m_vWindowPositioningDatas; - SWindowPositioningData* getDataFor(IHyprWindowDecoration* pDecoration, CWindow* pWindow); - void onWindowUnmap(CWindow* pWindow); - void onWindowMap(CWindow* pWindow); - void sanitizeDatas(); + SWindowPositioningData* getDataFor(IHyprWindowDecoration* pDecoration, PHLWINDOW pWindow); + void onWindowUnmap(PHLWINDOW pWindow); + void onWindowMap(PHLWINDOW pWindow); + void sanitizeDatas(); }; inline std::unique_ptr<CDecorationPositioner> g_pDecorationPositioner;
\ No newline at end of file |
