LibGfx+LibWeb: Delete unused PaintStyle::paint() implementations

These are unused since we moved to Skia and it's misleading to keep
them around.
This commit is contained in:
Aliaksandr Kalenik 2025-08-01 09:43:57 +02:00 committed by Alexander Kalenik
commit 1001ff2599
Notes: github-actions[bot] 2025-08-01 08:41:01 +00:00
6 changed files with 6 additions and 508 deletions

View file

@ -10,91 +10,12 @@
#include <LibWeb/Bindings/Intrinsics.h>
#include <LibWeb/HTML/CanvasPattern.h>
#include <LibWeb/HTML/CanvasRenderingContext2D.h>
#include <LibWeb/HTML/ImageBitmap.h>
#include <LibWeb/SVG/SVGImageElement.h>
namespace Web::HTML {
GC_DEFINE_ALLOCATOR(CanvasPattern);
// https://html.spec.whatwg.org/multipage/canvas.html#dom-canvaspattern-settransform
void CanvasPatternPaintStyle::paint(Gfx::IntRect physical_bounding_box, PaintFunction paint) const
{
// 1. Create an infinite transparent black bitmap.
// *waves magic wand 🪄*
// Done!
// 2. Place a copy of the image on the bitmap, anchored such that its top left corner
// is at the origin of the coordinate space, with one coordinate space unit per CSS pixel of the image,
// then place repeated copies of this image horizontally to the left and right, if the repetition behavior
// is "repeat-x", or vertically up and down, if the repetition behavior is "repeat-y", or in all four directions
// all over the bitmap, if the repetition behavior is "repeat".
// FIXME: If the original image data is a bitmap image, then the value painted at a point in the area of
// the repetitions is computed by filtering the original image data. When scaling up, if the imageSmoothingEnabled
// attribute is set to false, then the image must be rendered using nearest-neighbor interpolation.
// Otherwise, the user agent may use any filtering algorithm (for example bilinear interpolation or nearest-neighbor).
// User agents which support multiple filtering algorithms may use the value of the imageSmoothingQuality attribute
// to guide the choice of filtering algorithm. When such a filtering algorithm requires a pixel value from outside
// the original image data, it must instead use the value from wrapping the pixel's coordinates to the original
// image's dimensions. (That is, the filter uses 'repeat' behavior, regardless of the value of the pattern's repetition behavior.)
// FIXME: 3. Transform the resulting bitmap according to the pattern's transformation matrix.
// FIXME: 4. Transform the resulting bitmap again, this time according to the current transformation matrix.
// 5. Replace any part of the image outside the area in which the pattern is to be rendered with transparent black.
// 6. The resulting bitmap is what is to be rendered, with the same origin and same scale.
// FIXME: This doesn't handle a 'none' canvas context mode.
auto bitmap = m_image.visit(
[](GC::Root<HTMLImageElement> const& source) -> RefPtr<Gfx::ImmutableBitmap> { return source->immutable_bitmap(); },
[](GC::Root<SVG::SVGImageElement> const& source) -> RefPtr<Gfx::ImmutableBitmap> { return source->current_image_bitmap(); },
[](GC::Root<OffscreenCanvas> const& source) -> RefPtr<Gfx::ImmutableBitmap> { return Gfx::ImmutableBitmap::create(*source->bitmap()); },
[](GC::Root<HTMLCanvasElement> const& source) -> RefPtr<Gfx::ImmutableBitmap> { return Gfx::ImmutableBitmap::create_snapshot_from_painting_surface(*source->surface()); },
[](GC::Root<HTMLVideoElement> const& source) -> RefPtr<Gfx::ImmutableBitmap> { return Gfx::ImmutableBitmap::create(*source->bitmap()); },
[](GC::Root<ImageBitmap> const& source) -> RefPtr<Gfx::ImmutableBitmap> { return Gfx::ImmutableBitmap::create(*source->bitmap()); });
VERIFY(bitmap);
auto const bitmap_width = bitmap->width();
auto const bitmap_height = bitmap->height();
paint([=, this](auto point) {
point.translate_by(physical_bounding_box.location());
point = [&]() -> Gfx::IntPoint {
switch (m_repetition) {
case Repetition::NoRepeat: {
return point;
}
case Repetition::Repeat: {
return {
point.x() % bitmap_width,
point.y() % bitmap_height
};
}
case Repetition::RepeatX: {
return {
point.x() % bitmap_width,
point.y()
};
}
case Repetition::RepeatY: {
return {
point.x(),
point.y() % bitmap_height
};
}
default:
VERIFY_NOT_REACHED();
}
}();
if (bitmap->rect().contains(point))
return bitmap->get_pixel(point.x(), point.y());
return Gfx::Color();
});
}
CanvasPattern::CanvasPattern(JS::Realm& realm, CanvasPatternPaintStyle& pattern)
: PlatformObject(realm)
, m_pattern(pattern)