Warning, /plasma/plasma-workspace/lookandfeel/components/UserDelegate.frag is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2014 David Edmundson <davidedmundson@kde.org>
0003 SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
0004 SPDX-FileCopyrightText: 2023 David Redondo <kde@david-redondo.de>
0005
0006 SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 //draw a circle with an antialiased border
0009 //innerRadius = size of the inner circle with contents
0010 //outerRadius = size of the border
0011 //blend = area to blend between two colours
0012 //all sizes are normalised so 0.5 == half the width of the texture
0013
0014 //if copying into another project don't forget to connect themeChanged to update()
0015 //but in SDDM that's a bit pointless
0016
0017 #version 440
0018 layout(location = 0) in vec2 qt_TexCoord0;
0019 layout(std140, binding = 0) uniform buf {
0020 mat4 qt_Matrix;
0021 float qt_Opacity;
0022 vec4 colorBorder;
0023 };
0024 layout(binding = 1) uniform sampler2D source;
0025 layout(location = 0) out vec4 fragColor;
0026
0027
0028 const highp float blend = 0.01;
0029 const highp float innerRadius = 0.47;
0030 const highp float outerRadius = 0.49;
0031 const lowp vec4 colorEmpty = vec4(0.0, 0.0, 0.0, 0.0);
0032
0033 void main() {
0034 lowp vec4 colorSource = texture(source, qt_TexCoord0);
0035
0036 highp vec2 m = qt_TexCoord0 - vec2(0.5, 0.5);
0037 highp float dist = sqrt(m.x * m.x + m.y * m.y);
0038
0039 if (dist < innerRadius)
0040 fragColor = colorSource;
0041 else if (dist < innerRadius + blend)
0042 fragColor = mix(colorSource, colorBorder, ((dist - innerRadius) / blend));
0043 else if (dist < outerRadius)
0044 fragColor = colorBorder;
0045 else if (dist < outerRadius + blend)
0046 fragColor = mix(colorBorder, colorEmpty, ((dist - outerRadius) / blend));
0047 else
0048 fragColor = colorEmpty;
0049
0050 fragColor = fragColor * qt_Opacity;
0051 }