diff --git a/Userland/Libraries/LibPDF/ColorSpace.cpp b/Userland/Libraries/LibPDF/ColorSpace.cpp index f647307350..d9b87a0dc9 100644 --- a/Userland/Libraries/LibPDF/ColorSpace.cpp +++ b/Userland/Libraries/LibPDF/ColorSpace.cpp @@ -11,7 +11,7 @@ namespace PDF { -PDFErrorOr> ColorSpace::create(Document* document, FlyString const& name, Page const& page) +PDFErrorOr> ColorSpace::create(Document* document, FlyString const& name, NonnullRefPtr resources) { // Simple color spaces with no parameters, which can be specified directly if (name == CommonNames::DeviceGray) @@ -25,7 +25,7 @@ PDFErrorOr> ColorSpace::create(Document* document, Fly // The color space is a complex color space with parameters that resides in // the resource dictionary - auto color_space_resource_dict = TRY(page.resources->get_dict(document, CommonNames::ColorSpace)); + auto color_space_resource_dict = TRY(resources->get_dict(document, CommonNames::ColorSpace)); if (!color_space_resource_dict->contains(name)) TODO(); @@ -41,7 +41,7 @@ PDFErrorOr> ColorSpace::create(Document* document, Fly return TRY(CalRGBColorSpace::create(document, move(parameters))); if (color_space_name == CommonNames::ICCBased) - return TRY(ICCBasedColorSpace::create(document, page, move(parameters))); + return TRY(ICCBasedColorSpace::create(document, resources, move(parameters))); dbgln("Unknown color space: {}", color_space_name); TODO(); @@ -261,7 +261,7 @@ Color CalRGBColorSpace::color(Vector const& arguments) const return Color(red, green, blue); } -PDFErrorOr> ICCBasedColorSpace::create(Document* document, Page const& page, Vector&& parameters) +PDFErrorOr> ICCBasedColorSpace::create(Document* document, NonnullRefPtr resources, Vector&& parameters) { if (parameters.is_empty()) return Error { Error::Type::MalformedPDF, "ICCBased color space expected one parameter" }; @@ -287,7 +287,7 @@ PDFErrorOr> ICCBasedColorSpace::create(Document* docum name = TRY(dict->get_name(document, CommonNames::Alternate))->name(); } - return TRY(ColorSpace::create(document, name, page)); + return TRY(ColorSpace::create(document, name, resources)); } Color ICCBasedColorSpace::color(Vector const&) const diff --git a/Userland/Libraries/LibPDF/ColorSpace.h b/Userland/Libraries/LibPDF/ColorSpace.h index 63f3cfd996..60eaf79ff8 100644 --- a/Userland/Libraries/LibPDF/ColorSpace.h +++ b/Userland/Libraries/LibPDF/ColorSpace.h @@ -29,7 +29,7 @@ struct Page; class ColorSpace : public RefCounted { public: - static PDFErrorOr> create(Document*, FlyString const& name, Page const& page); + static PDFErrorOr> create(Document*, FlyString const& name, NonnullRefPtr resources); virtual ~ColorSpace() = default; @@ -91,7 +91,7 @@ private: class ICCBasedColorSpace final : public ColorSpace { public: - static PDFErrorOr> create(Document*, Page const&, Vector&& parameters); + static PDFErrorOr> create(Document*, NonnullRefPtr resources, Vector&& parameters); ~ICCBasedColorSpace() override = default; diff --git a/Userland/Libraries/LibPDF/Renderer.cpp b/Userland/Libraries/LibPDF/Renderer.cpp index 8a97f0fcb3..35db2e697e 100644 --- a/Userland/Libraries/LibPDF/Renderer.cpp +++ b/Userland/Libraries/LibPDF/Renderer.cpp @@ -496,14 +496,14 @@ RENDERER_TODO(type3_font_set_glyph_width_and_bbox) RENDERER_HANDLER(set_stroking_space) { - state().stroke_color_space = TRY(get_color_space(args[0])); + state().stroke_color_space = TRY(get_color_space(args[0], m_page.resources)); VERIFY(state().stroke_color_space); return {}; } RENDERER_HANDLER(set_painting_space) { - state().paint_color_space = TRY(get_color_space(args[0])); + state().paint_color_space = TRY(get_color_space(args[0], m_page.resources)); VERIFY(state().paint_color_space); return {}; } @@ -701,10 +701,10 @@ void Renderer::show_text(String const& string) m_text_matrix.translate(delta_x / text_rendering_matrix.x_scale(), 0.0f); } -PDFErrorOr> Renderer::get_color_space(Value const& value) +PDFErrorOr> Renderer::get_color_space(Value const& value, NonnullRefPtr resources) { auto name = value.get>()->cast()->name(); - return TRY(ColorSpace::create(m_document, name, m_page)); + return TRY(ColorSpace::create(m_document, name, resources)); } Gfx::AffineTransform const& Renderer::calculate_text_rendering_matrix() diff --git a/Userland/Libraries/LibPDF/Renderer.h b/Userland/Libraries/LibPDF/Renderer.h index 4f0e1b0f62..b47af63634 100644 --- a/Userland/Libraries/LibPDF/Renderer.h +++ b/Userland/Libraries/LibPDF/Renderer.h @@ -109,7 +109,7 @@ private: void end_path_paint(); PDFErrorOr set_graphics_state_from_dict(NonnullRefPtr); void show_text(String const&); - PDFErrorOr> get_color_space(Value const&); + PDFErrorOr> get_color_space(Value const&, NonnullRefPtr); ALWAYS_INLINE GraphicsState const& state() const { return m_graphics_state_stack.last(); } ALWAYS_INLINE GraphicsState& state() { return m_graphics_state_stack.last(); }