Skip to content

Commit e2916fb

Browse files
Subtract 1 from text positions to account for glyph texture padding. (#11662)
# Objective Glyph positions don't account for padding added to the font texture atlas, resulting in them being off by one physical pixel in both axis. ## Example ```rust use bevy::{ prelude::*, window::WindowResolution }; fn main() { App::new() .add_plugins(DefaultPlugins.set(WindowPlugin { primary_window: Some(Window { resolution: WindowResolution::default().with_scale_factor_override(1.), ..Default::default() }), ..Default::default() })) .add_systems(Startup, setup) .run(); } fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { commands.spawn(Camera2dBundle::default()); commands.spawn( TextBundle::from_section( "QQQQQ", TextStyle { font: asset_server.load("FiraMono-Medium.ttf"), font_size: 14.0, ..default() }, ) .with_style(Style { left:Val::Px(10.), top: Val::Px(10.), ..default() }) .with_background_color(Color::RED) ); } ``` <img width="350" alt="QQQQQ-bad" src="https://github.com/bevyengine/bevy/assets/27962798/6a509aee-64c8-4ee8-a8c1-77ee65355898"> The coordinates are off by one in physical coordinates, not logical. So the difference only becomes obvious with `UiScale` and the window scale factor set to low values. ## Solution Translate glyph positions by -1 in both axes. <img width="300" alt="QQQQQ-good" src="https://github.com/bevyengine/bevy/assets/27962798/16e3f6d9-1223-48e0-9fdd-b682a3e8ade4"> --- ## Changelog * Translate the positions for each glyph by -1 in both axes in `bevy_text::glyph_brush::process_glyphs` --------- Co-authored-by: Alice Cecile <[email protected]>
1 parent d6f1649 commit e2916fb

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

crates/bevy_text/src/glyph_brush.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ impl GlyphBrush {
136136
}
137137
};
138138

139-
let position = adjust.position(Vec2::new(x, y));
139+
// We must offset by 1 to account for glyph texture padding.
140+
// See https://github.com/bevyengine/bevy/pull/11662
141+
let position = adjust.position(Vec2::new(x, y) - 1.);
140142

141143
positioned_glyphs.push(PositionedGlyph {
142144
position,

0 commit comments

Comments
 (0)