Explorar el Código

LibPDF: Introduce rendering preferences and show clipping paths

A new struct allows users to specify specific rendering preferences that
the Renderer class might use to paint some Document elements onto the
target bitmap. The first toggle allows rendering (or not) the clipping
paths on a page, which is useful for debugging.
Rodrigo Tobar hace 2 años
padre
commit
e92ec26771
Se han modificado 2 ficheros con 14 adiciones y 5 borrados
  1. 7 3
      Userland/Libraries/LibPDF/Renderer.cpp
  2. 7 2
      Userland/Libraries/LibPDF/Renderer.h

+ 7 - 3
Userland/Libraries/LibPDF/Renderer.cpp

@@ -21,9 +21,9 @@
 
 namespace PDF {
 
-PDFErrorOr<void> Renderer::render(Document& document, Page const& page, RefPtr<Gfx::Bitmap> bitmap)
+PDFErrorOr<void> Renderer::render(Document& document, Page const& page, RefPtr<Gfx::Bitmap> bitmap, RenderingPreferences rendering_preferences)
 {
-    return Renderer(document, page, bitmap).render();
+    return Renderer(document, page, bitmap, rendering_preferences).render();
 }
 
 static void rect_path(Gfx::Path& path, float x, float y, float width, float height)
@@ -48,12 +48,13 @@ static Gfx::Path rect_path(Gfx::Rect<T> rect)
     return rect_path(rect.x(), rect.y(), rect.width(), rect.height());
 }
 
-Renderer::Renderer(RefPtr<Document> document, Page const& page, RefPtr<Gfx::Bitmap> bitmap)
+Renderer::Renderer(RefPtr<Document> document, Page const& page, RefPtr<Gfx::Bitmap> bitmap, RenderingPreferences rendering_preferences)
     : m_document(document)
     , m_bitmap(bitmap)
     , m_page(page)
     , m_painter(*bitmap)
     , m_anti_aliasing_painter(m_painter)
+    , m_rendering_preferences(rendering_preferences)
 {
     auto media_box = m_page.media_box;
 
@@ -247,6 +248,9 @@ void Renderer::begin_path_paint()
 {
     auto bounding_box = map(state().clipping_paths.current.bounding_box());
     m_painter.clear_clip_rect();
+    if (m_rendering_preferences.show_clipping_paths) {
+        m_painter.stroke_path(rect_path(bounding_box), Color::Black, 1);
+    }
     m_painter.add_clip_rect(bounding_box.to_type<int>());
 }
 

+ 7 - 2
Userland/Libraries/LibPDF/Renderer.h

@@ -84,12 +84,16 @@ struct GraphicsState {
     TextState text_state {};
 };
 
+struct RenderingPreferences {
+    bool show_clipping_paths { false };
+};
+
 class Renderer {
 public:
-    static PDFErrorOr<void> render(Document&, Page const&, RefPtr<Gfx::Bitmap>);
+    static PDFErrorOr<void> render(Document&, Page const&, RefPtr<Gfx::Bitmap>, RenderingPreferences preferences);
 
 private:
-    Renderer(RefPtr<Document>, Page const&, RefPtr<Gfx::Bitmap>);
+    Renderer(RefPtr<Document>, Page const&, RefPtr<Gfx::Bitmap>, RenderingPreferences);
 
     PDFErrorOr<void> render();
 
@@ -128,6 +132,7 @@ private:
     Page const& m_page;
     Gfx::Painter m_painter;
     Gfx::AntiAliasingPainter m_anti_aliasing_painter;
+    RenderingPreferences m_rendering_preferences;
 
     Gfx::Path m_current_path;
     Vector<GraphicsState> m_graphics_state_stack;