From 306e416802872085c142cf8aabef3e8daadbbc27 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 18 Mar 2025 16:13:11 +0000 Subject: [PATCH] hyprbars: animate bar color with border fixes #304 --- hyprbars/barDeco.cpp | 20 ++++++++++++++++---- hyprbars/barDeco.hpp | 3 +++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/hyprbars/barDeco.cpp b/hyprbars/barDeco.cpp index fbf81e2..dd999b0 100644 --- a/hyprbars/barDeco.cpp +++ b/hyprbars/barDeco.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include "globals.hpp" @@ -15,8 +17,10 @@ CHyprBar::CHyprBar(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow) { m_pWindow = pWindow; - const auto PMONITOR = pWindow->m_pMonitor.lock(); - PMONITOR->scheduledRecalc = true; + static auto* const PCOLOR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_color")->getDataStaticPtr(); + + const auto PMONITOR = pWindow->m_pMonitor.lock(); + PMONITOR->scheduledRecalc = true; //button events m_pMouseButtonCallback = HyprlandAPI::registerCallbackDynamic( @@ -34,6 +38,9 @@ CHyprBar::CHyprBar(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow) { m_pTextTex = makeShared(); m_pButtonsTex = makeShared(); + + g_pAnimationManager->createAnimation(CHyprColor{**PCOLOR}, m_cRealBarColor, g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_NONE); + m_cRealBarColor->setUpdateCallback([&](auto) { damageEntire(); }); } CHyprBar::~CHyprBar() { @@ -487,7 +494,12 @@ void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) { static auto* const PENABLEBLUR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_blur")->getDataStaticPtr(); static auto* const PENABLEBLURGLOBAL = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "decoration:blur:enabled")->getDataStaticPtr(); - CHyprColor color = m_bForcedBarColor.value_or(**PCOLOR); + const CHyprColor DEST_COLOR = m_bForcedBarColor.value_or(**PCOLOR); + if (DEST_COLOR != m_cRealBarColor->goal()) + *m_cRealBarColor = DEST_COLOR; + + CHyprColor color = m_cRealBarColor->value(); + color.a *= a; const bool BUTTONSRIGHT = std::string{*PALIGNBUTTONS} != "left"; const bool SHOULDBLUR = **PENABLEBLUR && **PENABLEBLURGLOBAL && color.a < 1.F; @@ -601,7 +613,7 @@ void CHyprBar::updateWindow(PHLWINDOW pWindow) { } void CHyprBar::damageEntire() { - ; // ignored + g_pHyprRenderer->damageBox(assignedBoxGlobal()); } Vector2D CHyprBar::cursorRelativeToBar() { diff --git a/hyprbars/barDeco.hpp b/hyprbars/barDeco.hpp index cbd7adc..600060a 100644 --- a/hyprbars/barDeco.hpp +++ b/hyprbars/barDeco.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "globals.hpp" #define private public @@ -61,6 +62,8 @@ class CHyprBar : public IHyprWindowDecoration { std::optional m_bForcedBarColor; std::optional m_bForcedTitleColor; + PHLANIMVAR m_cRealBarColor; + Vector2D cursorRelativeToBar(); void renderPass(PHLMONITOR, float const& a);