]> mj.ucw.cz Git - paperjam.git/commitdiff
Cropmarks mark=bg
authorMartin Mares <mj@ucw.cz>
Fri, 6 Apr 2018 20:48:33 +0000 (22:48 +0200)
committerMartin Mares <mj@ucw.cz>
Fri, 6 Apr 2018 20:48:33 +0000 (22:48 +0200)
TODO
cmds.cc

diff --git a/TODO b/TODO
index 558dc726a5930418e87e5bab0e9880e9a03d81a5..aba6a97484089cea0f78179202d42ca1cd694cf8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -34,6 +34,7 @@
 |      mark=cross      # Crosses in the corners
 |      mark=out        # Out-pointing half-crosses in the corners (default)
 |      mark=in         # In-pointing half-crosses
+|      mark=bg         # Colored background
 |      pen=1pt         # Line width
 |      len=5mm         # Cross arm length
 |      offset=5mm      # Distance from border
diff --git a/cmds.cc b/cmds.cc
index 2082ffec7517bc02f13146492428d79e81dee061..b6c8eed7cdb355bd1f4f793a8e2be268bcb52b3a 100644 (file)
--- a/cmds.cc
+++ b/cmds.cc
@@ -267,6 +267,7 @@ class cropmark_spec {
     MARK_CROSS,
     MARK_OUT,
     MARK_IN,
+    MARK_BG,
   } type;
   double pen_width;
   double arm_length;
@@ -288,6 +289,8 @@ public:
        type = MARK_IN;
       else if (t == "out")
        type = MARK_OUT;
+      else if (t == "bg")
+       type = MARK_BG;
       else
        die("Invalid cropmark type %s", t.c_str());
 
@@ -296,6 +299,7 @@ public:
       offset = c->arg(prefix + "offset")->as_double(0);
       egstate = QPDFObjectHandle::newNull();
     }
+  bool is_bg() { return (type == MARK_BG); }
   string pdf_stream(out_context *out, BBox &box, pdf_matrix &xform);
 };
 
@@ -326,7 +330,7 @@ string cropmark_spec::pdf_stream(out_context *out, BBox &box, pdf_matrix &xform)
     return "";
 
   string s = "q ";
-  s += color.to_string() + " RG ";
+  s += color.to_string() + (type == MARK_BG ? " rg " : " RG ");
   s += xform.to_string() + " cm ";
 
   if (egstate.isNull())
@@ -374,6 +378,9 @@ string cropmark_spec::pdf_stream(out_context *out, BBox &box, pdf_matrix &xform)
        s += crop_cross(b.x_max, b.y_max, 0b0110);
        s += crop_cross(b.x_min, b.y_max, 0b1010);
        break;
+    case MARK_BG:
+       s += b.to_rect() + " re f ";
+       break;
     }
 
   s += "Q ";
@@ -1245,8 +1252,11 @@ void nup_page::render(out_context *out, pdf_matrix parent_xform)
 {
   for (int i=0; i < (int) orig_pages.size(); i++)
     {
+      if (cmarks->is_bg())
+       out->contents += cmarks->pdf_stream(out, tile_boxes[i], parent_xform);
       orig_pages[i]->render(out, xforms[i] * parent_xform);
-      out->contents += cmarks->pdf_stream(out, tile_boxes[i], parent_xform);
+      if (!cmarks->is_bg())
+       out->contents += cmarks->pdf_stream(out, tile_boxes[i], parent_xform);
     }
 }