mirror of
https://github.com/penpot/penpot.git
synced 2026-04-25 11:18:36 +00:00
Merge pull request #8383 from penpot/superalex-fix-text-stroke-bounds
🐛 Fix text stroke bounds
This commit is contained in:
commit
fb80c8f45b
@ -831,6 +831,8 @@ impl RenderState {
|
||||
|
||||
let text_content = text_content.new_bounds(shape.selrect());
|
||||
let count_inner_strokes = shape.count_visible_inner_strokes();
|
||||
let text_stroke_blur_outset =
|
||||
Stroke::max_bounds_width(shape.visible_strokes(), false);
|
||||
let mut paragraph_builders = text_content.paragraph_builder_group_from_text(None);
|
||||
let mut stroke_paragraphs_list = shape
|
||||
.visible_strokes()
|
||||
@ -858,7 +860,7 @@ impl RenderState {
|
||||
);
|
||||
|
||||
for stroke_paragraphs in stroke_paragraphs_list.iter_mut() {
|
||||
text::render(
|
||||
text::render_with_bounds_outset(
|
||||
Some(self),
|
||||
None,
|
||||
&shape,
|
||||
@ -866,6 +868,7 @@ impl RenderState {
|
||||
Some(strokes_surface_id),
|
||||
None,
|
||||
None,
|
||||
text_stroke_blur_outset,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@ -957,7 +960,7 @@ impl RenderState {
|
||||
|
||||
// 4. Stroke fills
|
||||
for stroke_paragraphs in stroke_paragraphs_list.iter_mut() {
|
||||
text::render(
|
||||
text::render_with_bounds_outset(
|
||||
Some(self),
|
||||
None,
|
||||
&shape,
|
||||
@ -965,6 +968,7 @@ impl RenderState {
|
||||
Some(strokes_surface_id),
|
||||
None,
|
||||
blur_filter.as_ref(),
|
||||
text_stroke_blur_outset,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -156,7 +156,8 @@ fn get_text_stroke_paints(
|
||||
paints
|
||||
}
|
||||
|
||||
pub fn render(
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn render_with_bounds_outset(
|
||||
render_state: Option<&mut RenderState>,
|
||||
canvas: Option<&Canvas>,
|
||||
shape: &Shape,
|
||||
@ -164,12 +165,20 @@ pub fn render(
|
||||
surface_id: Option<SurfaceId>,
|
||||
shadow: Option<&Paint>,
|
||||
blur: Option<&ImageFilter>,
|
||||
stroke_bounds_outset: f32,
|
||||
) {
|
||||
if let Some(render_state) = render_state {
|
||||
let target_surface = surface_id.unwrap_or(SurfaceId::Fills);
|
||||
|
||||
if let Some(blur_filter) = blur {
|
||||
let bounds = blur_filter.compute_fast_bounds(shape.selrect);
|
||||
let mut text_bounds = shape
|
||||
.get_text_content()
|
||||
.calculate_bounds(shape, false)
|
||||
.to_rect();
|
||||
if stroke_bounds_outset > 0.0 {
|
||||
text_bounds.inset((-stroke_bounds_outset, -stroke_bounds_outset));
|
||||
}
|
||||
let bounds = blur_filter.compute_fast_bounds(text_bounds);
|
||||
if bounds.is_finite() && bounds.width() > 0.0 && bounds.height() > 0.0 {
|
||||
let blur_filter_clone = blur_filter.clone();
|
||||
if filters::render_with_filter_surface(
|
||||
@ -202,6 +211,27 @@ pub fn render(
|
||||
}
|
||||
}
|
||||
|
||||
pub fn render(
|
||||
render_state: Option<&mut RenderState>,
|
||||
canvas: Option<&Canvas>,
|
||||
shape: &Shape,
|
||||
paragraph_builders: &mut [Vec<ParagraphBuilder>],
|
||||
surface_id: Option<SurfaceId>,
|
||||
shadow: Option<&Paint>,
|
||||
blur: Option<&ImageFilter>,
|
||||
) {
|
||||
render_with_bounds_outset(
|
||||
render_state,
|
||||
canvas,
|
||||
shape,
|
||||
paragraph_builders,
|
||||
surface_id,
|
||||
shadow,
|
||||
blur,
|
||||
0.0,
|
||||
);
|
||||
}
|
||||
|
||||
fn render_text_on_canvas(
|
||||
canvas: &Canvas,
|
||||
shape: &Shape,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user