[librsvg: 4/8] Revert "Path::to_cairo - strip out paths composed only of MoveTo"
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 4/8] Revert "Path::to_cairo - strip out paths composed only of MoveTo"
- Date: Sat, 5 Mar 2022 04:32:11 +0000 (UTC)
commit 9949c8dea8c20f7f1f0a2b89e62fce13de61e50b
Author: Federico Mena Quintero <federico gnome org>
Date: Fri Mar 4 21:31:45 2022 -0600
Revert "Path::to_cairo - strip out paths composed only of MoveTo"
This reverts commit 0615983c493b7e1fda19c21da48f315d23f8c10f.
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/672>
src/drawing_ctx.rs | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
---
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index 029b50583..11634e230 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -2233,11 +2233,17 @@ impl Path {
fn from_cairo(cairo_path: cairo::Path) -> Path {
let mut builder = PathBuilder::default();
- // Cairo has the habit of appending a MoveTo to some paths, but we don't want a
- // path for empty text to generate that lone point. So, strip out paths composed
- // only of MoveTo.
+ // First, see if the path is a single MoveTo(0, 0). Cairo does this when the code that
+ // generated the path didn't include any commands, due to the way it appends a MoveTo to
+ // some paths.
+ //
+ // Only do the conversion if the path is not empty; otherwise
+ // really return a librsvg path with no commands.
- if !cairo_path_is_only_move_tos(&cairo_path) {
+ if !cairo_path
+ .iter()
+ .eq([cairo::PathSegment::MoveTo((0.0, 0.0))])
+ {
for segment in cairo_path.iter() {
match segment {
cairo::PathSegment::MoveTo((x, y)) => builder.move_to(x, y),
@@ -2254,10 +2260,6 @@ impl Path {
}
}
-fn cairo_path_is_only_move_tos(path: &cairo::Path) -> bool {
- path.iter().all(|seg| matches!(seg, cairo::PathSegment::MoveTo((_, _))))
-}
-
impl PathCommand {
fn to_cairo(&self, cr: &cairo::Context) {
match *self {
@@ -2352,14 +2354,14 @@ mod tests {
let layout = pango::Layout::new(&context);
layout.set_text("");
- let path = pango_layout_to_path(10.0, 20.0, &layout, pango::Gravity::Auto).unwrap();
+ let path = pango_layout_to_path(0.0, 0.0, &layout, pango::Gravity::Auto).unwrap();
assert!(path.is_empty());
// only whitespace
layout.set_text(" ");
- let path = pango_layout_to_path(10.0, 20.0, &layout, pango::Gravity::Auto).unwrap();
+ let path = pango_layout_to_path(0.0, 0.0, &layout, pango::Gravity::Auto).unwrap();
assert!(path.is_empty());
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]