render: Add focus indicator
This commit is contained in:
parent
a8920f533e
commit
9b416b5779
11 changed files with 291 additions and 68 deletions
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::{
|
||||
backend::render::element::AsGlowRenderer,
|
||||
backend::render::{element::AsGlowRenderer, IndicatorShader},
|
||||
shell::{
|
||||
element::{CosmicMapped, CosmicMappedRenderElement},
|
||||
focus::{
|
||||
|
|
@ -1299,6 +1299,7 @@ impl TilingLayout {
|
|||
&self,
|
||||
renderer: &mut R,
|
||||
output: &Output,
|
||||
focused: Option<&CosmicMapped>,
|
||||
) -> Result<Vec<CosmicMappedRenderElement<R>>, OutputNotMapped>
|
||||
where
|
||||
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
||||
|
|
@ -1360,16 +1361,25 @@ impl TilingLayout {
|
|||
})
|
||||
.flatten()
|
||||
.flat_map(|(mapped, loc)| {
|
||||
AsRenderElements::<R>::render_elements::<CosmicMappedRenderElement<R>>(
|
||||
mapped,
|
||||
renderer,
|
||||
loc.to_physical_precise_round(output_scale)
|
||||
- mapped
|
||||
.geometry()
|
||||
.loc
|
||||
.to_physical_precise_round(output_scale),
|
||||
Scale::from(output_scale),
|
||||
)
|
||||
let mut elements =
|
||||
AsRenderElements::<R>::render_elements::<CosmicMappedRenderElement<R>>(
|
||||
mapped,
|
||||
renderer,
|
||||
loc.to_physical_precise_round(output_scale)
|
||||
- mapped
|
||||
.geometry()
|
||||
.loc
|
||||
.to_physical_precise_round(output_scale),
|
||||
Scale::from(output_scale),
|
||||
);
|
||||
if focused == Some(mapped) {
|
||||
let element = IndicatorShader::element(
|
||||
renderer,
|
||||
Rectangle::from_loc_and_size(loc, mapped.geometry().size),
|
||||
);
|
||||
elements.insert(0, element.into());
|
||||
}
|
||||
elements
|
||||
})
|
||||
.collect::<Vec<_>>())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue