summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2023-04-17 23:45:03 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2023-04-17 23:45:03 +0100
commit385fe4e301ce2c0a408048f6c3d6724ad78d15d4 (patch)
treec61b58af2fc9947337e41d42bd116f48c927d441 /src/render/Renderer.cpp
parent412d46ff65a5b22abde34f11219e00ce71d22f70 (diff)
events: add render event for plugins
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 44755c1a..e96be9cc 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -124,6 +124,8 @@ bool CHyprRenderer::shouldRenderWindow(CWindow* pWindow) {
void CHyprRenderer::renderWorkspaceWithFullscreenWindow(CMonitor* pMonitor, CWorkspace* pWorkspace, timespec* time) {
CWindow* pWorkspaceWindow = nullptr;
+ EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS);
+
// loop over the tiled windows that are fading out
for (auto& w : g_pCompositor->m_vWindows) {
if (w->m_iWorkspaceID != pMonitor->activeWorkspace)
@@ -201,6 +203,8 @@ void CHyprRenderer::renderWorkspaceWithFullscreenWindow(CMonitor* pMonitor, CWor
renderWindow(w.get(), pMonitor, time, true, RENDER_PASS_ALL);
}
+ EMIT_HOOK_EVENT("render", RENDER_POST_WINDOWS);
+
// and the overlay layers
for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
if (ls->alpha.fl() != 0.f)
@@ -457,6 +461,8 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
CWindow* lastWindow = nullptr;
+ EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS);
+
// Non-floating main
for (auto& w : g_pCompositor->m_vWindows) {
if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut)
@@ -570,6 +576,8 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
renderWindow(w.get(), pMonitor, time, true, RENDER_PASS_ALL);
}
+ EMIT_HOOK_EVENT("render", RENDER_POST_WINDOWS);
+
// Render surfaces above windows for monitor
for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
renderLayer(ls.get(), pMonitor, time);
@@ -842,6 +850,8 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {
return;
}
+ EMIT_HOOK_EVENT("render", RENDER_PRE);
+
const bool UNLOCK_SC = g_pHyprRenderer->m_bSoftwareCursorsLocked;
if (UNLOCK_SC)
wlr_output_lock_software_cursors(pMonitor->output, true);
@@ -902,8 +912,11 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {
g_pHyprOpenGL->begin(pMonitor, &damage);
+ EMIT_HOOK_EVENT("render", RENDER_BEGIN);
+
if (pMonitor->isMirror()) {
g_pHyprOpenGL->renderMirrored();
+ EMIT_HOOK_EVENT("render", RENDER_POST_MIRROR);
} else {
g_pHyprOpenGL->clear(CColor(17.0 / 255.0, 17.0 / 255.0, 17.0 / 255.0, 1.0));
g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper"
@@ -950,6 +963,9 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {
g_pHyprOpenGL->m_RenderData.mouseZoomFactor = std::clamp(*PZOOMFACTOR, 1.f, INFINITY);
else
g_pHyprOpenGL->m_RenderData.mouseZoomFactor = 1.f;
+
+ EMIT_HOOK_EVENT("render", RENDER_LAST_MOMENT);
+
g_pHyprOpenGL->end();
// calc frame damage
@@ -974,6 +990,8 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {
pMonitor->renderingActive = false;
+ EMIT_HOOK_EVENT("render", RENDER_POST);
+
wlr_damage_ring_rotate(&pMonitor->damage);
if (!wlr_output_commit(pMonitor->output)) {