1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:17:36 +00:00

LibPDF: Add smoke-and-mirror implementation of SeparationColorSpace

None of the methods actually do anything, but we now create an
actual SeparationColorSpace object for /Separation color spaces.

This fixes a crash on page 810 of pdf_reference_1-7.pdf.
Previously, we'd log a "separation color space not supported" error,
which would lead to Renderer not updating its current color space.
It'd stay a DeviceCYMK color space, which would then later assert
when it got a 1-argument array as color (which now the
SeparationColorSpace gets instead, which logs an "unimplemented"
error for that instead of asserting).
This commit is contained in:
Nico Weber 2023-07-23 16:55:10 -04:00 committed by Tim Flynn
parent af5a7b9a51
commit fad834a21c
3 changed files with 37 additions and 0 deletions

View file

@ -59,6 +59,9 @@ PDFErrorOr<NonnullRefPtr<ColorSpace>> ColorSpace::create(Document* document, Non
if (color_space_name == CommonNames::ICCBased)
return TRY(ICCBasedColorSpace::create(document, move(parameters)));
if (color_space_name == CommonNames::Separation)
return TRY(SeparationColorSpace::create(document, move(parameters)));
dbgln("Unknown color space: {}", color_space_name);
return Error::rendering_unsupported_error("unknown color space");
}
@ -368,4 +371,22 @@ Vector<float> ICCBasedColorSpace::default_decode() const
}
}
PDFErrorOr<NonnullRefPtr<SeparationColorSpace>> SeparationColorSpace::create(Document*, Vector<Value>&&)
{
auto color_space = adopt_ref(*new SeparationColorSpace());
// FIXME: Implement.
return color_space;
}
PDFErrorOr<Color> SeparationColorSpace::color(Vector<Value> const&) const
{
return Error::rendering_unsupported_error("Separation color spaces not yet implemented");
}
Vector<float> SeparationColorSpace::default_decode() const
{
warnln("PDF: TODO implement SeparationColorSpace::default_decode()");
return {};
}
}