From d0ff0c0990db230999cc918f1d6230c4a18d08c8 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sun, 29 May 2022 12:27:45 +0200 Subject: Added basic monitor transforms, has bugs blur doesnt work on transformed outputs full damage tracking issues --- src/render/Renderer.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/render/Renderer.cpp') 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); -- cgit v1.2.3 From 9842730f570b118275191fd2b3e8910648ab7b05 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sun, 29 May 2022 15:44:30 +0200 Subject: Added fullscreen types, maximize and full --- src/render/Renderer.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/render/Renderer.cpp') diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 52a17808..02824920 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -57,7 +57,7 @@ void CHyprRenderer::renderWorkspaceWithFullscreenWindow(SMonitor* pMonitor, CWor continue; // found it! - renderWindow(&w, pMonitor, time, false); + renderWindow(&w, pMonitor, time, pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL); pWorkspaceWindow = &w; } @@ -71,6 +71,13 @@ void CHyprRenderer::renderWorkspaceWithFullscreenWindow(SMonitor* pMonitor, CWor } // and the overlay layers + if (pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL) { + // on non-full we draw the bar and shit + for (auto& ls : pMonitor->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { + renderLayer(ls, pMonitor, time); + } + } + for (auto& ls : pMonitor->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) { renderLayer(ls, pMonitor, time); } @@ -98,7 +105,7 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, SMonitor* pMonitor, timespec* renderdata.surface = g_pXWaylandManager->getWindowSurface(pWindow); renderdata.w = std::clamp(pWindow->m_vRealSize.vec().x, (double)5, (double)1337420); // clamp the size to min 5, renderdata.h = std::clamp(pWindow->m_vRealSize.vec().y, (double)5, (double)1337420); // otherwise we'll have issues later with invalid boxes - renderdata.dontRound = pWindow->m_bIsFullscreen; + renderdata.dontRound = pWindow->m_bIsFullscreen && PWORKSPACE->m_efFullscreenMode == FULLSCREEN_FULL; renderdata.fadeAlpha = pWindow->m_fAlpha.fl() * (PWORKSPACE->m_fAlpha.fl() / 255.f); renderdata.alpha = pWindow->m_bIsFullscreen ? g_pConfigManager->getFloat("decoration:fullscreen_opacity") : pWindow == g_pCompositor->m_pLastWindow ? g_pConfigManager->getFloat("decoration:active_opacity") : g_pConfigManager->getFloat("decoration:inactive_opacity"); renderdata.decorate = decorate && !pWindow->m_bX11DoesntWantBorders; -- cgit v1.2.3