summaryrefslogtreecommitdiff
path: root/src/render/decorations
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2026-03-28 18:21:29 +0300
committerGitHub <noreply@github.com>2026-03-28 15:21:29 +0000
commit47e2d599e61c5bcf56a8279eecabf2e5e02617dd (patch)
tree4cc90610ef6a6da980bdf3c6e415631f98c35902 /src/render/decorations
parent5dfb1033a433789021ab9f94b9044e6f32496211 (diff)
renderer/groupbar: fix gradients rendering (#13875)
Diffstat (limited to 'src/render/decorations')
-rw-r--r--src/render/decorations/CHyprGroupBarDecoration.cpp31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp
index 63efc016..09545ca3 100644
--- a/src/render/decorations/CHyprGroupBarDecoration.cpp
+++ b/src/render/decorations/CHyprGroupBarDecoration.cpp
@@ -12,6 +12,8 @@
#include "../../layout/LayoutManager.hpp"
#include "../../layout/supplementary/DragController.hpp"
+using namespace Render;
+
// shared things to conserve VRAM
static SP<ITexture> m_tGradientActive;
static SP<ITexture> m_tGradientInactive;
@@ -24,16 +26,7 @@ CHyprGroupBarDecoration::CHyprGroupBarDecoration(PHLWINDOW pWindow) : IHyprWindo
static auto PGRADIENTS = CConfigValue<Hyprlang::INT>("group:groupbar:enabled");
static auto PENABLED = CConfigValue<Hyprlang::INT>("group:groupbar:gradients");
- if (!m_tGradientActive)
- m_tGradientActive = g_pHyprRenderer->createTexture();
- if (!m_tGradientInactive)
- m_tGradientInactive = g_pHyprRenderer->createTexture();
- if (!m_tGradientLockedActive)
- m_tGradientLockedActive = g_pHyprRenderer->createTexture();
- if (!m_tGradientLockedInactive)
- m_tGradientLockedInactive = g_pHyprRenderer->createTexture();
-
- if (!m_tGradientActive->ok() && *PENABLED && *PGRADIENTS)
+ if (*PENABLED && *PGRADIENTS)
refreshGroupBarGradients();
}
@@ -205,7 +198,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) {
if (*PGRADIENTS) {
const auto GRADIENTTEX = (m_dwGroupMembers[WINDOWINDEX] == Desktop::focusState()->window() ? (GROUPLOCKED ? m_tGradientLockedActive : m_tGradientActive) :
(GROUPLOCKED ? m_tGradientLockedInactive : m_tGradientInactive));
- if (GRADIENTTEX->ok()) {
+ if (GRADIENTTEX && GRADIENTTEX->ok()) {
CTexPassElement::SRenderData data;
data.tex = GRADIENTTEX;
data.blur = blur;
@@ -316,10 +309,10 @@ CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float
#undef RENDER_TEXT
}
-static void renderGradientTo(SP<ITexture> tex, Config::CGradientValueData* grad) {
+static SP<ITexture> renderGradient(Config::CGradientValueData* grad) {
if (!Desktop::focusState()->monitor())
- return;
+ return nullptr;
const Vector2D& bufferSize = Desktop::focusState()->monitor()->m_pixelSize;
@@ -348,11 +341,13 @@ static void renderGradientTo(SP<ITexture> tex, Config::CGradientValueData* grad)
cairo_surface_flush(CAIROSURFACE);
// copy the data to an OpenGL texture we have
- tex = g_pHyprRenderer->createTexture(CAIROSURFACE);
+ auto tex = g_pHyprRenderer->createTexture(CAIROSURFACE);
// delete cairo
cairo_destroy(CAIRO);
cairo_surface_destroy(CAIROSURFACE);
+
+ return tex;
}
void refreshGroupBarGradients() {
@@ -378,10 +373,10 @@ void refreshGroupBarGradients() {
if (!*PENABLED || !*PGRADIENTS)
return;
- renderGradientTo(m_tGradientActive, GROUPCOLACTIVE);
- renderGradientTo(m_tGradientInactive, GROUPCOLINACTIVE);
- renderGradientTo(m_tGradientLockedActive, GROUPCOLACTIVELOCKED);
- renderGradientTo(m_tGradientLockedInactive, GROUPCOLINACTIVELOCKED);
+ m_tGradientActive = renderGradient(GROUPCOLACTIVE);
+ m_tGradientInactive = renderGradient(GROUPCOLINACTIVE);
+ m_tGradientLockedActive = renderGradient(GROUPCOLACTIVELOCKED);
+ m_tGradientLockedInactive = renderGradient(GROUPCOLINACTIVELOCKED);
}
bool CHyprGroupBarDecoration::onBeginWindowDragOnDeco(const Vector2D& pos) {