From ccabd97be3f3dfa49726d771b6bdc350dd3a4033 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Thu, 2 May 2024 16:05:56 +0100 Subject: [PATCH] config: add screencopy:max_fps --- src/core/PortalManager.cpp | 1 + src/portals/Screencopy.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/core/PortalManager.cpp b/src/core/PortalManager.cpp index 7d7835c..70624d0 100644 --- a/src/core/PortalManager.cpp +++ b/src/core/PortalManager.cpp @@ -212,6 +212,7 @@ CPortalManager::CPortalManager() { m_sConfig.config = std::make_unique(path.c_str(), Hyprlang::SConfigOptions{.allowMissingConfig = true}); m_sConfig.config->addConfigValue("general:toplevel_dynamic_bind", Hyprlang::INT{0L}); + m_sConfig.config->addConfigValue("screencopy:max_fps", Hyprlang::INT{120L}); m_sConfig.config->commence(); m_sConfig.config->parse(); diff --git a/src/portals/Screencopy.cpp b/src/portals/Screencopy.cpp index 465011b..78ba073 100644 --- a/src/portals/Screencopy.cpp +++ b/src/portals/Screencopy.cpp @@ -491,8 +491,14 @@ void CScreencopyPortal::onSelectSources(sdbus::MethodCall& call) { } else if (SHAREDATA.type == TYPE_OUTPUT || SHAREDATA.type == TYPE_GEOMETRY) { const auto POUTPUT = g_pPortalManager->getOutputFromName(SHAREDATA.output); - if (POUTPUT) - PSESSION->sharingData.framerate = POUTPUT->refreshRate; + if (POUTPUT) { + static auto* const* PFPS = (Hyprlang::INT* const*)g_pPortalManager->m_sConfig.config->getConfigValuePtr("screencopy:max_fps")->getDataStaticPtr(); + + if (**PFPS <= 0) + PSESSION->sharingData.framerate = POUTPUT->refreshRate; + else + PSESSION->sharingData.framerate = std::clamp(POUTPUT->refreshRate, 1.F, (float)**PFPS); + } } PSESSION->selection = SHAREDATA;