diff --git a/.gitignore b/.gitignore index 66d6cb2..8a26db3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ target/ .idea/ book/ -.DS_Store \ No newline at end of file +.DS_Store**/.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a46e2c..22899d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## Unreleased + +### Bug Fixes + +- Fixed so that webview can detect pointers correctly even if it is not the root entity. + ## v0.1.0 First release \ No newline at end of file diff --git a/examples/.DS_Store b/examples/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/examples/.DS_Store and /dev/null differ diff --git a/src/system_param/pointer.rs b/src/system_param/pointer.rs index 68314aa..5d7682f 100644 --- a/src/system_param/pointer.rs +++ b/src/system_param/pointer.rs @@ -14,7 +14,7 @@ pub struct WebviewPointer<'w, 's, C: Component = Camera3d> { (&'static GlobalTransform, &'static WebviewSize), (With, Without), >, - parents: Query<'w, 's, &'static ChildOf>, + parents: Query<'w, 's, (Option<&'static ChildOf>, Has)>, } impl WebviewPointer<'_, '_, C> { @@ -22,7 +22,7 @@ impl WebviewPointer<'_, '_, C> { where P: Clone + Reflect + Debug, { - let webview = self.parents.root_ancestor(trigger.target); + let webview = find_webview_entity(trigger.target, &self.parents)?; let pos = self.pointer_pos(webview, trigger.pointer_location.position)?; Some((webview, pos)) } @@ -44,6 +44,20 @@ impl WebviewPointer<'_, '_, C> { } } +fn find_webview_entity( + entity: Entity, + parents: &Query<(Option<&ChildOf>, Has)>, +) -> Option { + let (child_of, has_webview) = parents.get(entity).ok()?; + if has_webview { + return Some(entity); + } + if let Some(parent) = child_of { + return find_webview_entity(parent.0, parents); + } + None +} + fn pointer_to_webview_uv( cursor_pos: Vec2, camera: &Camera,