Fix: transform `TextShape` underline width (#5865)
Minor bug fix when transforming a `TextShape` with a `underline` (used for e.g. hyperlinks). Before the underline width would not scale properly; now it will.
This commit is contained in:
parent
e3acd71090
commit
e275409eb1
|
|
@ -456,19 +456,39 @@ impl Shape {
|
||||||
rect_shape.blur_width *= transform.scaling;
|
rect_shape.blur_width *= transform.scaling;
|
||||||
}
|
}
|
||||||
Self::Text(text_shape) => {
|
Self::Text(text_shape) => {
|
||||||
text_shape.pos = transform * text_shape.pos;
|
let TextShape {
|
||||||
|
pos,
|
||||||
|
galley,
|
||||||
|
underline,
|
||||||
|
fallback_color: _,
|
||||||
|
override_text_color: _,
|
||||||
|
opacity_factor: _,
|
||||||
|
angle: _,
|
||||||
|
} = text_shape;
|
||||||
|
|
||||||
// Scale text:
|
*pos = transform * *pos;
|
||||||
let galley = Arc::make_mut(&mut text_shape.galley);
|
underline.width *= transform.scaling;
|
||||||
for row in &mut galley.rows {
|
|
||||||
|
let Galley {
|
||||||
|
job: _,
|
||||||
|
rows,
|
||||||
|
elided: _,
|
||||||
|
rect,
|
||||||
|
mesh_bounds,
|
||||||
|
num_vertices: _,
|
||||||
|
num_indices: _,
|
||||||
|
pixels_per_point: _,
|
||||||
|
} = Arc::make_mut(galley);
|
||||||
|
|
||||||
|
for row in rows {
|
||||||
row.visuals.mesh_bounds = transform.scaling * row.visuals.mesh_bounds;
|
row.visuals.mesh_bounds = transform.scaling * row.visuals.mesh_bounds;
|
||||||
for v in &mut row.visuals.mesh.vertices {
|
for v in &mut row.visuals.mesh.vertices {
|
||||||
v.pos = Pos2::new(transform.scaling * v.pos.x, transform.scaling * v.pos.y);
|
v.pos = Pos2::new(transform.scaling * v.pos.x, transform.scaling * v.pos.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
galley.mesh_bounds = transform.scaling * galley.mesh_bounds;
|
*mesh_bounds = transform.scaling * *mesh_bounds;
|
||||||
galley.rect = transform.scaling * galley.rect;
|
*rect = transform.scaling * *rect;
|
||||||
}
|
}
|
||||||
Self::Mesh(mesh) => {
|
Self::Mesh(mesh) => {
|
||||||
Arc::make_mut(mesh).transform(transform);
|
Arc::make_mut(mesh).transform(transform);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,9 @@ use crate::*;
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
||||||
pub struct TextShape {
|
pub struct TextShape {
|
||||||
/// Top left corner of the first character.
|
/// Where the origin of [`Self::galley`] is.
|
||||||
|
///
|
||||||
|
/// Usually the top left corner of the first character.
|
||||||
pub pos: Pos2,
|
pub pos: Pos2,
|
||||||
|
|
||||||
/// The laid out text, from [`Fonts::layout_job`].
|
/// The laid out text, from [`Fonts::layout_job`].
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue