Skip to content

Commit a98c16d

Browse files
committed
hyprbars: add an option to blur the bar
fixes #61
1 parent 8a29b42 commit a98c16d

File tree

5 files changed

+36
-15
lines changed

5 files changed

+36
-15
lines changed

hyprbars/BarPassElement.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,19 @@ void CBarPassElement::draw(const CRegion& damage) {
1111
}
1212

1313
bool CBarPassElement::needsLiveBlur() {
14-
return false;
14+
static auto* const PCOLOR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_color")->getDataStaticPtr();
15+
static auto* const PENABLEBLUR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_blur")->getDataStaticPtr();
16+
static auto* const PENABLEBLURGLOBAL = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "decoration:blur:enabled")->getDataStaticPtr();
17+
18+
CHyprColor color = data.deco->m_bForcedBarColor.value_or(**PCOLOR);
19+
color.a *= data.a;
20+
const bool SHOULDBLUR = **PENABLEBLUR && **PENABLEBLURGLOBAL && color.a < 1.F;
21+
22+
return SHOULDBLUR;
23+
}
24+
25+
std::optional<CBox> CBarPassElement::boundingBox() {
26+
return data.deco->assignedBoxGlobal().translate(-g_pHyprOpenGL->m_RenderData.pMonitor->vecPosition);
1527
}
1628

1729
bool CBarPassElement::needsPrecomputeBlur() {

hyprbars/BarPassElement.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ class CBarPassElement : public IPassElement {
1313
CBarPassElement(const SBarData& data_);
1414
virtual ~CBarPassElement() = default;
1515

16-
virtual void draw(const CRegion& damage);
17-
virtual bool needsLiveBlur();
18-
virtual bool needsPrecomputeBlur();
16+
virtual void draw(const CRegion& damage);
17+
virtual bool needsLiveBlur();
18+
virtual bool needsPrecomputeBlur();
19+
virtual std::optional<CBox> boundingBox();
1920

20-
virtual const char* passName() {
21+
virtual const char* passName() {
2122
return "CBarPassElement";
2223
}
2324

hyprbars/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ plugin {
2626

2727
`bar_height` -> (int) bar's height (default `15`)
2828

29+
`bar_blur` -> (bool) whether to blur the bar. Also requires the global blur to be enabled.
30+
2931
`col.text` -> (col) bar's title text color
3032

3133
`bar_title_enabled` -> (bool) whether to render the title (default `true`)

hyprbars/barDeco.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -409,13 +409,18 @@ void CHyprBar::draw(PHLMONITOR pMonitor, const float& a) {
409409
void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) {
410410
const auto PWINDOW = m_pWindow.lock();
411411

412-
static auto* const PCOLOR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_color")->getDataStaticPtr();
413-
static auto* const PHEIGHT = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_height")->getDataStaticPtr();
414-
static auto* const PPRECEDENCE = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_precedence_over_border")->getDataStaticPtr();
415-
static auto* const PALIGNBUTTONS = (Hyprlang::STRING const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_buttons_alignment")->getDataStaticPtr();
416-
static auto* const PENABLETITLE = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_title_enabled")->getDataStaticPtr();
412+
static auto* const PCOLOR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_color")->getDataStaticPtr();
413+
static auto* const PHEIGHT = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_height")->getDataStaticPtr();
414+
static auto* const PPRECEDENCE = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_precedence_over_border")->getDataStaticPtr();
415+
static auto* const PALIGNBUTTONS = (Hyprlang::STRING const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_buttons_alignment")->getDataStaticPtr();
416+
static auto* const PENABLETITLE = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_title_enabled")->getDataStaticPtr();
417+
static auto* const PENABLEBLUR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_blur")->getDataStaticPtr();
418+
static auto* const PENABLEBLURGLOBAL = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "decoration:blur:enabled")->getDataStaticPtr();
417419

418-
const bool BUTTONSRIGHT = std::string{*PALIGNBUTTONS} != "left";
420+
CHyprColor color = m_bForcedBarColor.value_or(**PCOLOR);
421+
color.a *= a;
422+
const bool BUTTONSRIGHT = std::string{*PALIGNBUTTONS} != "left";
423+
const bool SHOULDBLUR = **PENABLEBLUR && **PENABLEBLURGLOBAL && color.a < 1.F;
419424

420425
if (**PHEIGHT < 1) {
421426
m_iLastHeight = **PHEIGHT;
@@ -429,9 +434,6 @@ void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) {
429434

430435
const auto scaledRounding = ROUNDING > 0 ? ROUNDING * pMonitor->scale - 2 /* idk why but otherwise it looks bad due to the gaps */ : 0;
431436

432-
CHyprColor color = m_bForcedBarColor.value_or(**PCOLOR);
433-
color.a *= a;
434-
435437
m_seExtents = {{0, **PHEIGHT}, {}};
436438

437439
const auto DECOBOX = assignedBoxGlobal();
@@ -475,7 +477,10 @@ void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) {
475477
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
476478
}
477479

478-
g_pHyprOpenGL->renderRect(&titleBarBox, color, scaledRounding);
480+
if (SHOULDBLUR)
481+
g_pHyprOpenGL->renderRectWithBlur(&titleBarBox, color, scaledRounding, a);
482+
else
483+
g_pHyprOpenGL->renderRect(&titleBarBox, color, scaledRounding);
479484

480485
// render title
481486
if (**PENABLETITLE && (m_szLastTitle != PWINDOW->m_szTitle || m_bWindowSizeChanged || m_pTextTex->m_iTexID == 0 || m_bTitleColorChanged)) {

hyprbars/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
111111
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:col.text", Hyprlang::INT{*configStringToInt("rgba(ffffffff)")});
112112
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_text_size", Hyprlang::INT{10});
113113
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_title_enabled", Hyprlang::INT{1});
114+
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_blur", Hyprlang::INT{0});
114115
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_text_font", Hyprlang::STRING{"Sans"});
115116
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_text_align", Hyprlang::STRING{"center"});
116117
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_part_of_window", Hyprlang::INT{1});

0 commit comments

Comments
 (0)