diff --git a/crates/bevy_sprite_render/src/text2d/mod.rs b/crates/bevy_sprite_render/src/text2d/mod.rs index e01faab25063a..14bde85b65ad4 100644 --- a/crates/bevy_sprite_render/src/text2d/mod.rs +++ b/crates/bevy_sprite_render/src/text2d/mod.rs @@ -10,7 +10,7 @@ use bevy_ecs::{ system::{Commands, Query, Res, ResMut}, }; use bevy_image::prelude::*; -use bevy_math::Vec2; +use bevy_math::{Vec2, Vec3}; use bevy_render::sync_world::TemporaryRenderEntity; use bevy_render::Extract; use bevy_sprite::{Anchor, Text2dShadow}; @@ -65,9 +65,9 @@ pub fn extract_text2d_sprite( global_transform, ) in text2d_query.iter() { - let scaling = GlobalTransform::from_scale( - Vec2::splat(text_layout_info.scale_factor.recip()).extend(1.), - ); + let inverse_scale_factor = text_layout_info.scale_factor.recip(); + let scaling = + GlobalTransform::from_scale(Vec3::new(inverse_scale_factor, -inverse_scale_factor, 1.)); if !view_visibility.get() { continue; } @@ -85,7 +85,7 @@ pub fn extract_text2d_sprite( continue; }; let render_entity = commands.spawn(TemporaryRenderEntity).id(); - let offset = Vec2::new(run.bounds.center().x, -run.bounds.center().y); + let offset = run.bounds.center(); let transform = *global_transform * GlobalTransform::from_translation(top_left.extend(0.)) * scaling @@ -97,7 +97,7 @@ pub fn extract_text2d_sprite( color: text_background_color.0.into(), image_handle_id: AssetId::default(), flip_x: false, - flip_y: false, + flip_y: true, kind: ExtractedSpriteKind::Single { anchor: Vec2::ZERO, rect: None, @@ -128,7 +128,7 @@ pub fn extract_text2d_sprite( .textures[atlas_info.location.glyph_index] .as_rect(); extracted_slices.slices.push(ExtractedSlice { - offset: Vec2::new(position.x, -position.y), + offset: *position, rect, size: rect.size(), }); @@ -146,7 +146,7 @@ pub fn extract_text2d_sprite( color, image_handle_id: atlas_info.texture, flip_x: false, - flip_y: false, + flip_y: true, kind: ExtractedSpriteKind::Slices { indices: start..end, }, @@ -167,7 +167,7 @@ pub fn extract_text2d_sprite( if has_strikethrough { let render_entity = commands.spawn(TemporaryRenderEntity).id(); - let offset = run.strikethrough_position() * Vec2::new(1., -1.); + let offset = run.strikethrough_position(); let transform = shadow_transform * GlobalTransform::from_translation(offset.extend(0.)); extracted_sprites.sprites.push(ExtractedSprite { @@ -189,7 +189,7 @@ pub fn extract_text2d_sprite( if has_underline { let render_entity = commands.spawn(TemporaryRenderEntity).id(); - let offset = run.underline_position() * Vec2::new(1., -1.); + let offset = run.underline_position(); let transform = shadow_transform * GlobalTransform::from_translation(offset.extend(0.)); extracted_sprites.sprites.push(ExtractedSprite { @@ -245,7 +245,7 @@ pub fn extract_text2d_sprite( .textures[atlas_info.location.glyph_index] .as_rect(); extracted_slices.slices.push(ExtractedSlice { - offset: Vec2::new(position.x, -position.y), + offset: *position, rect, size: rect.size(), }); @@ -261,7 +261,7 @@ pub fn extract_text2d_sprite( color, image_handle_id: atlas_info.texture, flip_x: false, - flip_y: false, + flip_y: true, kind: ExtractedSpriteKind::Slices { indices: start..end, }, @@ -290,7 +290,7 @@ pub fn extract_text2d_sprite( .unwrap_or(text_color.0) .to_linear(); let render_entity = commands.spawn(TemporaryRenderEntity).id(); - let offset = run.strikethrough_position() * Vec2::new(1., -1.); + let offset = run.strikethrough_position(); let transform = *global_transform * GlobalTransform::from_translation(top_left.extend(0.)) * scaling @@ -318,7 +318,7 @@ pub fn extract_text2d_sprite( .unwrap_or(text_color.0) .to_linear(); let render_entity = commands.spawn(TemporaryRenderEntity).id(); - let offset = run.underline_position() * Vec2::new(1., -1.); + let offset = run.underline_position(); let transform = *global_transform * GlobalTransform::from_translation(top_left.extend(0.)) * scaling