veloren_voxygen/ui/ice/renderer/widget/
overlay.rs

1use super::super::{super::widget::overlay, IcedRenderer, Primitive};
2use iced::{Element, Layout, Point, Rectangle, mouse::Interaction};
3
4impl overlay::Renderer for IcedRenderer {
5    fn draw<M>(
6        &mut self,
7        defaults: &Self::Defaults,
8        _bounds: Rectangle,
9        cursor_position: Point,
10        viewport: &Rectangle,
11        over: &Element<'_, M, Self>,
12        over_layout: Layout<'_>,
13        under: &Element<'_, M, Self>,
14        under_layout: Layout<'_>,
15    ) -> Self::Output {
16        let (under, under_mouse_interaction) =
17            under.draw(self, defaults, under_layout, cursor_position, viewport);
18
19        let (over, over_mouse_interaction) =
20            over.draw(self, defaults, over_layout, cursor_position, viewport);
21
22        // TODO: this isn't perfect but should be obselete when iced gets layer support
23        let mouse_interaction = if over_mouse_interaction == Interaction::Idle {
24            under_mouse_interaction
25        } else {
26            over_mouse_interaction
27        };
28
29        let prim = Primitive::Group {
30            primitives: vec![under, over],
31        };
32
33        (prim, mouse_interaction)
34    }
35}