summaryrefslogtreecommitdiff
path: root/src/render/decorations/DecorationPositioner.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2024-04-27 12:43:12 +0100
committerGitHub <noreply@github.com>2024-04-27 12:43:12 +0100
commitbca7804bb6e1bf5ce5a99b9ae4806be25e36993c (patch)
treeebd3a578de1dfe11b54f9440cfc3a408ffa6a620 /src/render/decorations/DecorationPositioner.hpp
parent25aec3ac8ce65ed224f025f8f6dfef73780577a4 (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.hpp31
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