diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-08-04 11:10:26 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-08-04 11:10:26 +0200 |
| commit | 81308a9cc32a9fac71aefd0ecae9f40bc85220cb (patch) | |
| tree | b7c7ca9bdfe2c425adca6167b9db63e7bbbcf63c /src/render/Renderer.cpp | |
| parent | 5dcbce550f0247583789ced52c5ea0bcbde3fc35 (diff) | |
add position auto for mon config
Diffstat (limited to 'src/render/Renderer.cpp')
| -rw-r--r-- | src/render/Renderer.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index acd74203..2f5772d5 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -785,7 +785,14 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR } // Check if the rule isn't already applied - if (!force && DELTALESSTHAN(pMonitor->vecPixelSize.x, pMonitorRule->resolution.x, 1) && DELTALESSTHAN(pMonitor->vecPixelSize.y, pMonitorRule->resolution.y, 1) && DELTALESSTHAN(pMonitor->refreshRate, pMonitorRule->refreshRate, 1) && pMonitor->scale == pMonitorRule->scale && DELTALESSTHAN(pMonitor->vecPosition.x, pMonitorRule->offset.x, 1) && DELTALESSTHAN(pMonitor->vecPosition.y, pMonitorRule->offset.y, 1) && pMonitor->transform == pMonitorRule->transform) { + if (!force + && DELTALESSTHAN(pMonitor->vecPixelSize.x, pMonitorRule->resolution.x, 1) + && DELTALESSTHAN(pMonitor->vecPixelSize.y, pMonitorRule->resolution.y, 1) + && DELTALESSTHAN(pMonitor->refreshRate, pMonitorRule->refreshRate, 1) + && pMonitor->scale == pMonitorRule->scale + && ((DELTALESSTHAN(pMonitor->vecPosition.x, pMonitorRule->offset.x, 1) && DELTALESSTHAN(pMonitor->vecPosition.y, pMonitorRule->offset.y, 1)) || pMonitorRule->offset == Vector2D(-1, -1)) + && pMonitor->transform == pMonitorRule->transform) { + Debug::log(LOG, "Not applying a new rule to %s because it's already applied!", pMonitor->szName.c_str()); return true; } @@ -916,9 +923,23 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR pMonitor->vecSize = (Vector2D(x, y) / pMonitor->scale).floor(); pMonitor->vecTransformedSize = Vector2D(x,y); - wlr_output_layout_add(g_pCompositor->m_sWLROutputLayout, pMonitor->output, (int)pMonitorRule->offset.x, (int)pMonitorRule->offset.y); + if (pMonitorRule->offset == Vector2D(-1, -1)) { + // let's find manually a sensible position for it, to the right. + Vector2D finalPos; + + for (auto& m : g_pCompositor->m_vMonitors) { + if (m->ID == pMonitor->ID) + continue; + + if (m->vecPosition.x + std::ceil(m->vecSize.x) > finalPos.x) { + finalPos.x = m->vecPosition.x + std::ceil(m->vecSize.x); + } + } + + pMonitor->vecPosition = finalPos; + } - //wlr_output_damage_add_whole(pMonitor->damage); + wlr_output_layout_add(g_pCompositor->m_sWLROutputLayout, pMonitor->output, (int)pMonitor->vecPosition.x, (int)pMonitor->vecPosition.y); wlr_output_enable(pMonitor->output, true); |
