63 lines
1.4 KiB
GLSL
63 lines
1.4 KiB
GLSL
#version 100
|
|
|
|
precision mediump float;
|
|
|
|
uniform bool has_background_image;
|
|
uniform vec4 background_color;
|
|
|
|
uniform float border_width;
|
|
uniform vec4 border_color;
|
|
uniform vec2 widget_size;
|
|
|
|
uniform bool has_icon;
|
|
|
|
uniform bool has_scrollbar;
|
|
uniform vec2 scrollbar_position;
|
|
uniform vec2 scrollbar_size;
|
|
|
|
uniform sampler2D background_image;
|
|
uniform sampler2D icons;
|
|
|
|
varying vec2 f_uv;
|
|
varying vec2 f_icon_uv;
|
|
|
|
void main ()
|
|
{
|
|
vec2 border_uv = vec2 (border_width) / widget_size;
|
|
|
|
float x_border = step (f_uv.x, border_uv.x) + step (1.0 - border_uv.x, f_uv.x);
|
|
float y_border = step (f_uv.y, border_uv.y) + step (1.0 - border_uv.y, f_uv.y);
|
|
float is_border = clamp (x_border + y_border, 0.0, 1.0);
|
|
|
|
vec4 bgc = has_background_image ? texture2D (background_image, f_uv) : background_color;
|
|
vec4 base_color = mix (bgc, border_color, is_border);
|
|
|
|
if (is_border > 0.5)
|
|
{
|
|
gl_FragColor = base_color;
|
|
return;
|
|
}
|
|
|
|
if (has_scrollbar) {
|
|
bool in_scrollbar =
|
|
f_uv.x >= scrollbar_position.x &&
|
|
f_uv.x <= (scrollbar_position.x + scrollbar_size.x) &&
|
|
f_uv.y >= scrollbar_position.y &&
|
|
f_uv.y <= (scrollbar_position.y + scrollbar_size.y);
|
|
|
|
if (in_scrollbar) {
|
|
gl_FragColor = vec4 (1, 1, 1, 1);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (has_icon)
|
|
{
|
|
vec4 fg = texture2D (icons, f_icon_uv);
|
|
gl_FragColor = mix (base_color, fg, fg.a);
|
|
base_color = mix (base_color, fg, fg.a);
|
|
}
|
|
|
|
gl_FragColor = base_color;
|
|
}
|