/* * 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; }; struct Index { unsigned slide; unsigned frame; }; // 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, unsigned slide_index); virtual ErrorOr render(Presentation const&) const = 0; protected: SlideObject(Index index) : m_frame_index(index.frame) , m_slide_index(index.slide) { } virtual void set_property(StringView name, JsonValue); unsigned m_frame_index; unsigned m_slide_index; HashMap m_properties; Gfx::IntRect m_rect; }; // Objects with a foreground color. class GraphicsObject : public SlideObject { public: virtual ~GraphicsObject() = default; protected: GraphicsObject(Index index) : SlideObject(index) { } 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(Index index) : GraphicsObject(index) { } 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(Index index) : SlideObject(index) { } 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; };