From dc6d72158c22d802845679e783231061b717ffd1 Mon Sep 17 00:00:00 2001 From: Honkazel <169346573+Honkazel@users.noreply.github.com> Date: Thu, 6 Feb 2025 16:36:08 +0500 Subject: [PATCH] core: clang-tidy and comp fixes (#679) * clang-tidy and comp fixes * nit changes --- .clang-tidy | 101 ++++++++++++++++++++ src/auth/Pam.cpp | 8 +- src/config/ConfigManager.cpp | 44 ++++----- src/core/AnimationManager.cpp | 4 +- src/core/Egl.cpp | 10 +- src/core/LockSurface.cpp | 4 +- src/core/Timer.cpp | 6 +- src/core/hyprlock.cpp | 24 +++-- src/helpers/Color.cpp | 33 +++---- src/helpers/MiscFunctions.cpp | 8 +- src/renderer/AsyncResourceGatherer.cpp | 6 +- src/renderer/Renderer.cpp | 10 +- src/renderer/Screencopy.cpp | 49 ++++++---- src/renderer/Texture.cpp | 4 +- src/renderer/widgets/Background.cpp | 7 +- src/renderer/widgets/IWidget.cpp | 2 +- src/renderer/widgets/PasswordInputField.cpp | 13 ++- src/renderer/widgets/Shape.cpp | 2 +- 18 files changed, 220 insertions(+), 115 deletions(-) create mode 100644 .clang-tidy diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..f0dfdf1 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,101 @@ +WarningsAsErrors: '*' +HeaderFilterRegex: '.*\.hpp' +FormatStyle: file +Checks: > + -*, + bugprone-*, + -bugprone-easily-swappable-parameters, + -bugprone-forward-declararion-namespace, + -bugprone-forward-declararion-namespace, + -bugprone-macro-parentheses, + -bugprone-narrowing-conversions, + -bugprone-branch-clone, + -bugprone-assignment-in-if-condition, + concurrency-*, + -concurrency-mt-unsafe, + cppcoreguidelines-*, + -cppcoreguidelines-owning-memory, + -cppcoreguidelines-avoid-magic-numbers, + -cppcoreguidelines-pro-bounds-constant-array-index, + -cppcoreguidelines-avoid-const-or-ref-data-members, + -cppcoreguidelines-non-private-member-variables-in-classes, + -cppcoreguidelines-avoid-goto, + -cppcoreguidelines-pro-bounds-array-to-pointer-decay, + -cppcoreguidelines-avoid-do-while, + -cppcoreguidelines-avoid-non-const-global-variables, + -cppcoreguidelines-special-member-functions, + -cppcoreguidelines-explicit-virtual-functions, + -cppcoreguidelines-avoid-c-arrays, + -cppcoreguidelines-pro-bounds-pointer-arithmetic, + -cppcoreguidelines-narrowing-conversions, + -cppcoreguidelines-pro-type-union-access, + -cppcoreguidelines-pro-type-member-init, + -cppcoreguidelines-macro-usage, + -cppcoreguidelines-macro-to-enum, + -cppcoreguidelines-init-variables, + -cppcoreguidelines-pro-type-cstyle-cast, + -cppcoreguidelines-pro-type-vararg, + -cppcoreguidelines-pro-type-reinterpret-cast, + google-global-names-in-headers, + -google-readability-casting, + google-runtime-operator, + misc-*, + -misc-unused-parameters, + -misc-no-recursion, + -misc-non-private-member-variables-in-classes, + -misc-include-cleaner, + -misc-use-anonymous-namespace, + -misc-const-correctness, + modernize-*, + -modernize-return-braced-init-list, + -modernize-use-trailing-return-type, + -modernize-use-using, + -modernize-use-override, + -modernize-avoid-c-arrays, + -modernize-macro-to-enum, + -modernize-loop-convert, + -modernize-use-nodiscard, + -modernize-pass-by-value, + -modernize-use-auto, + performance-*, + -performance-avoid-endl, + -performance-unnecessary-value-param, + portability-std-allocator-const, + readability-*, + -readability-function-cognitive-complexity, + -readability-function-size, + -readability-identifier-length, + -readability-magic-numbers, + -readability-uppercase-literal-suffix, + -readability-braces-around-statements, + -readability-redundant-access-specifiers, + -readability-else-after-return, + -readability-container-data-pointer, + -readability-implicit-bool-conversion, + -readability-avoid-nested-conditional-operator, + -readability-redundant-member-init, + -readability-redundant-string-init, + -readability-avoid-const-params-in-decls, + -readability-named-parameter, + -readability-convert-member-functions-to-static, + -readability-qualified-auto, + -readability-make-member-function-const, + -readability-isolate-declaration, + -readability-inconsistent-declaration-parameter-name, + -clang-diagnostic-error, + +CheckOptions: + performance-for-range-copy.WarnOnAllAutoCopies: true + performance-inefficient-string-concatenation.StrictMode: true + readability-braces-around-statements.ShortStatementLines: 0 + readability-identifier-naming.ClassCase: CamelCase + readability-identifier-naming.ClassIgnoredRegexp: I.* + readability-identifier-naming.ClassPrefix: C # We can't use regex here?!?!?!? + readability-identifier-naming.EnumCase: CamelCase + readability-identifier-naming.EnumPrefix: e + readability-identifier-naming.EnumConstantCase: UPPER_CASE + readability-identifier-naming.FunctionCase: camelBack + readability-identifier-naming.NamespaceCase: CamelCase + readability-identifier-naming.NamespacePrefix: N + readability-identifier-naming.StructPrefix: S + readability-identifier-naming.StructCase: CamelCase diff --git a/src/auth/Pam.cpp b/src/auth/Pam.cpp index 0e63f38..711bc1e 100644 --- a/src/auth/Pam.cpp +++ b/src/auth/Pam.cpp @@ -49,7 +49,7 @@ int conv(int num_msg, const struct pam_message** msg, struct pam_response** resp Debug::log(LOG, "PAM: {}", msg[i]->msg); // Targets this log from pam_faillock: https://github.com/linux-pam/linux-pam/blob/fa3295e079dbbc241906f29bde5fb71bc4172771/modules/pam_faillock/pam_faillock.c#L417 if (const auto MSG = std::string(msg[i]->msg); MSG.contains("left to unlock")) { - CONVERSATIONSTATE->failText = std::move(MSG); + CONVERSATIONSTATE->failText = MSG; CONVERSATIONSTATE->failTextFromPam = true; } break; @@ -65,7 +65,7 @@ CPam::CPam() { m_sPamModule = *PAMMODULE; if (!std::filesystem::exists(std::filesystem::path("/etc/pam.d/") / m_sPamModule)) { - Debug::log(ERR, "Pam module \"/etc/pam.d/{}\" does not exist! Falling back to \"/etc/pam.d/su\"", m_sPamModule); + Debug::log(ERR, R"(Pam module "/etc/pam.d/{}" does not exist! Falling back to "/etc/pam.d/su")", m_sPamModule); m_sPamModule = "su"; } @@ -106,8 +106,8 @@ void CPam::init() { } bool CPam::auth() { - const pam_conv localConv = {conv, (void*)&m_sConversationState}; - pam_handle_t* handle = NULL; + const pam_conv localConv = {.conv = conv, .appdata_ptr = (void*)&m_sConversationState}; + pam_handle_t* handle = nullptr; auto uidPassword = getpwuid(getuid()); RASSERT(uidPassword && uidPassword->pw_name, "Failed to get username (getpwuid)"); diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 528801b..588e196 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -149,7 +148,7 @@ static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** continue; try { - DATA->m_vColors.push_back(CHyprColor(configStringToInt(var))); + DATA->m_vColors.emplace_back(configStringToInt(var)); } catch (std::exception& e) { Debug::log(WARN, "Error parsing gradient {}", V); parseError = "Error parsing gradient " + V + ": " + e.what(); @@ -158,14 +157,14 @@ static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** if (V.empty()) { DATA->m_bIsFallback = true; - DATA->m_vColors.push_back(0); // transparent + DATA->m_vColors.emplace_back(0); // transparent } if (DATA->m_vColors.size() == 0) { Debug::log(WARN, "Error parsing gradient {}", V); parseError = "Error parsing gradient " + V + ": No colors?"; - DATA->m_vColors.push_back(0); // transparent + DATA->m_vColors.emplace_back(0); // transparent } DATA->updateColorsOk(); @@ -322,9 +321,9 @@ void CConfigManager::init() { m_config.addSpecialConfigValue("label", "zindex", Hyprlang::INT{0}); SHADOWABLE("label"); - m_config.registerHandler(&::handleSource, "source", {false}); - m_config.registerHandler(&::handleBezier, "bezier", {false}); - m_config.registerHandler(&::handleAnimation, "animation", {false}); + m_config.registerHandler(&::handleSource, "source", {.allowFlags = false}); + m_config.registerHandler(&::handleBezier, "bezier", {.allowFlags = false}); + m_config.registerHandler(&::handleAnimation, "animation", {.allowFlags = false}); // // Init Animations @@ -369,12 +368,13 @@ std::vector CConfigManager::getWidgetConfigs() { // auto keys = m_config.listKeysForSpecialCategory("background"); + result.reserve(keys.size()); for (auto& k : keys) { // clang-format off result.push_back(CConfigManager::SWidgetConfig{ - "background", - std::any_cast(m_config.getSpecialConfigValue("background", "monitor", k.c_str())), - { + .type = "background", + .monitor = std::any_cast(m_config.getSpecialConfigValue("background", "monitor", k.c_str())), + .values = { {"path", m_config.getSpecialConfigValue("background", "path", k.c_str())}, {"color", m_config.getSpecialConfigValue("background", "color", k.c_str())}, {"blur_size", m_config.getSpecialConfigValue("background", "blur_size", k.c_str())}, @@ -398,9 +398,9 @@ std::vector CConfigManager::getWidgetConfigs() { for (auto& k : keys) { // clang-format off result.push_back(CConfigManager::SWidgetConfig{ - "shape", - std::any_cast(m_config.getSpecialConfigValue("shape", "monitor", k.c_str())), - { + .type = "shape", + .monitor = std::any_cast(m_config.getSpecialConfigValue("shape", "monitor", k.c_str())), + .values = { {"size", m_config.getSpecialConfigValue("shape", "size", k.c_str())}, {"rounding", m_config.getSpecialConfigValue("shape", "rounding", k.c_str())}, {"border_size", m_config.getSpecialConfigValue("shape", "border_size", k.c_str())}, @@ -423,9 +423,9 @@ std::vector CConfigManager::getWidgetConfigs() { for (auto& k : keys) { // clang-format off result.push_back(CConfigManager::SWidgetConfig{ - "image", - std::any_cast(m_config.getSpecialConfigValue("image", "monitor", k.c_str())), - { + .type = "image", + .monitor = std::any_cast(m_config.getSpecialConfigValue("image", "monitor", k.c_str())), + .values = { {"path", m_config.getSpecialConfigValue("image", "path", k.c_str())}, {"size", m_config.getSpecialConfigValue("image", "size", k.c_str())}, {"rounding", m_config.getSpecialConfigValue("image", "rounding", k.c_str())}, @@ -448,9 +448,9 @@ std::vector CConfigManager::getWidgetConfigs() { for (auto& k : keys) { // clang-format off result.push_back(CConfigManager::SWidgetConfig{ - "input-field", - std::any_cast(m_config.getSpecialConfigValue("input-field", "monitor", k.c_str())), - { + .type = "input-field", + .monitor = std::any_cast(m_config.getSpecialConfigValue("input-field", "monitor", k.c_str())), + .values = { {"size", m_config.getSpecialConfigValue("input-field", "size", k.c_str())}, {"inner_color", m_config.getSpecialConfigValue("input-field", "inner_color", k.c_str())}, {"outer_color", m_config.getSpecialConfigValue("input-field", "outer_color", k.c_str())}, @@ -490,9 +490,9 @@ std::vector CConfigManager::getWidgetConfigs() { for (auto& k : keys) { // clang-format off result.push_back(CConfigManager::SWidgetConfig{ - "label", - std::any_cast(m_config.getSpecialConfigValue("label", "monitor", k.c_str())), - { + .type = "label", + .monitor = std::any_cast(m_config.getSpecialConfigValue("label", "monitor", k.c_str())), + .values = { {"position", m_config.getSpecialConfigValue("label", "position", k.c_str())}, {"color", m_config.getSpecialConfigValue("label", "color", k.c_str())}, {"font_size", m_config.getSpecialConfigValue("label", "font_size", k.c_str())}, diff --git a/src/core/AnimationManager.cpp b/src/core/AnimationManager.cpp index a1dc903..498cb83 100644 --- a/src/core/AnimationManager.cpp +++ b/src/core/AnimationManager.cpp @@ -31,7 +31,7 @@ void updateColorVariable(CAnimatedVariable& av, const float POINTY, const auto& L1 = av.begun().asOkLab(); const auto& L2 = av.goal().asOkLab(); - static const auto lerp = [](const float one, const float two, const float progress) -> float { return one + (two - one) * progress; }; + static const auto lerp = [](const float one, const float two, const float progress) -> float { return one + ((two - one) * progress); }; const Hyprgraphics::CColor lerped = Hyprgraphics::CColor::SOkLab{ .l = lerp(L1.l, L2.l, POINTY), @@ -57,7 +57,7 @@ void updateGradientVariable(CAnimatedVariable& av, const flo const auto& L1 = sourceCol.asOkLab(); const auto& L2 = targetCol.asOkLab(); - static const auto lerp = [](const float one, const float two, const float progress) -> float { return one + (two - one) * progress; }; + static const auto lerp = [](const float one, const float two, const float progress) -> float { return one + ((two - one) * progress); }; const Hyprgraphics::CColor lerped = Hyprgraphics::CColor::SOkLab{ .l = lerp(L1.l, L2.l, POINTY), diff --git a/src/core/Egl.cpp b/src/core/Egl.cpp index 4a0d0b3..46f09bd 100644 --- a/src/core/Egl.cpp +++ b/src/core/Egl.cpp @@ -31,21 +31,21 @@ CEGL::CEGL(wl_display* display) { throw std::runtime_error("EGL_EXT_platform_wayland not supported"); eglGetPlatformDisplayEXT = (PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT"); - if (eglGetPlatformDisplayEXT == NULL) + if (eglGetPlatformDisplayEXT == nullptr) throw std::runtime_error("Failed to get eglGetPlatformDisplayEXT"); eglCreatePlatformWindowSurfaceEXT = (PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"); - if (eglCreatePlatformWindowSurfaceEXT == NULL) + if (eglCreatePlatformWindowSurfaceEXT == nullptr) throw std::runtime_error("Failed to get eglCreatePlatformWindowSurfaceEXT"); - eglDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_WAYLAND_EXT, display, NULL); + eglDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_WAYLAND_EXT, display, nullptr); EGLint matched = 0; if (eglDisplay == EGL_NO_DISPLAY) { Debug::log(CRIT, "Failed to create EGL display"); goto error; } - if (eglInitialize(eglDisplay, NULL, NULL) == EGL_FALSE) { + if (eglInitialize(eglDisplay, nullptr, nullptr) == EGL_FALSE) { Debug::log(CRIT, "Failed to initialize EGL"); goto error; } @@ -83,4 +83,4 @@ CEGL::~CEGL() { void CEGL::makeCurrent(EGLSurface surf) { eglMakeCurrent(eglDisplay, surf, surf, eglContext); -} \ No newline at end of file +} diff --git a/src/core/LockSurface.cpp b/src/core/LockSurface.cpp index b00074a..249f133 100644 --- a/src/core/LockSurface.cpp +++ b/src/core/LockSurface.cpp @@ -94,7 +94,7 @@ void CSessionLockSurface::configure(const Vector2D& size_, uint32_t serial_) { if (!eglSurface) { eglSurface = g_pEGL->eglCreatePlatformWindowSurfaceEXT(g_pEGL->eglDisplay, g_pEGL->eglConfig, eglWindow, nullptr); if (!eglSurface) { - Debug::log(CRIT, "Couldn't create eglSurface: {}", (int)eglGetError()); + Debug::log(CRIT, "Couldn't create eglSurface: {}", eglGetError()); // Clean up resources to prevent leaks wl_egl_window_destroy(eglWindow); eglWindow = nullptr; @@ -150,4 +150,4 @@ void CSessionLockSurface::onCallback() { needsFrame = false; render(); } -} \ No newline at end of file +} diff --git a/src/core/Timer.cpp b/src/core/Timer.cpp index 73eee7a..95f25af 100644 --- a/src/core/Timer.cpp +++ b/src/core/Timer.cpp @@ -1,8 +1,8 @@ #include "Timer.hpp" -CTimer::CTimer(std::chrono::system_clock::duration timeout, std::function self, void* data)> cb_, void* data_, bool force) : cb(cb_), data(data_) { - expires = std::chrono::system_clock::now() + timeout; - allowForceUpdate = force; +CTimer::CTimer(std::chrono::system_clock::duration timeout, std::function self, void* data)> cb_, void* data_, bool force) : + cb(cb_), data(data_), allowForceUpdate(force) { + expires = std::chrono::system_clock::now() + timeout; } bool CTimer::passed() { diff --git a/src/core/hyprlock.cpp b/src/core/hyprlock.cpp index 22f64c7..4e2ba05 100644 --- a/src/core/hyprlock.cpp +++ b/src/core/hyprlock.cpp @@ -10,10 +10,10 @@ #include #include #include -#include +#include #include -#include -#include +#include +#include #include #include #include @@ -156,7 +156,7 @@ void CHyprlock::addDmabufListener() { uint64_t modifier; }; // An entry in the table has to be 16 bytes long - assert(sizeof(fm_entry) == 16); + static_assert(sizeof(fm_entry) == 16); uint32_t n_modifiers = dma.formatTableSize / sizeof(fm_entry); fm_entry* fm_entry = (struct fm_entry*)dma.formatTable; @@ -295,7 +295,7 @@ void CHyprlock::run() { }); m_sWaylandState.registry->setGlobalRemove([this](CCWlRegistry* r, uint32_t name) { Debug::log(LOG, " | removed iface {}", name); - auto outputIt = std::find_if(m_vOutputs.begin(), m_vOutputs.end(), [name](const auto& other) { return other->name == name; }); + auto outputIt = std::ranges::find_if(m_vOutputs, [name](const auto& other) { return other->name == name; }); if (outputIt != m_vOutputs.end()) { g_pRenderer->removeWidgetsFor(outputIt->get()->sessionLockSurface.get()); m_vOutputs.erase(outputIt); @@ -377,8 +377,7 @@ void CHyprlock::run() { events = poll(pollfds, fdcount, 5000); if (events < 0) { - if (preparedToRead) - wl_display_cancel_read(m_sWaylandState.display); + wl_display_cancel_read(m_sWaylandState.display); if (errno == EINTR) continue; @@ -421,8 +420,7 @@ void CHyprlock::run() { float least = 10000; for (auto& t : m_vTimers) { const auto TIME = std::clamp(t->leftMs(), 1.f, INFINITY); - if (TIME < least) - least = TIME; + least = std::min(TIME, least); } m_sLoopState.timersMutex.unlock(); @@ -444,7 +442,7 @@ void CHyprlock::run() { while (!m_bTerminate) { std::unique_lock lk(m_sLoopState.eventRequestMutex); - if (m_sLoopState.event == false) + if (!m_sLoopState.event) m_sLoopState.loopCV.wait_for(lk, std::chrono::milliseconds(5000), [this] { return m_sLoopState.event; }); if (m_bTerminate) @@ -545,7 +543,7 @@ void CHyprlock::clearPasswordBuffer() { } void CHyprlock::renderOutput(const std::string& stringPort) { - const auto MON = std::find_if(m_vOutputs.begin(), m_vOutputs.end(), [stringPort](const auto& other) { return other->stringPort == stringPort; }); + const auto MON = std::ranges::find_if(m_vOutputs, [stringPort](const auto& other) { return other->stringPort == stringPort; }); if (MON == m_vOutputs.end() || !MON->get()) return; @@ -604,10 +602,10 @@ void CHyprlock::onKey(uint32_t key, bool down) { return; } - if (down && std::find(m_vPressedKeys.begin(), m_vPressedKeys.end(), key) != m_vPressedKeys.end()) { + if (down && std::ranges::find(m_vPressedKeys, key) != m_vPressedKeys.end()) { Debug::log(ERR, "Invalid key down event (key already pressed?)"); return; - } else if (!down && std::find(m_vPressedKeys.begin(), m_vPressedKeys.end(), key) == m_vPressedKeys.end()) { + } else if (!down && std::ranges::find(m_vPressedKeys, key) == m_vPressedKeys.end()) { Debug::log(ERR, "Invalid key down event (stray release event?)"); return; } diff --git a/src/helpers/Color.cpp b/src/helpers/Color.cpp index d2b6fcd..13564b0 100644 --- a/src/helpers/Color.cpp +++ b/src/helpers/Color.cpp @@ -5,42 +5,33 @@ #define GREEN(c) ((double)(((c) >> 8) & 0xff) / 255.0) #define BLUE(c) ((double)(((c)) & 0xff) / 255.0) -CHyprColor::CHyprColor() {} - -CHyprColor::CHyprColor(float r_, float g_, float b_, float a_) { - r = r_; - g = g_; - b = b_; - a = a_; - - okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab(); +CHyprColor::CHyprColor() { + ; } -CHyprColor::CHyprColor(uint64_t hex) { - r = RED(hex); - g = GREEN(hex); - b = BLUE(hex); - a = ALPHA(hex); - - okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab(); +CHyprColor::CHyprColor(float r_, float g_, float b_, float a_) : r(r_), g(g_), b(b_), a(a_) { + okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{.r = r, .g = g, .b = b}).asOkLab(); } -CHyprColor::CHyprColor(const Hyprgraphics::CColor& color, float a_) { +CHyprColor::CHyprColor(uint64_t hex) : r(RED(hex)), g(GREEN(hex)), b(BLUE(hex)), a(ALPHA(hex)) { + okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{.r = r, .g = g, .b = b}).asOkLab(); +} + +CHyprColor::CHyprColor(const Hyprgraphics::CColor& color, float a_) : a(a_) { const auto SRGB = color.asRgb(); r = SRGB.r; g = SRGB.g; b = SRGB.b; - a = a_; okLab = color.asOkLab(); } uint32_t CHyprColor::getAsHex() const { - return (uint32_t)(a * 255.f) * 0x1000000 + (uint32_t)(r * 255.f) * 0x10000 + (uint32_t)(g * 255.f) * 0x100 + (uint32_t)(b * 255.f) * 0x1; + return ((uint32_t)(a * 255.f) * 0x1000000) + ((uint32_t)(r * 255.f) * 0x10000) + ((uint32_t)(g * 255.f) * 0x100) + ((uint32_t)(b * 255.f) * 0x1); } Hyprgraphics::CColor::SSRGB CHyprColor::asRGB() const { - return {r, g, b}; + return {.r = r, .g = g, .b = b}; } Hyprgraphics::CColor::SOkLab CHyprColor::asOkLab() const { @@ -53,4 +44,4 @@ Hyprgraphics::CColor::SHSL CHyprColor::asHSL() const { CHyprColor CHyprColor::stripA() const { return {r, g, b, 1.F}; -} \ No newline at end of file +} diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index bbdc13b..1a9d3a1 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -57,11 +57,11 @@ int64_t configStringToInt(const std::string& VALUE) { a = std::round(std::stof(trim(rolling.substr(0, rolling.find(',')))) * 255.f); } catch (std::exception& e) { throw std::invalid_argument("failed parsing " + VALUEWITHOUTFUNC); } - return a * (Hyprlang::INT)0x1000000 + r * (Hyprlang::INT)0x10000 + g * (Hyprlang::INT)0x100 + b; + return (a * (Hyprlang::INT)0x1000000) + (r * (Hyprlang::INT)0x10000) + (g * (Hyprlang::INT)0x100) + b; } else if (VALUEWITHOUTFUNC.length() == 8) { const auto RGBA = parseHex(VALUEWITHOUTFUNC); // now we need to RGBA -> ARGB. The config holds ARGB only. - return (RGBA >> 8) + 0x1000000 * (RGBA & 0xFF); + return (RGBA >> 8) + (0x1000000 * (RGBA & 0xFF)); } throw std::invalid_argument("rgba() expects length of 8 characters (4 bytes) or 4 comma separated values"); @@ -79,7 +79,7 @@ int64_t configStringToInt(const std::string& VALUE) { rolling = rolling.substr(rolling.find(',') + 1); auto b = configStringToInt(trim(rolling.substr(0, rolling.find(',')))); - return (Hyprlang::INT)0xFF000000 + r * (Hyprlang::INT)0x10000 + g * (Hyprlang::INT)0x100 + b; + return (Hyprlang::INT)0xFF000000 + (r * (Hyprlang::INT)0x10000) + (g * (Hyprlang::INT)0x100) + b; } else if (VALUEWITHOUTFUNC.length() == 6) { return parseHex(VALUEWITHOUTFUNC) + 0xFF000000; } @@ -136,4 +136,4 @@ int createPoolFile(size_t size, std::string& name) { } return FD; -} \ No newline at end of file +} diff --git a/src/renderer/AsyncResourceGatherer.cpp b/src/renderer/AsyncResourceGatherer.cpp index 0034d06..7bfc401 100644 --- a/src/renderer/AsyncResourceGatherer.cpp +++ b/src/renderer/AsyncResourceGatherer.cpp @@ -130,7 +130,7 @@ void CAsyncResourceGatherer::gather() { } } - while (!g_pHyprlock->m_bTerminate && std::any_of(scframes.begin(), scframes.end(), [](const auto& d) { return !d->m_asset.ready; })) { + while (!g_pHyprlock->m_bTerminate && std::ranges::any_of(scframes, [](const auto& d) { return !d->m_asset.ready; })) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } @@ -319,7 +319,7 @@ void CAsyncResourceGatherer::asyncAssetSpinLock() { while (!g_pHyprlock->m_bTerminate) { std::unique_lock lk(asyncLoopState.requestsMutex); - if (asyncLoopState.pending == false) // avoid a lock if a thread managed to request something already since we .unlock()ed + if (!asyncLoopState.pending) // avoid a lock if a thread managed to request something already since we .unlock()ed asyncLoopState.requestsCV.wait_for(lk, std::chrono::seconds(5), [this] { return asyncLoopState.pending; }); // wait for events asyncLoopState.pending = false; @@ -349,7 +349,7 @@ void CAsyncResourceGatherer::asyncAssetSpinLock() { // plant timer for callback if (r.callback) - g_pHyprlock->addTimer(std::chrono::milliseconds(0), timerCallback, new STimerCallbackData{r.callback, r.callbackData}); + g_pHyprlock->addTimer(std::chrono::milliseconds(0), timerCallback, new STimerCallbackData{.cb = r.callback, .data = r.callbackData}); } } } diff --git a/src/renderer/Renderer.cpp b/src/renderer/Renderer.cpp index c6f50d7..6b75131 100644 --- a/src/renderer/Renderer.cpp +++ b/src/renderer/Renderer.cpp @@ -30,7 +30,7 @@ GLuint compileShader(const GLuint& type, std::string src) { auto shaderSource = src.c_str(); - glShaderSource(shader, 1, (const GLchar**)&shaderSource, nullptr); + glShaderSource(shader, 1, &shaderSource, nullptr); glCompileShader(shader); GLint ok; @@ -44,11 +44,11 @@ GLuint compileShader(const GLuint& type, std::string src) { GLuint createProgram(const std::string& vert, const std::string& frag) { auto vertCompiled = compileShader(GL_VERTEX_SHADER, vert); - RASSERT(vertCompiled, "Compiling shader failed. VERTEX NULL! Shader source:\n\n{}", vert.c_str()); + RASSERT(vertCompiled, "Compiling shader failed. VERTEX NULL! Shader source:\n\n{}", vert); auto fragCompiled = compileShader(GL_FRAGMENT_SHADER, frag); - RASSERT(fragCompiled, "Compiling shader failed. FRAGMENT NULL! Shader source:\n\n{}", frag.c_str()); + RASSERT(fragCompiled, "Compiling shader failed. FRAGMENT NULL! Shader source:\n\n{}", frag); auto prog = glCreateProgram(); glAttachShader(prog, vertCompiled); @@ -78,7 +78,7 @@ CRenderer::CRenderer() { g_pEGL->makeCurrent(nullptr); glEnable(GL_DEBUG_OUTPUT); - glDebugMessageCallback(glMessageCallbackA, 0); + glDebugMessageCallback(glMessageCallbackA, nullptr); GLuint prog = createProgram(QUADVERTSRC, QUADFRAGSRC); rectShader.program = prog; @@ -402,7 +402,7 @@ std::vector>* CRenderer::getOrCreateWidgetsFor(const CS auto CWIDGETS = g_pConfigManager->getWidgetConfigs(); - std::sort(CWIDGETS.begin(), CWIDGETS.end(), [](CConfigManager::SWidgetConfig& a, CConfigManager::SWidgetConfig& b) { + std::ranges::sort(CWIDGETS, [](CConfigManager::SWidgetConfig& a, CConfigManager::SWidgetConfig& b) { return std::any_cast(a.values.at("zindex")) < std::any_cast(b.values.at("zindex")); }); diff --git a/src/renderer/Screencopy.cpp b/src/renderer/Screencopy.cpp index 7e1c458..16e6cd3 100644 --- a/src/renderer/Screencopy.cpp +++ b/src/renderer/Screencopy.cpp @@ -194,11 +194,26 @@ bool CSCDMAFrame::onBufferReady(SPreloadedAsset& asset) { EGLAttrib pitch; EGLAttrib modlo; EGLAttrib modhi; - } attrNames[4] = { - {EGL_DMA_BUF_PLANE0_FD_EXT, EGL_DMA_BUF_PLANE0_OFFSET_EXT, EGL_DMA_BUF_PLANE0_PITCH_EXT, EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT}, - {EGL_DMA_BUF_PLANE1_FD_EXT, EGL_DMA_BUF_PLANE1_OFFSET_EXT, EGL_DMA_BUF_PLANE1_PITCH_EXT, EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT, EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT}, - {EGL_DMA_BUF_PLANE2_FD_EXT, EGL_DMA_BUF_PLANE2_OFFSET_EXT, EGL_DMA_BUF_PLANE2_PITCH_EXT, EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT, EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT}, - {EGL_DMA_BUF_PLANE3_FD_EXT, EGL_DMA_BUF_PLANE3_OFFSET_EXT, EGL_DMA_BUF_PLANE3_PITCH_EXT, EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT, EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT}}; + } attrNames[4] = {{.fd = EGL_DMA_BUF_PLANE0_FD_EXT, + .offset = EGL_DMA_BUF_PLANE0_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE0_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT}, + {.fd = EGL_DMA_BUF_PLANE1_FD_EXT, + .offset = EGL_DMA_BUF_PLANE1_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE1_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT}, + {.fd = EGL_DMA_BUF_PLANE2_FD_EXT, + .offset = EGL_DMA_BUF_PLANE2_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE2_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT}, + {.fd = EGL_DMA_BUF_PLANE3_FD_EXT, + .offset = EGL_DMA_BUF_PLANE3_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE3_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT}}; std::vector attribs = { EGL_WIDTH, m_w, EGL_HEIGHT, m_h, EGL_LINUX_DRM_FOURCC_EXT, m_fmt, @@ -316,10 +331,10 @@ void CSCSHMFrame::convertBuffer() { unsigned char green; unsigned char red; unsigned char alpha; - }* px = (struct pixel*)(data + y * m_w * 4 + x * 4); + }* px = (struct pixel*)(data + (y * m_w * 4) + (x * 4)); // RGBA - *px = {px->red, px->green, px->blue, px->alpha}; + *px = {.blue = px->red, .green = px->green, .red = px->blue, .alpha = px->alpha}; } } } break; @@ -336,10 +351,10 @@ void CSCSHMFrame::convertBuffer() { unsigned char green; unsigned char red; unsigned char alpha; - }* px = (struct pixel*)(data + y * m_w * 4 + x * 4); + }* px = (struct pixel*)(data + (y * m_w * 4) + (x * 4)); - // RGBA - *px = {px->blue, px->green, px->red, px->alpha}; + // BGRA + *px = {.blue = px->blue, .green = px->green, .red = px->red, .alpha = px->alpha}; } } } break; @@ -354,7 +369,7 @@ void CSCSHMFrame::convertBuffer() { for (uint32_t y = 0; y < m_h; ++y) { for (uint32_t x = 0; x < m_w; ++x) { - uint32_t* px = (uint32_t*)(data + y * m_w * 4 + x * 4); + uint32_t* px = (uint32_t*)(data + (y * m_w * 4) + (x * 4)); // conv to 8 bit uint8_t R = (uint8_t)std::round((255.0 * (((*px) & 0b00000000000000000000001111111111) >> 0) / 1023.0)); @@ -387,15 +402,15 @@ void CSCSHMFrame::convertBuffer() { unsigned char blue; unsigned char green; unsigned char red; - }* srcPx = (struct pixel3*)((char*)m_shmData + y * m_stride + x * 3); + }* srcPx = (struct pixel3*)((char*)m_shmData + (y * m_stride) + (x * 3)); struct pixel4 { // little-endian ARGB unsigned char blue; unsigned char green; unsigned char red; unsigned char alpha; - }* dstPx = (struct pixel4*)((char*)m_convBuffer + y * NEWSTRIDE + x * 4); - *dstPx = {srcPx->blue, srcPx->green, srcPx->red, 0xFF}; + }* dstPx = (struct pixel4*)((char*)m_convBuffer + (y * NEWSTRIDE) + (x * 4)); + *dstPx = {.blue = srcPx->blue, .green = srcPx->green, .red = srcPx->red, .alpha = 0xFF}; } } } break; @@ -408,15 +423,15 @@ void CSCSHMFrame::convertBuffer() { unsigned char red; unsigned char green; unsigned char blue; - }* srcPx = (struct pixel3*)((char*)m_shmData + y * m_stride + x * 3); + }* srcPx = (struct pixel3*)((char*)m_shmData + (y * m_stride) + (x * 3)); struct pixel4 { // big-endian ARGB unsigned char alpha; unsigned char red; unsigned char green; unsigned char blue; - }* dstPx = (struct pixel4*)((char*)m_convBuffer + y * NEWSTRIDE + x * 4); - *dstPx = {srcPx->red, srcPx->green, srcPx->blue, 0xFF}; + }* dstPx = (struct pixel4*)((char*)m_convBuffer + (y * NEWSTRIDE) + (x * 4)); + *dstPx = {.alpha = srcPx->red, .red = srcPx->green, .green = srcPx->blue, .blue = 0xFF}; } } } break; diff --git a/src/renderer/Texture.cpp b/src/renderer/Texture.cpp index 166baef..796d146 100644 --- a/src/renderer/Texture.cpp +++ b/src/renderer/Texture.cpp @@ -1,7 +1,7 @@ #include "Texture.hpp" CTexture::CTexture() { - // naffin' + ; // naffin' } CTexture::~CTexture() { @@ -20,4 +20,4 @@ void CTexture::allocate() { if (!m_bAllocated) glGenTextures(1, &m_iTexID); m_bAllocated = true; -} \ No newline at end of file +} diff --git a/src/renderer/widgets/Background.cpp b/src/renderer/widgets/Background.cpp index 998d265..42ec74f 100644 --- a/src/renderer/widgets/Background.cpp +++ b/src/renderer/widgets/Background.cpp @@ -150,7 +150,8 @@ bool CBackground::draw(const SRenderData& data) { HYPRUTILS_TRANSFORM_NORMAL); // this could be omitted but whatever it's only once and makes code cleaner plus less blurring on large texs if (blurPasses > 0) - g_pRenderer->blurFB(blurredFB, CRenderer::SBlurParams{blurSize, blurPasses, noise, contrast, brightness, vibrancy, vibrancy_darkness}); + g_pRenderer->blurFB(blurredFB, CRenderer::SBlurParams{ + .size = blurSize, .passes = blurPasses, .noise = noise, .contrast = contrast, .brightness = brightness, .vibrancy = vibrancy, .vibrancy_darkness = vibrancy_darkness}); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); } @@ -192,7 +193,7 @@ void CBackground::onCrossFadeTimerUpdate() { fade.reset(nullptr); } - if (!(blurPasses > 0 || isScreenshot)) + if (blurPasses <= 0 && !isScreenshot) blurredFB.release(); asset = pendingAsset; @@ -282,4 +283,4 @@ void CBackground::startCrossFadeOrUpdateRender() { } g_pHyprlock->renderOutput(output->stringPort); -} \ No newline at end of file +} diff --git a/src/renderer/widgets/IWidget.cpp b/src/renderer/widgets/IWidget.cpp index ee4afa7..bfff293 100644 --- a/src/renderer/widgets/IWidget.cpp +++ b/src/renderer/widgets/IWidget.cpp @@ -25,7 +25,7 @@ namespace std { Vector2D rotateVector(const Vector2D& vec, const double& ang) { const double COS = std::abs(std::cos(ang)); const double SIN = std::abs(std::sin(ang)); - return Vector2D(vec.x * COS + vec.y * SIN, vec.x * SIN + vec.y * COS); + return Vector2D((vec.x * COS) + (vec.y * SIN), (vec.x * SIN) + (vec.y * COS)); } Vector2D IWidget::posFromHVAlign(const Vector2D& viewport, const Vector2D& size, const Vector2D& offset, const std::string& halign, const std::string& valign, const double& ang) { diff --git a/src/renderer/widgets/PasswordInputField.cpp b/src/renderer/widgets/PasswordInputField.cpp index 4782a03..fb63095 100644 --- a/src/renderer/widgets/PasswordInputField.cpp +++ b/src/renderer/widgets/PasswordInputField.cpp @@ -219,16 +219,16 @@ bool CPasswordInputField::draw(const SRenderData& data) { const auto CURRDOTS = dots.currentAmount->value(); const double DOTPAD = (inputFieldBox.h - passSize.y) / 2.0; - const double DOTAREAWIDTH = inputFieldBox.w - DOTPAD * 2; + const double DOTAREAWIDTH = inputFieldBox.w - (DOTPAD * 2); const int MAXDOTS = std::round(DOTAREAWIDTH * 1.0 / (passSize.x + passSpacing)); const int DOTFLOORED = std::floor(CURRDOTS); const auto DOTALPHA = fontCol.a; // Calculate the total width required for all dots including spaces between them - const double CURRWIDTH = (passSize.x + passSpacing) * CURRDOTS - passSpacing; + const double CURRWIDTH = ((passSize.x + passSpacing) * CURRDOTS) - passSpacing; // Calculate starting x-position to ensure dots stay centered within the input field - double xstart = dots.center ? (DOTAREAWIDTH - CURRWIDTH) / 2.0 + DOTPAD : DOTPAD; + double xstart = dots.center ? ((DOTAREAWIDTH - CURRWIDTH) / 2.0) + DOTPAD : DOTPAD; if (CURRDOTS > MAXDOTS) xstart = (inputFieldBox.w + MAXDOTS * (passSize.x + passSpacing) - passSpacing - 2 * CURRWIDTH) / 2.0; @@ -249,7 +249,7 @@ bool CPasswordInputField::draw(const SRenderData& data) { fontCol.a *= (1 - CURRDOTS + DOTFLOORED) * data.opacity; } - Vector2D dotPosition = inputFieldBox.pos() + Vector2D{xstart + i * (passSize.x + passSpacing), inputFieldBox.h / 2.0 - passSize.y / 2.0}; + Vector2D dotPosition = inputFieldBox.pos() + Vector2D{xstart + (i * (passSize.x + passSpacing)), (inputFieldBox.h / 2.0) - (passSize.y / 2.0)}; CBox box{dotPosition, passSize}; if (!dots.textFormat.empty()) { if (!dots.textAsset) { @@ -339,7 +339,7 @@ void CPasswordInputField::updatePlaceholder() { placeholder.asset = nullptr; placeholder.resourceID = NEWRESOURCEID; - if (std::find(placeholder.registeredResourceIDs.begin(), placeholder.registeredResourceIDs.end(), placeholder.resourceID) != placeholder.registeredResourceIDs.end()) + if (std::ranges::find(placeholder.registeredResourceIDs, placeholder.resourceID) != placeholder.registeredResourceIDs.end()) return; Debug::log(TRACE, "Requesting new placeholder asset: {}", placeholder.resourceID); @@ -362,8 +362,7 @@ void CPasswordInputField::updateWidth() { if (passwordLength == 0 && placeholder.asset) targetSizeX = placeholder.asset->texture.m_vSize.x + size->goal().y; - if (targetSizeX < configSize.x) - targetSizeX = configSize.x; + targetSizeX = std::max(targetSizeX, configSize.x); if (size->goal().x != targetSizeX) { *size = Vector2D{targetSizeX, configSize.y}; diff --git a/src/renderer/widgets/Shape.cpp b/src/renderer/widgets/Shape.cpp index f9f4858..144fe14 100644 --- a/src/renderer/widgets/Shape.cpp +++ b/src/renderer/widgets/Shape.cpp @@ -72,7 +72,7 @@ bool CShape::draw(const SRenderData& data) { const int BORDERROUND = roundingForBorderBox(borderBox, rounding, border); Debug::log(LOG, "round: {}, borderround: {}", ROUND, BORDERROUND); - shapeFB.alloc(borderBox.width + borderBox.x * 2.0, borderBox.height + borderBox.y * 2.0, true); + shapeFB.alloc(borderBox.width + (borderBox.x * 2.0), borderBox.height + (borderBox.y * 2.0), true); g_pRenderer->pushFb(shapeFB.m_iFb); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT);