mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-07 18:05:58 +01:00
allow 360 degrees of freedom in gradients
This commit is contained in:
parent
493fc00953
commit
afe688e6ab
2 changed files with 19 additions and 2 deletions
|
@ -852,7 +852,7 @@ void CHyprOpenGLImpl::renderBorder(wlr_box* box, const CGradientValueData& grad,
|
||||||
|
|
||||||
glUniform4fv(m_RenderData.pCurrentMonData->m_shBORDER1.gradient, grad.m_vColors.size(), (float*)grad.m_vColors.data());
|
glUniform4fv(m_RenderData.pCurrentMonData->m_shBORDER1.gradient, grad.m_vColors.size(), (float*)grad.m_vColors.data());
|
||||||
glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.gradientLength, grad.m_vColors.size());
|
glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.gradientLength, grad.m_vColors.size());
|
||||||
glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.angle, grad.m_fAngle);
|
glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.angle, (int)(grad.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0));
|
||||||
glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.alpha, a);
|
glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.alpha, a);
|
||||||
|
|
||||||
wlr_box transformedBox;
|
wlr_box transformedBox;
|
||||||
|
|
|
@ -23,7 +23,24 @@ vec4 getColorForCoord(vec2 normalizedCoord) {
|
||||||
if (gradientLength < 2)
|
if (gradientLength < 2)
|
||||||
return gradient[0];
|
return gradient[0];
|
||||||
|
|
||||||
float sine = sin(angle);
|
float finalAng = 0.0;
|
||||||
|
|
||||||
|
if (angle > 4.71 /* 270 deg */) {
|
||||||
|
normalizedCoord[1] = 1.0 - normalizedCoord[1];
|
||||||
|
finalAng = 6.28 - angle;
|
||||||
|
} else if (angle > 3.14 /* 180 deg */) {
|
||||||
|
normalizedCoord[0] = 1.0 - normalizedCoord[0];
|
||||||
|
normalizedCoord[1] = 1.0 - normalizedCoord[1];
|
||||||
|
finalAng = angle - 3.14;
|
||||||
|
} else if (angle > 1.57 /* 90 deg */) {
|
||||||
|
normalizedCoord[0] = 1.0 - normalizedCoord[0];
|
||||||
|
finalAng = 3.14 - angle;
|
||||||
|
} else {
|
||||||
|
finalAng = angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
float sine = sin(finalAng);
|
||||||
|
|
||||||
float progress = (normalizedCoord[1] * sine + normalizedCoord[0] * (1.0 - sine)) * float(gradientLength - 1);
|
float progress = (normalizedCoord[1] * sine + normalizedCoord[0] * (1.0 - sine)) * float(gradientLength - 1);
|
||||||
int bottom = int(floor(progress));
|
int bottom = int(floor(progress));
|
||||||
int top = bottom + 1;
|
int top = bottom + 1;
|
||||||
|
|
Loading…
Reference in a new issue