summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-04 11:10:26 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-04 11:10:26 +0200
commit81308a9cc32a9fac71aefd0ecae9f40bc85220cb (patch)
treeb7c7ca9bdfe2c425adca6167b9db63e7bbbcf63c /src/render/Renderer.cpp
parent5dcbce550f0247583789ced52c5ea0bcbde3fc35 (diff)
add position auto for mon config
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp27
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);