summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2023-03-04 00:48:02 +0000
committervaxerski <vaxry@vaxry.net>2023-03-04 00:48:22 +0000
commit1ead6c46f4742c73311071dbae31caa66e40a323 (patch)
treefe641a50bd94837e2ac7a6ae3b9f7e6c63e81e20 /src/render/Renderer.cpp
parentfb45f8f2f9efd988f2f5cef5cf74d6cba19e6b0c (diff)
Mirrors: minor fixes
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 2f458641..0207f5ec 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -659,7 +659,7 @@ void countSubsurfacesIter(wlr_surface* pSurface, int x, int y, void* data) {
}
bool CHyprRenderer::attemptDirectScanout(CMonitor* pMonitor) {
- if (!pMonitor->mirrors.empty())
+ if (!pMonitor->mirrors.empty() || pMonitor->isMirror())
return false; // do not DS if this monitor is being mirrored. Will break the functionality.
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pMonitor->activeWorkspace);
@@ -1116,7 +1116,9 @@ void CHyprRenderer::damageRegion(pixman_region32_t* rg) {
void CHyprRenderer::damageMirrorsWith(CMonitor* pMonitor, pixman_region32_t* pRegion) {
for (auto& mirror : pMonitor->mirrors) {
- Vector2D scale = {mirror->vecSize.x / pMonitor->vecSize.x, mirror->vecSize.y / pMonitor->vecSize.y};
+ Vector2D scale = {mirror->vecSize.x / pMonitor->vecSize.x, mirror->vecSize.y / pMonitor->vecSize.y};
+
+ Debug::log(LOG, "mirrors: dmw %s for %s [%.2f, %.2f]", pMonitor->output->name, mirror->output->name, scale.x, scale.y);
pixman_region32_t rg;
pixman_region32_init(&rg);
@@ -1124,7 +1126,11 @@ void CHyprRenderer::damageMirrorsWith(CMonitor* pMonitor, pixman_region32_t* pRe
wlr_region_scale_xy(&rg, &rg, scale.x, scale.y);
pMonitor->addDamage(&rg);
pixman_region32_fini(&rg);
+
+ g_pCompositor->scheduleFrameForMonitor(mirror);
}
+
+ Debug::log(LOG, "mirrors: dmw %s", pMonitor->output->name);
}
void CHyprRenderer::renderDragIcon(CMonitor* pMonitor, timespec* time) {
@@ -1463,7 +1469,8 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR
g_pHyprOpenGL->destroyMonitorResources(pMonitor);
// updato wlroots
- wlr_output_layout_add(g_pCompositor->m_sWLROutputLayout, pMonitor->output, (int)pMonitor->vecPosition.x, (int)pMonitor->vecPosition.y);
+ if (!pMonitor->isMirror())
+ wlr_output_layout_add(g_pCompositor->m_sWLROutputLayout, pMonitor->output, (int)pMonitor->vecPosition.x, (int)pMonitor->vecPosition.y);
// updato us
arrangeLayersForMonitor(pMonitor->ID);