Fix Node::physical_rect and add a physical_size method (#8551)
				
					
				
			# Objective * `Node::physical_rect` divides the logical size of the node by the scale factor, when it should multiply. * Add a `physical_size` method to `Node` that calculates the physical size of a node. --- ## Changelog * Added a method `physical_size` to `Node` that calculates the physical size of the `Node` based on the given scale factor. * Fixed the `Node::physical_rect` method, the logical size should be multiplied by the scale factor to get the physical size. * Removed the `scale_value` function from the `text` widget module and replaced its usage with `Node::physical_size`. * Derived `Copy` for `Node` (since it's only a wrapped `Vec2`). * Made `Node::size` const.
This commit is contained in:
		
							parent
							
								
									1644426761
								
							
						
					
					
						commit
						a35ed552fa
					
				| @ -15,7 +15,7 @@ use std::ops::{Div, DivAssign, Mul, MulAssign}; | ||||
| use thiserror::Error; | ||||
| 
 | ||||
| /// Describes the size of a UI node
 | ||||
| #[derive(Component, Debug, Clone, Reflect)] | ||||
| #[derive(Component, Debug, Copy, Clone, Reflect)] | ||||
| #[reflect(Component, Default)] | ||||
| pub struct Node { | ||||
|     /// The size of the node as width and height in logical pixels
 | ||||
| @ -26,10 +26,19 @@ pub struct Node { | ||||
| impl Node { | ||||
|     /// The calculated node size as width and height in logical pixels
 | ||||
|     /// automatically calculated by [`super::layout::ui_layout_system`]
 | ||||
|     pub fn size(&self) -> Vec2 { | ||||
|     pub const fn size(&self) -> Vec2 { | ||||
|         self.calculated_size | ||||
|     } | ||||
| 
 | ||||
|     /// Returns the size of the node in physical pixels based on the given scale factor.
 | ||||
|     #[inline] | ||||
|     pub fn physical_size(&self, scale_factor: f64) -> Vec2 { | ||||
|         Vec2::new( | ||||
|             (self.calculated_size.x as f64 * scale_factor) as f32, | ||||
|             (self.calculated_size.y as f64 * scale_factor) as f32, | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
|     /// Returns the logical pixel coordinates of the UI node, based on its [`GlobalTransform`].
 | ||||
|     #[inline] | ||||
|     pub fn logical_rect(&self, transform: &GlobalTransform) -> Rect { | ||||
| @ -38,11 +47,17 @@ impl Node { | ||||
| 
 | ||||
|     /// Returns the physical pixel coordinates of the UI node, based on its [`GlobalTransform`] and the scale factor.
 | ||||
|     #[inline] | ||||
|     pub fn physical_rect(&self, transform: &GlobalTransform, scale_factor: f32) -> Rect { | ||||
|     pub fn physical_rect(&self, transform: &GlobalTransform, scale_factor: f64) -> Rect { | ||||
|         let rect = self.logical_rect(transform); | ||||
|         Rect { | ||||
|             min: rect.min / scale_factor, | ||||
|             max: rect.max / scale_factor, | ||||
|             min: Vec2::new( | ||||
|                 (rect.min.x as f64 * scale_factor) as f32, | ||||
|                 (rect.min.y as f64 * scale_factor) as f32, | ||||
|             ), | ||||
|             max: Vec2::new( | ||||
|                 (rect.max.x as f64 * scale_factor) as f32, | ||||
|                 (rect.max.y as f64 * scale_factor) as f32, | ||||
|             ), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -18,10 +18,6 @@ use bevy_text::{ | ||||
| use bevy_window::{PrimaryWindow, Window}; | ||||
| use taffy::style::AvailableSpace; | ||||
| 
 | ||||
| fn scale_value(value: f32, factor: f64) -> f32 { | ||||
|     (value as f64 * factor) as f32 | ||||
| } | ||||
| 
 | ||||
| /// Text system flags
 | ||||
| ///
 | ||||
| /// Used internally by [`measure_text_system`] and [`text_system`] to schedule text for processing.
 | ||||
| @ -178,10 +174,7 @@ fn queue_text( | ||||
| ) { | ||||
|     // Skip the text node if it is waiting for a new measure func
 | ||||
|     if !text_flags.needs_new_measure_func { | ||||
|         let node_size = Vec2::new( | ||||
|             scale_value(node.size().x, scale_factor), | ||||
|             scale_value(node.size().y, scale_factor), | ||||
|         ); | ||||
|         let physical_node_size = node.physical_size(scale_factor); | ||||
| 
 | ||||
|         match text_pipeline.queue_text( | ||||
|             fonts, | ||||
| @ -189,7 +182,7 @@ fn queue_text( | ||||
|             scale_factor, | ||||
|             text.alignment, | ||||
|             text.linebreak_behavior, | ||||
|             node_size, | ||||
|             physical_node_size, | ||||
|             font_atlas_set_storage, | ||||
|             texture_atlases, | ||||
|             textures, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 ickshonpe
						ickshonpe