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()
|
||||
}
|
||||
|
||||
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>(
|
||||
renderer: &R,
|
||||
key: impl Into<Key>,
|
||||
|
|
@ -174,12 +189,6 @@ impl IndicatorShader {
|
|||
.is_none()
|
||||
{
|
||||
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 elem = PixelShaderElement::new(
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ float rounded_box(vec2 center, vec2 size, float radius) {
|
|||
}
|
||||
|
||||
void main() {
|
||||
vec2 center = size / 2.0 - vec2(0.5);
|
||||
vec2 center = size / 2.0;
|
||||
vec2 location = v_coords * size;
|
||||
vec4 mix_color;
|
||||
|
||||
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);
|
||||
|
||||
|
|
|
|||
|
|
@ -379,7 +379,7 @@ impl FloatingLayout {
|
|||
);
|
||||
if focused == Some(elem) {
|
||||
if indicator_thickness > 0 {
|
||||
let element = IndicatorShader::element(
|
||||
let element = IndicatorShader::focus_element(
|
||||
renderer,
|
||||
elem.clone(),
|
||||
Rectangle::from_loc_and_size(
|
||||
|
|
|
|||
|
|
@ -2148,7 +2148,7 @@ where
|
|||
|
||||
if focused == Some(mapped) {
|
||||
if indicator_thickness > 0 {
|
||||
let element = IndicatorShader::element(
|
||||
let element = IndicatorShader::focus_element(
|
||||
renderer,
|
||||
mapped.clone(),
|
||||
geo,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue