summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-05-29 12:27:45 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-05-29 12:27:45 +0200
commitd0ff0c0990db230999cc918f1d6230c4a18d08c8 (patch)
treec4fa1342fc535ca5882a54c9253c84dd72cc32ef /src/render/Renderer.cpp
parentfdb3f610e564c644ab0fc7fd154562258350084a (diff)
Added basic monitor transforms, has bugs
blur doesnt work on transformed outputs full damage tracking issues
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 86ab125d..52a17808 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -552,7 +552,7 @@ void CHyprRenderer::applyMonitorRule(SMonitor* pMonitor, SMonitorRule* pMonitorR
Debug::log(LOG, "Applying monitor rule for %s", pMonitor->szName.c_str());
// 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)) {
+ 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) {
Debug::log(LOG, "Not applying a new rule to %s because it's already applied!", pMonitor->szName.c_str());
return;
}
@@ -616,8 +616,10 @@ void CHyprRenderer::applyMonitorRule(SMonitor* pMonitor, SMonitorRule* pMonitorR
pMonitor->vecSize = pMonitorRule->resolution;
}
+ wlr_output_set_transform(pMonitor->output, pMonitorRule->transform);
+ pMonitor->transform = pMonitorRule->transform;
+
pMonitor->vecPixelSize = pMonitor->vecSize;
- pMonitor->vecSize = (pMonitor->vecSize / pMonitor->scale).floor();
// update renderer
g_pHyprOpenGL->destroyMonitorResources(pMonitor);
@@ -627,6 +629,11 @@ void CHyprRenderer::applyMonitorRule(SMonitor* pMonitor, SMonitorRule* pMonitorR
return;
}
+ int x, y;
+ wlr_output_transformed_resolution(pMonitor->output, &x, &y);
+ 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);
//wlr_output_damage_add_whole(pMonitor->damage);