mirror of
https://github.com/RGBCube/serenity
synced 2025-06-28 21:12:06 +00:00
LibWeb: Implement CanvasRenderingContext2D.createPattern()
This is a first pass at implementing CRC2D.createPattern() and the associated CanvasPattern object. This implementation only works for a few of the required image sources [like CRC2D.drawImage()], and does not yet support transforms. Other than that it supports everything else (which is mainly the various repeat modes).
This commit is contained in:
parent
0c313c586b
commit
f74e2da875
8 changed files with 229 additions and 8 deletions
60
Userland/Libraries/LibWeb/HTML/CanvasPattern.h
Normal file
60
Userland/Libraries/LibWeb/HTML/CanvasPattern.h
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 2023, MacDue <macdue@dueutil.tech>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibGfx/PaintStyle.h>
|
||||
#include <LibWeb/Bindings/PlatformObject.h>
|
||||
#include <LibWeb/HTML/Canvas/CanvasDrawImage.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
class CanvasPatternPaintStyle final : public Gfx::PaintStyle {
|
||||
public:
|
||||
enum class Repetition {
|
||||
Repeat,
|
||||
RepeatX,
|
||||
RepeatY,
|
||||
NoRepeat
|
||||
};
|
||||
|
||||
static NonnullRefPtr<CanvasPatternPaintStyle> create(Gfx::Bitmap const& bitmap, Repetition repetition)
|
||||
{
|
||||
return adopt_ref(*new CanvasPatternPaintStyle(bitmap, repetition));
|
||||
}
|
||||
|
||||
virtual void paint(Gfx::IntRect physical_bounding_box, PaintFunction paint) const override;
|
||||
|
||||
private:
|
||||
CanvasPatternPaintStyle(Gfx::Bitmap const& bitmap, Repetition repetition)
|
||||
: m_bitmap(bitmap)
|
||||
, m_repetition(repetition)
|
||||
{
|
||||
}
|
||||
|
||||
NonnullRefPtr<Gfx::Bitmap const> m_bitmap;
|
||||
Repetition m_repetition { Repetition::Repeat };
|
||||
};
|
||||
|
||||
class CanvasPattern final : public Bindings::PlatformObject {
|
||||
WEB_PLATFORM_OBJECT(CanvasPattern, Bindings::PlatformObject);
|
||||
|
||||
public:
|
||||
static WebIDL::ExceptionOr<JS::GCPtr<CanvasPattern>> create(JS::Realm&, CanvasImageSource const& image, StringView repetition);
|
||||
|
||||
~CanvasPattern();
|
||||
|
||||
NonnullRefPtr<Gfx::PaintStyle> to_gfx_paint_style() { return m_pattern; }
|
||||
|
||||
private:
|
||||
CanvasPattern(JS::Realm&, CanvasPatternPaintStyle&);
|
||||
|
||||
virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
|
||||
|
||||
NonnullRefPtr<CanvasPatternPaintStyle> m_pattern;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue