Skip to content

Commit 94c4184

Browse files
committed
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.
1 parent 9a78add commit 94c4184

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

crates/bevy_ui/src/widget/text.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::{CalculatedSize, Node, Style, Val};
22
use bevy_asset::Assets;
33
use bevy_ecs::{
44
entity::Entity,
5-
query::{Changed, Or, Without},
5+
query::{Changed, Or, With, Without},
66
system::{Local, Query, QuerySet, Res, ResMut},
77
};
88
use bevy_math::Size;
@@ -45,6 +45,7 @@ pub fn text_constraint(min_size: Val, size: Val, max_size: Val, scale_factor: f6
4545
#[allow(clippy::too_many_arguments)]
4646
pub fn text_system(
4747
mut queued_text: Local<QueuedText>,
48+
mut last_scale_factor: Local<f64>,
4849
mut textures: ResMut<Assets<Texture>>,
4950
fonts: Res<Assets<Font>>,
5051
windows: Res<Windows>,
@@ -53,6 +54,7 @@ pub fn text_system(
5354
mut text_pipeline: ResMut<DefaultTextPipeline>,
5455
mut text_queries: QuerySet<(
5556
Query<Entity, Or<(Changed<Text>, Changed<Style>)>>,
57+
Query<Entity, (With<Text>, With<Style>)>,
5658
Query<(&Text, &Style, &mut CalculatedSize)>,
5759
)>,
5860
) {
@@ -64,9 +66,18 @@ pub fn text_system(
6466

6567
let inv_scale_factor = 1. / scale_factor;
6668

67-
// Adds all entities where the text or the style has changed to the local queue
68-
for entity in text_queries.q0_mut().iter_mut() {
69-
queued_text.entities.push(entity);
69+
#[allow(clippy::float_cmp)]
70+
if *last_scale_factor == scale_factor {
71+
// Adds all entities where the text or the style has changed to the local queue
72+
for entity in text_queries.q0().iter() {
73+
queued_text.entities.push(entity);
74+
}
75+
} else {
76+
// If the scale factor has changed, queue all text
77+
for entity in text_queries.q1().iter() {
78+
queued_text.entities.push(entity);
79+
}
80+
*last_scale_factor = scale_factor;
7081
}
7182

7283
if queued_text.entities.is_empty() {
@@ -75,7 +86,7 @@ pub fn text_system(
7586

7687
// Computes all text in the local queue
7788
let mut new_queue = Vec::new();
78-
let query = text_queries.q1_mut();
89+
let query = text_queries.q2_mut();
7990
for entity in queued_text.entities.drain(..) {
8091
if let Ok((text, style, mut calculated_size)) = query.get_mut(entity) {
8192
let node_size = Size::new(

0 commit comments

Comments
 (0)