From 58833eb1d79d7f03402cee0730c309b79f2e4501 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 7 May 2026 15:21:06 +0100 Subject: layout/scrolling: handle fullscreen manually (#14190) Makes scroll handle fullscreen by itself, allowing for fs scrolls. --- .../tiled/scrolling/ScrollingAlgorithm.hpp | 63 +++++++++++++++------- 1 file changed, 44 insertions(+), 19 deletions(-) (limited to 'src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp') 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 #include namespace Layout::Tiled { @@ -94,23 +95,27 @@ namespace Layout::Tiled { CScrollingAlgorithm(); virtual ~CScrollingAlgorithm(); - virtual void newTarget(SP target); - virtual void movedTarget(SP target, std::optional focalPoint = std::nullopt); - virtual void removeTarget(SP target); + 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(); + virtual void resizeTarget(const Vector2D& Δ, SP target, eRectCorner corner = CORNER_NONE); + virtual void recalculate(); - virtual SP getNextCandidate(SP old); + virtual SP getNextCandidate(SP old); - virtual Config::ErrorResult layoutMsg(const std::string_view& sv); - virtual std::optional predictSizeForNewTarget(); + 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); + virtual void swapTargets(SP a, SP b); + virtual void moveTargetInDirection(SP t, Math::eDirection dir, bool silent); - CBox usableArea(); - SP dataFor(SP t); + virtual eFullscreenRequestResult requestFullscreen(const SFullscreenRequest& request); + virtual SP layoutFullscreenTarget() const; + virtual bool layoutFullscreenCoversMonitor() const; + + CBox usableArea() const; + SP dataFor(SP t) const; enum eInputMode : uint8_t { INPUT_MODE_SOFT = 0, @@ -129,16 +134,36 @@ namespace Layout::Tiled { std::vector configuredWidths; } m_config; - eScrollDirection getDynamicDirection(); + eScrollDirection getDynamicDirection(); + + struct SFullscreenScrollState { + WP target; + std::optional restoreColumnWidth; + }; + + void syncFullscreenTargets(); + SFullscreenScrollState* fullscreenStateForTarget(SP target); + SFullscreenScrollState* fullscreenStateForData(SP target); + SP fullscreenTargetDataForColumn(SP col) const; + bool isFullscreenTarget(SP target) const; + float fullscreenColumnWidth() const; + bool fullscreenColumnCoversMonitor(SP col) const; + void updateFullscreenFade(bool coversMonitor); + void clearFullscreenTarget(SP target = nullptr); + + SP findBestNeighbor(SP pCurrent, SP pTargetCol); + SP closestNode(const Vector2D& posGlobglobgabgalab); + + void focusTargetUpdate(SP target); + void moveTargetTo(SP t, Math::eDirection dir, bool silent); + void focusOnInput(SP target, eInputMode input); - SP findBestNeighbor(SP pCurrent, SP pTargetCol); - SP closestNode(const Vector2D& posGlobglobgabgalab); + void expelTarget(SP tdata, SP srcCol, std::optional insertIdx); - void focusTargetUpdate(SP target); - void moveTargetTo(SP t, Math::eDirection dir, bool silent); - void focusOnInput(SP target, eInputMode input); + float defaultColumnWidth(); - float defaultColumnWidth(); + std::vector m_fullscreenTargets; + bool m_lastFullscreenCover = false; friend struct SScrollingData; }; -- cgit v1.2.3