From 2878af596827f405c88068cc1218bd13301ff38a Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 24 Oct 2023 11:13:04 -0700 Subject: [PATCH] LibPDF: Sketch out Lab color space Same as other recent color spaces: Enough to make us not assert, but not enough to actually produce color. Fixes 2 asserts on the `-n 500` 0000.zip pdfa dataset. --- Userland/Libraries/LibPDF/ColorSpace.cpp | 23 +++++++++++++++++++++++ Userland/Libraries/LibPDF/ColorSpace.h | 15 +++++++++++++++ Userland/Libraries/LibPDF/CommonNames.h | 1 + 3 files changed, 39 insertions(+) diff --git a/Userland/Libraries/LibPDF/ColorSpace.cpp b/Userland/Libraries/LibPDF/ColorSpace.cpp index 6aec21a83a..e4401a6739 100644 --- a/Userland/Libraries/LibPDF/ColorSpace.cpp +++ b/Userland/Libraries/LibPDF/ColorSpace.cpp @@ -62,6 +62,9 @@ PDFErrorOr> ColorSpace::create(Document* document, Non if (color_space_name == CommonNames::Indexed) return Error::rendering_unsupported_error("Indexed color spaces not yet implemented"); + if (color_space_name == CommonNames::Lab) + return TRY(LabColorSpace::create(document, move(parameters))); + if (color_space_name == CommonNames::Pattern) return Error::rendering_unsupported_error("Pattern color spaces not yet implemented"); @@ -382,6 +385,26 @@ Vector ICCBasedColorSpace::default_decode() const } } +PDFErrorOr> LabColorSpace::create(Document*, Vector&& parameters) +{ + if (parameters.size() != 1) + return Error { Error::Type::MalformedPDF, "Lab color space expects one parameter" }; + + auto color_space = adopt_ref(*new LabColorSpace()); + // FIXME: Implement. + return color_space; +} + +PDFErrorOr LabColorSpace::color(ReadonlySpan) const +{ + return Error::rendering_unsupported_error("Lab color spaces not yet implemented"); +} + +Vector LabColorSpace::default_decode() const +{ + return { 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f }; +} + PDFErrorOr> SeparationColorSpace::create(Document*, Vector&&) { auto color_space = adopt_ref(*new SeparationColorSpace()); diff --git a/Userland/Libraries/LibPDF/ColorSpace.h b/Userland/Libraries/LibPDF/ColorSpace.h index bc4a6064be..066c9b8040 100644 --- a/Userland/Libraries/LibPDF/ColorSpace.h +++ b/Userland/Libraries/LibPDF/ColorSpace.h @@ -144,6 +144,21 @@ private: NonnullRefPtr m_profile; }; +class LabColorSpace final : public ColorSpace { +public: + static PDFErrorOr> create(Document*, Vector&& parameters); + + ~LabColorSpace() override = default; + + PDFErrorOr color(ReadonlySpan arguments) const override; + int number_of_components() const override { return 3; } + Vector default_decode() const override; + ColorSpaceFamily const& family() const override { return ColorSpaceFamily::Lab; } + +private: + LabColorSpace() = default; +}; + class SeparationColorSpace final : public ColorSpace { public: static PDFErrorOr> create(Document*, Vector&& parameters); diff --git a/Userland/Libraries/LibPDF/CommonNames.h b/Userland/Libraries/LibPDF/CommonNames.h index 4ad2db727c..a9b6fab62f 100644 --- a/Userland/Libraries/LibPDF/CommonNames.h +++ b/Userland/Libraries/LibPDF/CommonNames.h @@ -99,6 +99,7 @@ X(LJ) \ X(LW) \ X(LZWDecode) \ + X(Lab) \ X(Last) \ X(LastChar) \ X(Length) \