浏览代码

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 2 年之前
父节点
当前提交
e92ec26771
共有 2 个文件被更改,包括 14 次插入5 次删除
  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;