summaryrefslogtreecommitdiff
path: root/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp')
-rw-r--r--src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp63
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;
};