Kaynağa Gözat

LibWeb: Support radial gradient with asymmetrical size in Skia painter

Progress on Tests/Ref/css-gradients.html
Aliaksandr Kalenik 1 yıl önce
ebeveyn
işleme
be1075e673

+ 8 - 2
Userland/Libraries/LibWeb/Painting/DisplayListPlayerSkia.cpp

@@ -1143,8 +1143,14 @@ CommandResult DisplayListPlayerSkia::paint_radial_gradient(PaintRadialGradient c
 
     auto const& rect = command.rect;
     auto center = to_skia_point(command.center.translated(command.rect.location()));
-    auto radius = command.size.height();
-    auto shader = SkGradientShader::MakeRadial(center, radius, colors.data(), positions.data(), positions.size(), SkTileMode::kClamp, 0);
+
+    auto const size = command.size.to_type<float>();
+    SkMatrix matrix;
+    // Skia does not support specifying of horizontal and vertical radius's separately,
+    // so instead we apply scale matrix
+    matrix.setScale(size.width() / size.height(), 1.0f, center.x(), center.y());
+
+    auto shader = SkGradientShader::MakeRadial(center, size.height(), colors.data(), positions.data(), positions.size(), SkTileMode::kClamp, 0, &matrix);
 
     SkPaint paint;
     paint.setShader(shader);