Bladeren bron

LibWeb: Stub out a new SVGDecodedImageData class

This class will implement isolated SVG layout and rendering.
Andreas Kling 2 jaren geleden
bovenliggende
commit
6f46bff4df

+ 1 - 0
Userland/Libraries/LibWeb/CMakeLists.txt

@@ -500,6 +500,7 @@ set(SOURCES
     SVG/SVGAnimatedLength.cpp
     SVG/SVGAnimatedNumber.cpp
     SVG/SVGClipPathElement.cpp
+    SVG/SVGDecodedImageData.cpp
     SVG/SVGDefsElement.cpp
     SVG/SVGElement.cpp
     SVG/SVGGElement.cpp

+ 43 - 0
Userland/Libraries/LibWeb/SVG/SVGDecodedImageData.cpp

@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibGfx/Bitmap.h>
+#include <LibWeb/SVG/SVGDecodedImageData.h>
+
+namespace Web::SVG {
+
+ErrorOr<NonnullRefPtr<SVGDecodedImageData>> SVGDecodedImageData::create(ByteBuffer)
+{
+    return adopt_nonnull_ref_or_enomem(new (nothrow) SVGDecodedImageData());
+}
+
+SVGDecodedImageData::SVGDecodedImageData()
+{
+}
+
+SVGDecodedImageData::~SVGDecodedImageData() = default;
+
+RefPtr<Gfx::Bitmap const> SVGDecodedImageData::bitmap(size_t) const
+{
+    return nullptr;
+}
+
+Optional<CSSPixels> SVGDecodedImageData::intrinsic_width() const
+{
+    return 0;
+}
+
+Optional<CSSPixels> SVGDecodedImageData::intrinsic_height() const
+{
+    return 0;
+}
+
+Optional<float> SVGDecodedImageData::intrinsic_aspect_ratio() const
+{
+    return 1;
+}
+
+}

+ 34 - 0
Userland/Libraries/LibWeb/SVG/SVGDecodedImageData.h

@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibWeb/HTML/DecodedImageData.h>
+
+namespace Web::SVG {
+
+class SVGDecodedImageData final : public HTML::DecodedImageData {
+public:
+    static ErrorOr<NonnullRefPtr<SVGDecodedImageData>> create(ByteBuffer encoded_svg);
+    virtual ~SVGDecodedImageData() override;
+
+    virtual RefPtr<Gfx::Bitmap const> bitmap(size_t frame_index) const override;
+
+    virtual Optional<CSSPixels> intrinsic_width() const override;
+    virtual Optional<CSSPixels> intrinsic_height() const override;
+    virtual Optional<float> intrinsic_aspect_ratio() const override;
+
+    // FIXME: Support SVG animations. :^)
+    virtual int frame_duration(size_t) const override { return 0; }
+    virtual size_t frame_count() const override { return 1; }
+    virtual size_t loop_count() const override { return 0; }
+    virtual bool is_animated() const override { return false; }
+
+private:
+    SVGDecodedImageData();
+};
+
+}