render: Fixed #108 active hint overlapping
This commit is contained in:
parent
2f6d4da712
commit
bd7a4ca898
4 changed files with 19 additions and 10 deletions
|
|
@ -142,6 +142,21 @@ impl IndicatorShader {
|
||||||
.clone()
|
.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn focus_element<R: AsGlowRenderer>(
|
||||||
|
renderer: &R,
|
||||||
|
key: impl Into<Key>,
|
||||||
|
mut element_geo: Rectangle<i32, Logical>,
|
||||||
|
thickness: u8,
|
||||||
|
alpha: f32,
|
||||||
|
color: [f32; 3],
|
||||||
|
) -> PixelShaderElement {
|
||||||
|
let t = thickness as i32;
|
||||||
|
element_geo.loc -= (t, t).into();
|
||||||
|
element_geo.size += (t * 2, t * 2).into();
|
||||||
|
|
||||||
|
IndicatorShader::element(renderer, key, element_geo, thickness, alpha, color)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn element<R: AsGlowRenderer>(
|
pub fn element<R: AsGlowRenderer>(
|
||||||
renderer: &R,
|
renderer: &R,
|
||||||
key: impl Into<Key>,
|
key: impl Into<Key>,
|
||||||
|
|
@ -174,12 +189,6 @@ impl IndicatorShader {
|
||||||
.is_none()
|
.is_none()
|
||||||
{
|
{
|
||||||
let thickness: f32 = thickness as f32;
|
let thickness: f32 = thickness as f32;
|
||||||
let thickness_loc = (thickness as i32, thickness as i32);
|
|
||||||
let thickness_size = ((thickness * 2.0) as i32, (thickness * 2.0) as i32);
|
|
||||||
let geo = Rectangle::from_loc_and_size(
|
|
||||||
geo.loc - Point::from(thickness_loc),
|
|
||||||
geo.size + Size::from(thickness_size),
|
|
||||||
);
|
|
||||||
let shader = Self::get(renderer);
|
let shader = Self::get(renderer);
|
||||||
|
|
||||||
let elem = PixelShaderElement::new(
|
let elem = PixelShaderElement::new(
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,12 @@ float rounded_box(vec2 center, vec2 size, float radius) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec2 center = size / 2.0 - vec2(0.5);
|
vec2 center = size / 2.0;
|
||||||
vec2 location = v_coords * size;
|
vec2 location = v_coords * size;
|
||||||
vec4 mix_color;
|
vec4 mix_color;
|
||||||
|
|
||||||
float distance = rounded_box(location - center, size / 2.0 - vec2(thickness / 2.0), radius);
|
float distance = rounded_box(location - center, size / 2.0 - vec2(thickness / 2.0), radius);
|
||||||
float smoothedAlpha = 1.0 - smoothstep(0.0, 2.0, abs(distance) - (thickness / 2.0));
|
float smoothedAlpha = 1.0 - smoothstep(0.0, 1.0, abs(distance) - (thickness / 2.0));
|
||||||
|
|
||||||
mix_color = mix(vec4(0.0, 0.0, 0.0, 0.0), vec4(color, alpha), smoothedAlpha);
|
mix_color = mix(vec4(0.0, 0.0, 0.0, 0.0), vec4(color, alpha), smoothedAlpha);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -379,7 +379,7 @@ impl FloatingLayout {
|
||||||
);
|
);
|
||||||
if focused == Some(elem) {
|
if focused == Some(elem) {
|
||||||
if indicator_thickness > 0 {
|
if indicator_thickness > 0 {
|
||||||
let element = IndicatorShader::element(
|
let element = IndicatorShader::focus_element(
|
||||||
renderer,
|
renderer,
|
||||||
elem.clone(),
|
elem.clone(),
|
||||||
Rectangle::from_loc_and_size(
|
Rectangle::from_loc_and_size(
|
||||||
|
|
|
||||||
|
|
@ -2148,7 +2148,7 @@ where
|
||||||
|
|
||||||
if focused == Some(mapped) {
|
if focused == Some(mapped) {
|
||||||
if indicator_thickness > 0 {
|
if indicator_thickness > 0 {
|
||||||
let element = IndicatorShader::element(
|
let element = IndicatorShader::focus_element(
|
||||||
renderer,
|
renderer,
|
||||||
mapped.clone(),
|
mapped.clone(),
|
||||||
geo,
|
geo,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue