diff --git a/Tests/LibWeb/Ref/reference/images/svg-background-no-natural-size-ref.png b/Tests/LibWeb/Ref/reference/images/svg-background-no-natural-size-ref.png index a56a367024..fe5c015a42 100644 Binary files a/Tests/LibWeb/Ref/reference/images/svg-background-no-natural-size-ref.png and b/Tests/LibWeb/Ref/reference/images/svg-background-no-natural-size-ref.png differ diff --git a/Userland/Libraries/LibGfx/Color.h b/Userland/Libraries/LibGfx/Color.h index c9c9f357a9..827b37175f 100644 --- a/Userland/Libraries/LibGfx/Color.h +++ b/Userland/Libraries/LibGfx/Color.h @@ -210,10 +210,11 @@ public: if (source.alpha() == 0) return *this; - u8 a = 255 - ((255 - alpha()) * (255 - source.alpha()) / 255); - u8 r = (red() * (255 - source.alpha()) + source.red() * source.alpha()) / 255; - u8 g = (green() * (255 - source.alpha()) + source.green() * source.alpha()) / 255; - u8 b = (blue() * (255 - source.alpha()) + source.blue() * source.alpha()) / 255; + int const d = 255 * (alpha() + source.alpha()) - alpha() * source.alpha(); + u8 r = (red() * alpha() * (255 - source.alpha()) + source.red() * 255 * source.alpha()) / d; + u8 g = (green() * alpha() * (255 - source.alpha()) + source.green() * 255 * source.alpha()) / d; + u8 b = (blue() * alpha() * (255 - source.alpha()) + source.blue() * 255 * source.alpha()) / d; + u8 a = d / 255; return Color(r, g, b, a); }