summaryrefslogtreecommitdiff
path: root/src/layout/target/WindowTarget.hpp
blob: e42f4d7807f74ff6a03e71b48237ebdf1f1866d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#pragma once

#include "Target.hpp"

#include "../../desktop/view/Window.hpp"

namespace Layout {

    class CWindowTarget : public ITarget {
      public:
        static SP<ITarget> create(PHLWINDOW w);
        virtual ~CWindowTarget() = default;

        virtual eTargetType                                         type();

        virtual void                                                setPositionGlobal(const STargetBox& box);
        virtual void                                                assignToSpace(const SP<CSpace>& space, std::optional<Vector2D> focalPoint = std::nullopt);
        virtual PHLWINDOW                                           window() const;

        virtual bool                                                floating();
        virtual void                                                setFloating(bool x);
        virtual std::expected<SGeometryRequested, eGeometryFailure> desiredGeometry();
        virtual eFullscreenMode                                     fullscreenMode();
        virtual void                                                setFullscreenMode(eFullscreenMode mode);
        virtual std::optional<Vector2D>                             minSize();
        virtual std::optional<Vector2D>                             maxSize();
        virtual void                                                damageEntire();
        virtual void                                                warpPositionSize();
        virtual void                                                onUpdateSpace();

      private:
        CWindowTarget(PHLWINDOW w);

        Vector2D     clampSizeForDesired(const Vector2D& size) const;

        void         updatePos();

        PHLWINDOWREF m_window;
    };
};