mirror of
https://github.com/hyprwm/hyprland-plugins.git
synced 2026-05-07 03:08:00 +02:00
add live previews
This commit is contained in:
parent
84049540a0
commit
4afd874ea9
2 changed files with 33 additions and 10 deletions
|
|
@ -243,21 +243,40 @@ void CScrollOverview::redrawWorkspace(PHLWORKSPACE workspace, bool forcelowres)
|
|||
auto img = image->windowImages.emplace_back(makeShared<SWindowImage>());
|
||||
img->pWindow = w;
|
||||
img->fb.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat);
|
||||
if (!w->m_isX11 && w->m_wlSurface) {
|
||||
img->windowCommit = makeUnique<CHyprSignalListener>(w->m_wlSurface->resource()->m_events.commit.listen([wk = WP<SWindowImage>{img}] {
|
||||
if (!wk || !wk->pWindow)
|
||||
return;
|
||||
|
||||
CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX};
|
||||
g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &img->fb);
|
||||
if (wk->pWindow->m_wlSurface->resource()->m_current.accumulateBufferDamage().empty())
|
||||
return;
|
||||
|
||||
g_pHyprOpenGL->clear(CHyprColor{0, 0, 0, 0});
|
||||
reinterpretPointerCast<CScrollOverview>(g_pOverview)->redrawWindowImage(wk.lock());
|
||||
g_pOverview->damage();
|
||||
}));
|
||||
}
|
||||
|
||||
g_pHyprRenderer->renderWindow(w, pMonitor.lock(), Time::steadyNow(), true, RENDER_PASS_ALL, true, true);
|
||||
|
||||
g_pHyprOpenGL->m_renderData.blockScreenShader = true;
|
||||
g_pHyprRenderer->endRender();
|
||||
redrawWindowImage(img);
|
||||
}
|
||||
|
||||
blockOverviewRendering = false;
|
||||
}
|
||||
|
||||
void CScrollOverview::redrawWindowImage(SP<SWindowImage> img) {
|
||||
if (!img->pWindow)
|
||||
return;
|
||||
|
||||
CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX};
|
||||
g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &img->fb);
|
||||
|
||||
g_pHyprOpenGL->clear(CHyprColor{0, 0, 0, 0});
|
||||
|
||||
g_pHyprRenderer->renderWindow(img->pWindow.lock(), pMonitor.lock(), Time::steadyNow(), true, RENDER_PASS_ALL, true, true);
|
||||
|
||||
g_pHyprOpenGL->m_renderData.blockScreenShader = true;
|
||||
g_pHyprRenderer->endRender();
|
||||
}
|
||||
|
||||
void CScrollOverview::redrawAll(bool forcelowres) {
|
||||
|
||||
for (const auto& img : images) {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include <hyprland/src/render/Framebuffer.hpp>
|
||||
#include <hyprland/src/helpers/AnimatedVariable.hpp>
|
||||
#include <hyprland/src/managers/HookSystemManager.hpp>
|
||||
#include <hyprland/src/helpers/signal/Signal.hpp>
|
||||
#include <vector>
|
||||
|
||||
#include "IOverview.hpp"
|
||||
|
|
@ -46,11 +47,14 @@ class CScrollOverview : public IOverview {
|
|||
size_t viewportCurrentWorkspace = 0;
|
||||
|
||||
struct SWindowImage {
|
||||
PHLWINDOWREF pWindow;
|
||||
CFramebuffer fb;
|
||||
bool highlight = false;
|
||||
PHLWINDOWREF pWindow;
|
||||
CFramebuffer fb;
|
||||
bool highlight = false;
|
||||
UP<CHyprSignalListener> windowCommit;
|
||||
};
|
||||
|
||||
void redrawWindowImage(SP<SWindowImage>);
|
||||
|
||||
struct SWorkspaceImage {
|
||||
PHLWORKSPACE pWorkspace;
|
||||
CBox box;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue