Fix text bounds in iced_wgpu on nonintegral DPI

This commit is contained in:
Héctor Ramón Jiménez 2019-11-14 03:00:33 +01:00
parent be5466a0a7
commit 00479d8bcd
2 changed files with 18 additions and 2 deletions

View file

@ -344,11 +344,27 @@ impl Renderer {
for text in layer.text.iter() {
// Target physical coordinates directly to avoid blurry text
let text = wgpu_glyph::Section {
// TODO: We `round` here to avoid rerasterizing text when
// its position changes slightly. This can make text feel a
// bit "jumpy". We may be able to do better once we improve
// our text rendering/caching pipeline.
screen_position: (
(text.screen_position.0 * dpi).round(),
(text.screen_position.1 * dpi).round(),
),
bounds: (text.bounds.0 * dpi, text.bounds.1 * dpi),
// TODO: Fix precision issues with some DPI factors.
//
// The `ceil` here can cause some words to render on the
// same line when they should not.
//
// Ideally, `wgpu_glyph` should be able to compute layout
// using logical positions, and then apply the proper
// DPI scaling. This would ensure that both measuring and
// rendering follow the same layout rules.
bounds: (
(text.bounds.0 * dpi).ceil(),
(text.bounds.1 * dpi).ceil(),
),
scale: wgpu_glyph::Scale {
x: text.scale.x * dpi,
y: text.scale.y * dpi,

View file

@ -91,7 +91,7 @@ impl Pipeline {
// TODO: This is a bit hacky. We are loading the debug font as the
// first font in the `draw_brush`. The `measure_brush` does not
// contain this font.
// contain this font, hence we subtract 1.
//
// This should go away once we improve the debug view and integrate
// it as just another UI app.