From 987617c7235309e1d8c9bbfc1491c0f91201ff0d Mon Sep 17 00:00:00 2001 From: genusistimelord Date: Wed, 21 Feb 2024 09:58:50 -0500 Subject: [PATCH] Fix #77 --- .vscode/launch.json | 18 +++++++++++ Cargo.toml | 1 + src/native/floating_element.rs | 56 ++++++++++++++++++++-------------- 3 files changed, 52 insertions(+), 23 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 49979230..90068c35 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -202,6 +202,24 @@ "args": [], "cwd": "${workspaceFolder}" }, + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'floating_element_overlay'", + "cargo": { + "args": [ + "build", + "--bin=floating_element_overlay", + "--package=floating_element_overlay" + ], + "filter": { + "name": "floating_element_overlay", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, { "type": "lldb", "request": "launch", diff --git a/Cargo.toml b/Cargo.toml index 7318e4f9..08606c04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -90,6 +90,7 @@ members = [ "examples/date_picker", "examples/color_picker", "examples/floating_element", + "examples/floating_element multioverlay", "examples/floating_element_anchors", "examples/grid", "examples/modal", diff --git a/src/native/floating_element.rs b/src/native/floating_element.rs index a8883269..2bc6fe96 100644 --- a/src/native/floating_element.rs +++ b/src/native/floating_element.rs @@ -7,7 +7,8 @@ use super::overlay::floating_element::FloatingElementOverlay; use iced::{ advanced::{ layout::{Limits, Node}, - overlay, renderer, + overlay::{self, Group}, + renderer, widget::{Operation, Tree}, Clipboard, Layout, Shell, Widget, }, @@ -212,31 +213,40 @@ where renderer: &Renderer, translation: Vector, ) -> Option> { - if self.hidden { - return self.underlay.as_widget_mut().overlay( - &mut state.children[0], - layout, - renderer, - translation, - ); + let mut group = Group::new(); + let mut children = state.children.iter_mut(); + + if let Some(underlay) = self.underlay + .as_widget_mut() + .overlay( + children + .next() + .expect("missing underlay in floating element"), + layout, + renderer, + translation, + ) { + group = group.push(underlay); } - if state.children.len() == 2 { - let bounds = layout.bounds(); - - Some(overlay::Element::new(Box::new( - FloatingElementOverlay::new( - layout.position() + translation, - &mut state.children[1], - &mut self.element, - &self.anchor, - &self.offset, - bounds, - ), - ))) - } else { - None + if !self.hidden { + if let Some(el) = children.next() { + let bounds = layout.bounds(); + + group = group.push(overlay::Element::new(Box::new( + FloatingElementOverlay::new( + layout.position() + translation, + el, + &mut self.element, + &self.anchor, + &self.offset, + bounds, + ), + ))); + } } + + Some(group.overlay()) } }