1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 06:38:10 +00:00

LibWeb: Extract CanvasText class from CRC2D

This commit is contained in:
Sam Atkins 2022-08-12 19:10:01 +01:00 committed by Andreas Kling
parent 62b561e2e1
commit 7cf42ede68
4 changed files with 44 additions and 10 deletions

View file

@ -0,0 +1,28 @@
/*
* Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Optional.h>
#include <AK/String.h>
#include <LibWeb/HTML/TextMetrics.h>
namespace Web::HTML {
// https://html.spec.whatwg.org/multipage/canvas.html#canvastext
class CanvasText {
public:
virtual ~CanvasText() = default;
virtual void fill_text(String const&, float x, float y, Optional<double> max_width) = 0;
virtual void stroke_text(String const&, float x, float y, Optional<double> max_width) = 0;
virtual RefPtr<TextMetrics> measure_text(String const& text) = 0;
protected:
CanvasText() = default;
};
}

View file

@ -0,0 +1,8 @@
#import <HTML/TextMetrics.idl>
// https://html.spec.whatwg.org/multipage/canvas.html#canvastext
interface mixin CanvasText {
undefined fillText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
undefined strokeText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
TextMetrics measureText(DOMString text);
};

View file

@ -21,6 +21,7 @@
#include <LibWeb/HTML/Canvas/CanvasPath.h>
#include <LibWeb/HTML/Canvas/CanvasRect.h>
#include <LibWeb/HTML/Canvas/CanvasState.h>
#include <LibWeb/HTML/Canvas/CanvasText.h>
#include <LibWeb/HTML/Canvas/CanvasTransform.h>
#include <LibWeb/HTML/CanvasGradient.h>
#include <LibWeb/Layout/InlineNode.h>
@ -40,7 +41,8 @@ class CanvasRenderingContext2D
, public CanvasTransform<CanvasRenderingContext2D>
, public CanvasFillStrokeStyles<CanvasRenderingContext2D>
, public CanvasRect
, public CanvasDrawPath {
, public CanvasDrawPath
, public CanvasText {
AK_MAKE_NONCOPYABLE(CanvasRenderingContext2D);
AK_MAKE_NONMOVABLE(CanvasRenderingContext2D);
@ -66,8 +68,8 @@ public:
virtual void stroke() override;
virtual void stroke(Path2D const& path) override;
void fill_text(String const&, float x, float y, Optional<double> max_width);
void stroke_text(String const&, float x, float y, Optional<double> max_width);
virtual void fill_text(String const&, float x, float y, Optional<double> max_width) override;
virtual void stroke_text(String const&, float x, float y, Optional<double> max_width) override;
virtual void fill(String const& fill_rule) override;
virtual void fill(Path2D& path, String const& fill_rule) override;
@ -80,7 +82,7 @@ public:
NonnullRefPtr<HTMLCanvasElement> canvas_for_binding() const;
RefPtr<TextMetrics> measure_text(String const& text);
virtual RefPtr<TextMetrics> measure_text(String const& text) override;
virtual void clip() override;

View file

@ -1,21 +1,18 @@
#import <HTML/HTMLCanvasElement.idl>
#import <HTML/HTMLImageElement.idl>
#import <HTML/ImageData.idl>
#import <HTML/TextMetrics.idl>
#import <HTML/Canvas/CanvasDrawPath.idl>
#import <HTML/Canvas/CanvasFillStrokeStyles.idl>
#import <HTML/Canvas/CanvasPath.idl>
#import <HTML/Canvas/CanvasRect.idl>
#import <HTML/Canvas/CanvasState.idl>
#import <HTML/Canvas/CanvasText.idl>
#import <HTML/Canvas/CanvasTransform.idl>
// https://html.spec.whatwg.org/multipage/canvas.html#canvasrenderingcontext2d
[Exposed=Window]
interface CanvasRenderingContext2D {
undefined fillText(DOMString text, double x, double y, optional double maxWidth);
undefined strokeText(DOMString text, double x, double y, optional double maxWidth);
undefined drawImage((HTMLImageElement or HTMLCanvasElement) image, double dx, double dy);
undefined drawImage((HTMLImageElement or HTMLCanvasElement) image, double dx, double dy, double dw, double dh);
undefined drawImage((HTMLImageElement or HTMLCanvasElement) image, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh);
@ -28,8 +25,6 @@ interface CanvasRenderingContext2D {
[ImplementedAs=canvas_for_binding] readonly attribute HTMLCanvasElement canvas;
TextMetrics measureText(DOMString text);
};
CanvasRenderingContext2D includes CanvasState;
@ -37,4 +32,5 @@ CanvasRenderingContext2D includes CanvasTransform;
CanvasRenderingContext2D includes CanvasFillStrokeStyles;
CanvasRenderingContext2D includes CanvasRect;
CanvasRenderingContext2D includes CanvasDrawPath;
CanvasRenderingContext2D includes CanvasText;
CanvasRenderingContext2D includes CanvasPath;