mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 01:17:34 +00:00
LibWeb: Implement CanvasRenderingContext2D.measureText
This requires an implementation of the "text preparation algorithm" as specified here: html.spec.whatwg.org/multipage/canvas.html#text-preparation-algorithm However, we're missing a lot of things such as the CanvasTextDrawingStyles interface, so most of the algorithm was not implemented. Additionally, we also are not able to use a LineBox like the algorithm suggests, because our layouting infra is not up to the task yet. The prepare_text function does nothing other than figuring out the width of the given text and return glyphs with offsets at the moment.
This commit is contained in:
parent
732e41714a
commit
9121cc7cae
10 changed files with 253 additions and 0 deletions
|
@ -14,6 +14,8 @@
|
|||
#include <LibGfx/Path.h>
|
||||
#include <LibWeb/Bindings/Wrappable.h>
|
||||
#include <LibWeb/DOM/ExceptionOr.h>
|
||||
#include <LibWeb/Layout/InlineNode.h>
|
||||
#include <LibWeb/Layout/LineBox.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
|
@ -78,10 +80,24 @@ public:
|
|||
|
||||
HTMLCanvasElement* canvas() { return m_element; }
|
||||
|
||||
RefPtr<TextMetrics> measure_text(String const& text);
|
||||
|
||||
private:
|
||||
explicit CanvasRenderingContext2D(HTMLCanvasElement&);
|
||||
|
||||
struct PreparedTextGlyph {
|
||||
unsigned int c;
|
||||
Gfx::IntPoint position;
|
||||
};
|
||||
|
||||
struct PreparedText {
|
||||
Vector<PreparedTextGlyph> glyphs;
|
||||
Gfx::TextAlignment physical_alignment;
|
||||
Gfx::IntRect bounding_box;
|
||||
};
|
||||
|
||||
void did_draw(const Gfx::FloatRect&);
|
||||
PreparedText prepare_text(String const& text, float max_width = INFINITY);
|
||||
|
||||
OwnPtr<Gfx::Painter> painter();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue