// Copyright 2025 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // These are taken from kColorSysOutline const float4 dark_color = vec4(142.0, 145.0, 143.0, 255.0) / 255.0; const float4 light_color = vec4(116.0, 119.0, 117.0, 255.0) / 255.0; const float max_extent = 25.0; const float border_width = 5.0; const float half_pixel = 0.5; uniform float u_time; uniform int u_dark; uniform float u_emphasis; uniform float u_progress; uniform float u_insets; uniform float u_float1; uniform float u_float2; uniform float u_float3; uniform float u_float4; uniform float u_float5; uniform float u_float6; uniform float u_float7; uniform float u_float8; uniform vec2 u_resolution; uniform vec4 u_corner_radius; uniform vec4 u_color1; uniform vec4 u_color2; uniform vec4 u_color3; uniform vec4 u_color4; uniform vec4 u_color5; uniform vec4 u_color6; // Applies a uniform insets to coords. float2 InsetsCoord(float2 coord, float2 resolution, float insets) { return (1.0 - 2.0 * insets / resolution) * coord + insets; } void BorderDistance(float2 coord, out float delta, out float aa) { float2 tl = vec2(border_width) + 2 * u_insets; float2 br = u_resolution - tl; float2 dtl = coord - tl; float2 dbr = br - coord; float4 r = u_corner_radius; if (dtl.y < r.x && dtl.x < r.x) { delta = r.x - distance(coord, tl + vec2(r.x)); aa = half_pixel; } else if (dtl.y < r.y && dbr.x < r.y) { delta = r.y - distance(coord, vec2(br.x - r.y, tl.y + r.y)); aa = half_pixel; } else if (dbr.y < r.w && dtl.x < r.w) { delta = r.w - distance(coord, vec2(tl.x + r.w, br.y - r.w)); aa = half_pixel; } else if (dbr.y < r.z && dbr.x < r.z) { delta = r.z - distance(coord, br - vec2(r.z)); aa = half_pixel; } else { delta = min(min(dtl.x, dtl.y), min(dbr.x, dbr.y)); } } vec4 main(float2 coord) { coord = InsetsCoord(coord, u_resolution, u_insets); float4 border_color = light_color; if (u_dark > 0) { border_color = dark_color; } float extent = max_extent * u_emphasis; float delta = 0.0; float aa = 0.0; BorderDistance(coord, delta, aa); float opacity = 1.0 - min(max(delta / (extent + aa), 0.0), 1.0); return border_color * (opacity * opacity); }