Browse Source

LibGfx: Add FIXME for SVG/canvas radial gradients

The current implementation assumes the focal point is the center of the
start circle, for most cases the difference this makes is very subtle,
but becomes more apparent with spreadMethod=repeat/reflect.
MacDue 1 year ago
parent
commit
1ecb2cf28c
1 changed files with 6 additions and 0 deletions
  1. 6 0
      Userland/Libraries/LibGfx/GradientPainting.cpp

+ 6 - 0
Userland/Libraries/LibGfx/GradientPainting.cpp

@@ -499,6 +499,12 @@ static auto create_radial_gradient_between_two_circles(Gfx::FloatPoint start_cen
     //      - Start circle larger than end circle (outside end circle)
     //      - Start circle larger than end circle (outside end circle)
     //      - Start circle or end circle radius == 0
     //      - Start circle or end circle radius == 0
 
 
+    // FIXME: This does not render the SVG spreadMethod=repeat/reflect correctly if
+    // focal radius > 0 and the focal point is not centered within the end circle.
+    // It does not render spreadMethod=pad correctly in this case either, but it's really subtle.
+    // It may be worth trying Skia's approach: https://skia.org/docs/dev/design/conical/
+    // (Yes, this gradient actually is a two-point conical gradient)
+
     return Gradient {
     return Gradient {
         move(gradient_line),
         move(gradient_line),
         [=](float x, float y) {
         [=](float x, float y) {