#pragma once #include "../../TiledAlgorithm.hpp" #include "../../../../helpers/signal/Signal.hpp" #include namespace Layout::Tiled { struct SMonocleTargetData { SMonocleTargetData(SP t) : target(t) { ; } WP target; CBox layoutBox; }; class CMonocleAlgorithm : public ITiledAlgorithm { public: CMonocleAlgorithm(); virtual ~CMonocleAlgorithm(); virtual void newTarget(SP target); virtual void movedTarget(SP target, std::optional focalPoint = std::nullopt); virtual void removeTarget(SP target); virtual void resizeTarget(const Vector2D& Δ, SP target, eRectCorner corner = CORNER_NONE); virtual void recalculate(eRecalculateReason reason = RECALCULATE_REASON_UNKNOWN); virtual SP getNextCandidate(SP old); virtual Config::ErrorResult layoutMsg(const std::string_view& sv); virtual std::optional predictSizeForNewTarget(); virtual void swapTargets(SP a, SP b); virtual void moveTargetInDirection(SP t, Math::eDirection dir, bool silent); private: std::vector> m_targetDatas; CHyprSignalListener m_focusCallback; int m_currentVisibleIndex = 0; SP dataFor(SP t); void cycleNext(); void cyclePrev(); void focusTargetUpdate(SP target); void updateVisible(); SP getVisibleTarget(); }; };