Text responds to scale factor changes (#1769)
Fixes #1768 If the scale factor changes, queue up all text to be drawn instead of just changed text.
This commit is contained in:
parent
9a78addff0
commit
94c4184068
@ -2,7 +2,7 @@ use crate::{CalculatedSize, Node, Style, Val};
|
|||||||
use bevy_asset::Assets;
|
use bevy_asset::Assets;
|
||||||
use bevy_ecs::{
|
use bevy_ecs::{
|
||||||
entity::Entity,
|
entity::Entity,
|
||||||
query::{Changed, Or, Without},
|
query::{Changed, Or, With, Without},
|
||||||
system::{Local, Query, QuerySet, Res, ResMut},
|
system::{Local, Query, QuerySet, Res, ResMut},
|
||||||
};
|
};
|
||||||
use bevy_math::Size;
|
use bevy_math::Size;
|
||||||
@ -45,6 +45,7 @@ pub fn text_constraint(min_size: Val, size: Val, max_size: Val, scale_factor: f6
|
|||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn text_system(
|
pub fn text_system(
|
||||||
mut queued_text: Local<QueuedText>,
|
mut queued_text: Local<QueuedText>,
|
||||||
|
mut last_scale_factor: Local<f64>,
|
||||||
mut textures: ResMut<Assets<Texture>>,
|
mut textures: ResMut<Assets<Texture>>,
|
||||||
fonts: Res<Assets<Font>>,
|
fonts: Res<Assets<Font>>,
|
||||||
windows: Res<Windows>,
|
windows: Res<Windows>,
|
||||||
@ -53,6 +54,7 @@ pub fn text_system(
|
|||||||
mut text_pipeline: ResMut<DefaultTextPipeline>,
|
mut text_pipeline: ResMut<DefaultTextPipeline>,
|
||||||
mut text_queries: QuerySet<(
|
mut text_queries: QuerySet<(
|
||||||
Query<Entity, Or<(Changed<Text>, Changed<Style>)>>,
|
Query<Entity, Or<(Changed<Text>, Changed<Style>)>>,
|
||||||
|
Query<Entity, (With<Text>, With<Style>)>,
|
||||||
Query<(&Text, &Style, &mut CalculatedSize)>,
|
Query<(&Text, &Style, &mut CalculatedSize)>,
|
||||||
)>,
|
)>,
|
||||||
) {
|
) {
|
||||||
@ -64,10 +66,19 @@ pub fn text_system(
|
|||||||
|
|
||||||
let inv_scale_factor = 1. / scale_factor;
|
let inv_scale_factor = 1. / scale_factor;
|
||||||
|
|
||||||
|
#[allow(clippy::float_cmp)]
|
||||||
|
if *last_scale_factor == scale_factor {
|
||||||
// Adds all entities where the text or the style has changed to the local queue
|
// Adds all entities where the text or the style has changed to the local queue
|
||||||
for entity in text_queries.q0_mut().iter_mut() {
|
for entity in text_queries.q0().iter() {
|
||||||
queued_text.entities.push(entity);
|
queued_text.entities.push(entity);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// If the scale factor has changed, queue all text
|
||||||
|
for entity in text_queries.q1().iter() {
|
||||||
|
queued_text.entities.push(entity);
|
||||||
|
}
|
||||||
|
*last_scale_factor = scale_factor;
|
||||||
|
}
|
||||||
|
|
||||||
if queued_text.entities.is_empty() {
|
if queued_text.entities.is_empty() {
|
||||||
return;
|
return;
|
||||||
@ -75,7 +86,7 @@ pub fn text_system(
|
|||||||
|
|
||||||
// Computes all text in the local queue
|
// Computes all text in the local queue
|
||||||
let mut new_queue = Vec::new();
|
let mut new_queue = Vec::new();
|
||||||
let query = text_queries.q1_mut();
|
let query = text_queries.q2_mut();
|
||||||
for entity in queued_text.entities.drain(..) {
|
for entity in queued_text.entities.drain(..) {
|
||||||
if let Ok((text, style, mut calculated_size)) = query.get_mut(entity) {
|
if let Ok((text, style, mut calculated_size)) = query.get_mut(entity) {
|
||||||
let node_size = Size::new(
|
let node_size = Size::new(
|
||||||
|
Loading…
Reference in New Issue
Block a user