Fix bevy_ui compile error when bevy_picking feature is disabled (#15053)
				
					
				
			# Objective #14957 added the `pick_rounded_rect` function to `bevy_ui` in the `picking_backend` module, which is gated behind the `bevy_picking` feature. This function is used in that module, as well as in the `focus` module. The latter usage is not gated behind the `bevy_picking` feature, causing a compile error when the feature is disabled. ## Solution Move the `pick_rounded_rect` function out of the `picking_backend` module, as it does not depend on anything defined in that module. I put it in `lib.rs` but it could reasonably be moved somewhere else instead. ## Testing Encountered this compile error in a project and confirmed that this patch fixes it.
This commit is contained in:
		
							parent
							
								
									cb221d8852
								
							
						
					
					
						commit
						54aa45e62f
					
				| @ -1,6 +1,5 @@ | |||||||
| use crate::{ | use crate::{ | ||||||
|     picking_backend::pick_rounded_rect, CalculatedClip, DefaultUiCamera, Node, TargetCamera, |     CalculatedClip, DefaultUiCamera, Node, ResolvedBorderRadius, TargetCamera, UiScale, UiStack, | ||||||
|     UiScale, UiStack, |  | ||||||
| }; | }; | ||||||
| use bevy_ecs::{ | use bevy_ecs::{ | ||||||
|     change_detection::DetectChangesMut, |     change_detection::DetectChangesMut, | ||||||
| @ -343,3 +342,26 @@ pub fn ui_focus_system( | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // Returns true if `point` (relative to the rectangle's center) is within the bounds of a rounded rectangle with
 | ||||||
|  | // the given size and border radius.
 | ||||||
|  | //
 | ||||||
|  | // Matches the sdf function in `ui.wgsl` that is used by the UI renderer to draw rounded rectangles.
 | ||||||
|  | pub(crate) fn pick_rounded_rect( | ||||||
|  |     point: Vec2, | ||||||
|  |     size: Vec2, | ||||||
|  |     border_radius: ResolvedBorderRadius, | ||||||
|  | ) -> bool { | ||||||
|  |     let s = point.signum(); | ||||||
|  |     let r = (border_radius.top_left * (1. - s.x) * (1. - s.y) | ||||||
|  |         + border_radius.top_right * (1. + s.x) * (1. - s.y) | ||||||
|  |         + border_radius.bottom_right * (1. + s.x) * (1. + s.y) | ||||||
|  |         + border_radius.bottom_left * (1. - s.x) * (1. + s.y)) | ||||||
|  |         / 4.; | ||||||
|  | 
 | ||||||
|  |     let corner_to_point = point.abs() - 0.5 * size; | ||||||
|  |     let q = corner_to_point + r; | ||||||
|  |     let l = q.max(Vec2::ZERO).length(); | ||||||
|  |     let m = q.max_element().min(0.); | ||||||
|  |     l + m - r < 0. | ||||||
|  | } | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ | |||||||
| #![allow(clippy::too_many_arguments)] | #![allow(clippy::too_many_arguments)] | ||||||
| #![deny(missing_docs)] | #![deny(missing_docs)] | ||||||
| 
 | 
 | ||||||
| use crate::{prelude::*, UiStack}; | use crate::{focus::pick_rounded_rect, prelude::*, UiStack}; | ||||||
| use bevy_app::prelude::*; | use bevy_app::prelude::*; | ||||||
| use bevy_ecs::{prelude::*, query::QueryData}; | use bevy_ecs::{prelude::*, query::QueryData}; | ||||||
| use bevy_math::Vec2; | use bevy_math::Vec2; | ||||||
| @ -217,26 +217,3 @@ pub fn ui_picking( | |||||||
|         output.send(PointerHits::new(*pointer, picks, order)); |         output.send(PointerHits::new(*pointer, picks, order)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| // Returns true if `point` (relative to the rectangle's center) is within the bounds of a rounded rectangle with
 |  | ||||||
| // the given size and border radius.
 |  | ||||||
| //
 |  | ||||||
| // Matches the sdf function in `ui.wgsl` that is used by the UI renderer to draw rounded rectangles.
 |  | ||||||
| pub(crate) fn pick_rounded_rect( |  | ||||||
|     point: Vec2, |  | ||||||
|     size: Vec2, |  | ||||||
|     border_radius: ResolvedBorderRadius, |  | ||||||
| ) -> bool { |  | ||||||
|     let s = point.signum(); |  | ||||||
|     let r = (border_radius.top_left * (1. - s.x) * (1. - s.y) |  | ||||||
|         + border_radius.top_right * (1. + s.x) * (1. - s.y) |  | ||||||
|         + border_radius.bottom_right * (1. + s.x) * (1. + s.y) |  | ||||||
|         + border_radius.bottom_left * (1. - s.x) * (1. + s.y)) |  | ||||||
|         / 4.; |  | ||||||
| 
 |  | ||||||
|     let corner_to_point = point.abs() - 0.5 * size; |  | ||||||
|     let q = corner_to_point + r; |  | ||||||
|     let l = q.max(Vec2::ZERO).length(); |  | ||||||
|     let m = q.max_element().min(0.); |  | ||||||
|     l + m - r < 0. |  | ||||||
| } |  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 BigWingBeat
						BigWingBeat