diff options
Diffstat (limited to 'src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp')
| -rw-r--r-- | src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp | 63 |
1 files changed, 44 insertions, 19 deletions
diff --git a/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp b/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp index 288d15a6..19eb9ba6 100644 --- a/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp +++ b/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp @@ -5,6 +5,7 @@ #include "ScrollTapeController.hpp" #include "../../../../helpers/signal/Signal.hpp" +#include <optional> #include <vector> namespace Layout::Tiled { @@ -94,23 +95,27 @@ namespace Layout::Tiled { CScrollingAlgorithm(); virtual ~CScrollingAlgorithm(); - virtual void newTarget(SP<ITarget> target); - virtual void movedTarget(SP<ITarget> target, std::optional<Vector2D> focalPoint = std::nullopt); - virtual void removeTarget(SP<ITarget> target); + virtual void newTarget(SP<ITarget> target); + virtual void movedTarget(SP<ITarget> target, std::optional<Vector2D> focalPoint = std::nullopt); + virtual void removeTarget(SP<ITarget> target); - virtual void resizeTarget(const Vector2D& Δ, SP<ITarget> target, eRectCorner corner = CORNER_NONE); - virtual void recalculate(); + virtual void resizeTarget(const Vector2D& Δ, SP<ITarget> target, eRectCorner corner = CORNER_NONE); + virtual void recalculate(); - virtual SP<ITarget> getNextCandidate(SP<ITarget> old); + virtual SP<ITarget> getNextCandidate(SP<ITarget> old); - virtual Config::ErrorResult layoutMsg(const std::string_view& sv); - virtual std::optional<Vector2D> predictSizeForNewTarget(); + virtual Config::ErrorResult layoutMsg(const std::string_view& sv); + virtual std::optional<Vector2D> predictSizeForNewTarget(); - virtual void swapTargets(SP<ITarget> a, SP<ITarget> b); - virtual void moveTargetInDirection(SP<ITarget> t, Math::eDirection dir, bool silent); + virtual void swapTargets(SP<ITarget> a, SP<ITarget> b); + virtual void moveTargetInDirection(SP<ITarget> t, Math::eDirection dir, bool silent); - CBox usableArea(); - SP<SScrollingTargetData> dataFor(SP<ITarget> t); + virtual eFullscreenRequestResult requestFullscreen(const SFullscreenRequest& request); + virtual SP<ITarget> layoutFullscreenTarget() const; + virtual bool layoutFullscreenCoversMonitor() const; + + CBox usableArea() const; + SP<SScrollingTargetData> dataFor(SP<ITarget> t) const; enum eInputMode : uint8_t { INPUT_MODE_SOFT = 0, @@ -129,16 +134,36 @@ namespace Layout::Tiled { std::vector<float> configuredWidths; } m_config; - eScrollDirection getDynamicDirection(); + eScrollDirection getDynamicDirection(); + + struct SFullscreenScrollState { + WP<ITarget> target; + std::optional<float> restoreColumnWidth; + }; + + void syncFullscreenTargets(); + SFullscreenScrollState* fullscreenStateForTarget(SP<ITarget> target); + SFullscreenScrollState* fullscreenStateForData(SP<SScrollingTargetData> target); + SP<SScrollingTargetData> fullscreenTargetDataForColumn(SP<SColumnData> col) const; + bool isFullscreenTarget(SP<SScrollingTargetData> target) const; + float fullscreenColumnWidth() const; + bool fullscreenColumnCoversMonitor(SP<SColumnData> col) const; + void updateFullscreenFade(bool coversMonitor); + void clearFullscreenTarget(SP<ITarget> target = nullptr); + + SP<SScrollingTargetData> findBestNeighbor(SP<SScrollingTargetData> pCurrent, SP<SColumnData> pTargetCol); + SP<SScrollingTargetData> closestNode(const Vector2D& posGlobglobgabgalab); + + void focusTargetUpdate(SP<ITarget> target); + void moveTargetTo(SP<ITarget> t, Math::eDirection dir, bool silent); + void focusOnInput(SP<ITarget> target, eInputMode input); - SP<SScrollingTargetData> findBestNeighbor(SP<SScrollingTargetData> pCurrent, SP<SColumnData> pTargetCol); - SP<SScrollingTargetData> closestNode(const Vector2D& posGlobglobgabgalab); + void expelTarget(SP<SScrollingTargetData> tdata, SP<SColumnData> srcCol, std::optional<int64_t> insertIdx); - void focusTargetUpdate(SP<ITarget> target); - void moveTargetTo(SP<ITarget> t, Math::eDirection dir, bool silent); - void focusOnInput(SP<ITarget> target, eInputMode input); + float defaultColumnWidth(); - float defaultColumnWidth(); + std::vector<SFullscreenScrollState> m_fullscreenTargets; + bool m_lastFullscreenCover = false; friend struct SScrollingData; }; |
