diff --git a/Userland/Libraries/LibPDF/Renderer.cpp b/Userland/Libraries/LibPDF/Renderer.cpp index 13dbff0bc7..862c6ef68f 100644 --- a/Userland/Libraries/LibPDF/Renderer.cpp +++ b/Userland/Libraries/LibPDF/Renderer.cpp @@ -293,6 +293,12 @@ RENDERER_HANDLER(path_append_rect) void Renderer::begin_path_paint() { + if (state().paint_style.has>()) { + VERIFY(!m_original_paint_style); + m_original_paint_style = state().paint_style.get>(); + auto translation = Gfx::AffineTransform().translate(m_current_path.bounding_box().x(), m_current_path.bounding_box().y()); + state().paint_style = { MUST(Gfx::OffsetPaintStyle::create(state().paint_style.get>(), translation)) }; + } auto bounding_box = state().clipping_paths.current.bounding_box(); m_painter.clear_clip_rect(); if (m_rendering_preferences.show_clipping_paths) { @@ -306,6 +312,11 @@ void Renderer::end_path_paint() m_current_path.clear(); m_painter.clear_clip_rect(); state().clipping_paths.current = state().clipping_paths.next; + + if (m_original_paint_style) { + state().paint_style = m_original_paint_style.release_nonnull(); + m_original_paint_style = nullptr; + } } RENDERER_HANDLER(path_stroke) diff --git a/Userland/Libraries/LibPDF/Renderer.h b/Userland/Libraries/LibPDF/Renderer.h index af0d64a4af..ae5e1023c1 100644 --- a/Userland/Libraries/LibPDF/Renderer.h +++ b/Userland/Libraries/LibPDF/Renderer.h @@ -173,6 +173,8 @@ private: Gfx::AffineTransform mutable m_text_rendering_matrix; HashMap> m_font_cache; + // Used to offset the PaintStyle's origin when rendering a pattern. + RefPtr m_original_paint_style; }; }