mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 21:47:43 +00:00
LibWeb: Throw exception if any canvas radial gradient radius is < 0
As per the specification: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-createradialgradient
This commit is contained in:
parent
8dc4e05ecf
commit
f86b66dc2d
3 changed files with 10 additions and 3 deletions
|
@ -55,7 +55,7 @@ public:
|
||||||
return my_drawing_state().stroke_style.to_js_fill_or_stoke_style();
|
return my_drawing_state().stroke_style.to_js_fill_or_stoke_style();
|
||||||
}
|
}
|
||||||
|
|
||||||
JS::NonnullGCPtr<CanvasGradient> create_radial_gradient(double x0, double y0, double r0, double x1, double y1, double r1)
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<CanvasGradient>> create_radial_gradient(double x0, double y0, double r0, double x1, double y1, double r1)
|
||||||
{
|
{
|
||||||
auto& realm = static_cast<IncludingClass&>(*this).realm();
|
auto& realm = static_cast<IncludingClass&>(*this).realm();
|
||||||
return CanvasGradient::create_radial(realm, x0, y0, r0, x1, y1, r1);
|
return CanvasGradient::create_radial(realm, x0, y0, r0, x1, y1, r1);
|
||||||
|
|
|
@ -12,8 +12,15 @@
|
||||||
|
|
||||||
namespace Web::HTML {
|
namespace Web::HTML {
|
||||||
|
|
||||||
JS::NonnullGCPtr<CanvasGradient> CanvasGradient::create_radial(JS::Realm& realm, double x0, double y0, double r0, double x1, double y1, double r1)
|
// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-createradialgradient
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<CanvasGradient>> CanvasGradient::create_radial(JS::Realm& realm, double x0, double y0, double r0, double x1, double y1, double r1)
|
||||||
{
|
{
|
||||||
|
// If either of r0 or r1 are negative, then an "IndexSizeError" DOMException must be thrown.
|
||||||
|
if (r0 < 0)
|
||||||
|
return WebIDL::IndexSizeError::create(realm, "The r0 passed is less than 0");
|
||||||
|
if (r1 < 0)
|
||||||
|
return WebIDL::IndexSizeError::create(realm, "The r1 passed is less than 0");
|
||||||
|
|
||||||
auto radial_gradient = Gfx::CanvasRadialGradientPaintStyle::create(Gfx::FloatPoint { x0, y0 }, r0, Gfx::FloatPoint { x1, y1 }, r1);
|
auto radial_gradient = Gfx::CanvasRadialGradientPaintStyle::create(Gfx::FloatPoint { x0, y0 }, r0, Gfx::FloatPoint { x1, y1 }, r1);
|
||||||
return realm.heap().allocate<CanvasGradient>(realm, realm, *radial_gradient);
|
return realm.heap().allocate<CanvasGradient>(realm, realm, *radial_gradient);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ class CanvasGradient final : public Bindings::PlatformObject {
|
||||||
WEB_PLATFORM_OBJECT(CanvasGradient, Bindings::PlatformObject);
|
WEB_PLATFORM_OBJECT(CanvasGradient, Bindings::PlatformObject);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static JS::NonnullGCPtr<CanvasGradient> create_radial(JS::Realm&, double x0, double y0, double r0, double x1, double y1, double r1);
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<CanvasGradient>> create_radial(JS::Realm&, double x0, double y0, double r0, double x1, double y1, double r1);
|
||||||
static JS::NonnullGCPtr<CanvasGradient> create_linear(JS::Realm&, double x0, double y0, double x1, double y1);
|
static JS::NonnullGCPtr<CanvasGradient> create_linear(JS::Realm&, double x0, double y0, double x1, double y1);
|
||||||
static JS::NonnullGCPtr<CanvasGradient> create_conic(JS::Realm&, double start_angle, double x, double y);
|
static JS::NonnullGCPtr<CanvasGradient> create_conic(JS::Realm&, double start_angle, double x, double y);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue