From a129df58e41873286b9fea3ee8e8e6dcd5c91300 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 4 Oct 2025 18:32:04 +0100 Subject: [PATCH] fixes --- hyprexpo/main.cpp | 4 ++-- hyprexpo/scrollOverview.cpp | 26 ++++++++++++++++++++++++-- hyprexpo/scrollOverview.hpp | 1 + 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/hyprexpo/main.cpp b/hyprexpo/main.cpp index 39d4fd0..696f8a6 100644 --- a/hyprexpo/main.cpp +++ b/hyprexpo/main.cpp @@ -88,7 +88,7 @@ static SDispatchResult onExpoDispatcher(std::string arg) { if (IS_SCROLLING) g_pOverview = makeShared(g_pCompositor->m_lastMonitor->m_activeWorkspace); else - makeShared(g_pCompositor->m_lastMonitor->m_activeWorkspace); + g_pOverview = makeShared(g_pCompositor->m_lastMonitor->m_activeWorkspace); renderingOverview = false; } return {}; @@ -107,7 +107,7 @@ static SDispatchResult onExpoDispatcher(std::string arg) { if (IS_SCROLLING) g_pOverview = makeShared(g_pCompositor->m_lastMonitor->m_activeWorkspace); else - makeShared(g_pCompositor->m_lastMonitor->m_activeWorkspace); + g_pOverview = makeShared(g_pCompositor->m_lastMonitor->m_activeWorkspace); renderingOverview = false; return {}; } diff --git a/hyprexpo/scrollOverview.cpp b/hyprexpo/scrollOverview.cpp index e4876a2..7936374 100644 --- a/hyprexpo/scrollOverview.cpp +++ b/hyprexpo/scrollOverview.cpp @@ -229,6 +229,7 @@ void CScrollOverview::redrawAll(bool forcelowres) { if (backgroundFb.m_size != pMonitor->m_pixelSize) { backgroundFb.release(); backgroundFb.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); + floatingFb.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); } CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX}; @@ -240,6 +241,21 @@ void CScrollOverview::redrawAll(bool forcelowres) { g_pHyprOpenGL->m_renderData.blockScreenShader = true; g_pHyprRenderer->endRender(); + + // render floating as well. For these, we disable decos to match tiled ones. + g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &floatingFb); + + g_pHyprOpenGL->clear(CHyprColor{0, 0, 0, 0}); + + for (const auto& w : g_pCompositor->m_windows) { + if (!validMapped(w) || !w->m_isFloating || w->m_workspace != startedOn) + continue; + + g_pHyprRenderer->renderWindow(w, pMonitor.lock(), Time::steadyNow(), false, RENDER_PASS_ALL); + } + + g_pHyprOpenGL->m_renderData.blockScreenShader = true; + g_pHyprRenderer->endRender(); } void CScrollOverview::damage() { @@ -364,6 +380,12 @@ void CScrollOverview::fullRender() { g_pHyprOpenGL->renderRect(texbox2, CHyprColor{0.5, 0.0, 0.0, 0.5}, CHyprOpenGLImpl::SRectRenderData{.round = 5}); } } + CBox floatbox = CBox{pMonitor->m_position + Vector2D{0.F, yoff / scale->value()}, pMonitor->m_size}; + floatbox.translate(-VIEWPORT_CENTER).scale(scale->value()).translate(VIEWPORT_CENTER).translate(-viewOffset->value() * scale->value()); + floatbox.translate({0.F, yoff}); + floatbox.scale(pMonitor->m_scale).round(); + g_pHyprOpenGL->renderTextureInternal(floatingFb.getTexture(), floatbox, {.damage = &damage, .a = 1.0}); + yoff += pMonitor->m_size.y * scale->value(); } } @@ -377,11 +399,11 @@ static Vector2D lerp(const Vector2D& from, const Vector2D& to, const float perc) } void CScrollOverview::setClosing(bool closing_) { - // TODO: + // TODO: } void CScrollOverview::resetSwipe() { - // TODO: + // TODO: } void CScrollOverview::onSwipeUpdate(double delta) { diff --git a/hyprexpo/scrollOverview.hpp b/hyprexpo/scrollOverview.hpp index d844b99..526ff34 100644 --- a/hyprexpo/scrollOverview.hpp +++ b/hyprexpo/scrollOverview.hpp @@ -56,6 +56,7 @@ class CScrollOverview : public IOverview { }; CFramebuffer backgroundFb; + CFramebuffer floatingFb; Vector2D lastMousePosLocal = Vector2D{};