feather_ui/render/
image.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: 2025 Fundament Research Institute <https://fundament.institute>
3
4use super::compositor::CompositorView;
5use crate::resource::Location;
6
7pub struct Instance {
8    pub image: Box<dyn Location>,
9    pub padding: crate::PxPerimeter,
10    pub dpi: f32,
11    pub resize: bool,
12}
13
14impl super::Renderable for Instance {
15    fn render(
16        &self,
17        area: crate::PxRect,
18        driver: &crate::graphics::Driver,
19        compositor: &mut CompositorView<'_>,
20    ) -> Result<(), crate::Error> {
21        let dim = area.dim() - self.padding.bottomright();
22        if dim.width <= 0.0 || dim.height <= 0.0 {
23            return Ok(());
24        }
25
26        driver.load(
27            self.image.as_ref(),
28            dim.ceil().to_i32(),
29            self.dpi,
30            self.resize,
31            |region| {
32                compositor.append_data(
33                    area.topleft() + self.padding.topleft().to_vector(),
34                    dim,
35                    region.uv.min.to_f32(),
36                    region.uv.size().to_f32(),
37                    0xFFFFFFFF,
38                    0.0,
39                    region.index,
40                    false,
41                );
42                Ok(())
43            },
44        )
45    }
46}