Просмотр исходного кода

LibWeb: Support "c" and "C" curves in SVG <path> data

These instructions now generate cubic Bézier curves.
Andreas Kling 3 лет назад
Родитель
Сommit
422d725c79
1 измененных файлов с 13 добавлено и 1 удалено
  1. 13 1
      Userland/Libraries/LibWeb/SVG/SVGPathElement.cpp

+ 13 - 1
Userland/Libraries/LibWeb/SVG/SVGPathElement.cpp

@@ -584,7 +584,19 @@ Gfx::Path& SVGPathElement::get_path()
             break;
         }
 
-        case PathInstructionType::Curve:
+        case PathInstructionType::Curve: {
+            Gfx::FloatPoint c1 = { data[0], data[1] };
+            Gfx::FloatPoint c2 = { data[2], data[3] };
+            Gfx::FloatPoint p2 = { data[4], data[5] };
+            if (!absolute) {
+                p2 += path.segments().last().point();
+                c1 += path.segments().last().point();
+                c2 += path.segments().last().point();
+            }
+            path.cubic_bezier_curve_to(c1, c2, p2);
+            break;
+        }
+
         case PathInstructionType::SmoothCurve:
             // Instead of crashing the browser every time we come across an SVG
             // with these path instructions, let's just skip them