/* * Copyright (c) 2022, kleines Filmröllchen * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include class Presentation; struct HTMLElement { StringView tag_name; HashMap attributes; HashMap style; DeprecatedString inner_text; Vector children; ErrorOr serialize(StringBuilder&) const; }; // Anything that can be on a slide. class SlideObject : public RefCounted { public: virtual ~SlideObject() = default; static ErrorOr> parse_slide_object(JsonObject const& slide_object_json); virtual ErrorOr render(Presentation const&) const = 0; protected: SlideObject() = default; virtual void set_property(StringView name, JsonValue); HashMap m_properties; Gfx::IntRect m_rect; }; // Objects with a foreground color. class GraphicsObject : public SlideObject { public: virtual ~GraphicsObject() = default; protected: GraphicsObject() = default; virtual void set_property(StringView name, JsonValue) override; // FIXME: Change the default color based on the color scheme Gfx::Color m_color { Gfx::Color::Black }; }; class Text final : public GraphicsObject { public: Text() = default; virtual ~Text() = default; private: virtual ErrorOr render(Presentation const&) const override; virtual void set_property(StringView name, JsonValue) override; DeprecatedString m_text; DeprecatedString m_font_family; DeprecatedString m_text_align; float m_font_size_in_pt { 18 }; unsigned m_font_weight { Gfx::FontWeight::Regular }; }; class Image final : public SlideObject { public: Image() = default; virtual ~Image() = default; private: DeprecatedString m_src; StringView m_image_rendering; virtual ErrorOr render(Presentation const&) const override; virtual void set_property(StringView name, JsonValue) override; };