Add methods for calculating the size and postion of UI nodes (#7930)

Co-authored-by: François <mockersf@gmail.com>
This commit is contained in:
ickshonpe 2023-03-09 14:12:54 +00:00 committed by GitHub
parent e22572d9a3
commit f554700108
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -7,6 +7,7 @@ use bevy_render::{
color::Color,
texture::{Image, DEFAULT_IMAGE_HANDLE},
};
use bevy_transform::prelude::GlobalTransform;
use serde::{Deserialize, Serialize};
use std::ops::{Div, DivAssign, Mul, MulAssign};
use thiserror::Error;
@ -26,6 +27,22 @@ impl Node {
pub fn size(&self) -> Vec2 {
self.calculated_size
}
/// Returns the logical pixel coordinates of the UI node, based on its `GlobalTransform`.
#[inline]
pub fn logical_rect(&self, transform: &GlobalTransform) -> Rect {
Rect::from_center_size(transform.translation().truncate(), self.size())
}
/// 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 {
let rect = self.logical_rect(transform);
Rect {
min: rect.min / scale_factor,
max: rect.max / scale_factor,
}
}
}
impl Node {