]> mj.ucw.cz Git - paperjam.git/commitdiff
Simplified single-page commands
authorMartin Mares <mj@ucw.cz>
Mon, 2 Apr 2018 09:25:21 +0000 (11:25 +0200)
committerMartin Mares <mj@ucw.cz>
Mon, 2 Apr 2018 09:25:21 +0000 (11:25 +0200)
cmds.cc
jam.h

diff --git a/cmds.cc b/cmds.cc
index ca3f81ff76f55d990291544e112016b41a42c9a6..71f9c29ae97fc5c796a7fdaceb34b7e418d30edd 100644 (file)
--- a/cmds.cc
+++ b/cmds.cc
@@ -7,7 +7,7 @@
 /*** null ***/
 
 class null_cmd : public cmd_exec {
-  vector<page *> process(vector<page *> &pages) { return pages; }
+  vector<page *> process(vector<page *> &pages) override { return pages; }
 };
 
 static const arg_def no_args[] = {
@@ -25,7 +25,7 @@ class xform_page : public page {
   page *orig_page;
   pdf_matrix xform;
 public:
-  void render(out_context *out, pdf_matrix xform);
+  void render(out_context *out, pdf_matrix xform) override;
   xform_page(page *p, pdf_matrix xf);
 };
 
@@ -49,25 +49,31 @@ void xform_page::render(out_context *out, pdf_matrix parent_xform)
   orig_page->render(out, xform * parent_xform);
 }
 
-/*** move ***/
-
-class move_cmd : public cmd_exec {
-public:
-  double x, y;
-  vector<page *> process(vector<page *> &pages);
+class cmd_exec_simple : public cmd_exec {
+  virtual page *process_page(page *p) = 0;
+  vector<page *> process(vector<page *> &pages) override;
 };
 
-vector<page *> move_cmd::process(vector<page *> &pages)
+vector<page *> cmd_exec_simple::process(vector<page *> &pages)
 {
   vector<page *> out;
   for (auto p: pages)
+    out.push_back(process_page(p));
+  return out;
+}
+
+/*** move ***/
+
+class move_cmd : public cmd_exec_simple {
+public:
+  double x, y;
+  page *process_page(page *p) override
     {
       pdf_matrix m;
       m.shift(x, y);
-      out.push_back(new xform_page(p, m));
+      return new xform_page(p, m);
     }
-  return out;
-}
+};
 
 static const arg_def move_args[] = {
   { "x",       AT_DIMEN | AT_MANDATORY | AT_POSITIONAL },
@@ -85,23 +91,16 @@ static cmd_exec *move_ctor(cmd *c)
 
 /*** scale ***/
 
-class scale_cmd : public cmd_exec {
+class scale_cmd : public cmd_exec_simple {
 public:
   double x_factor, y_factor;
-  vector<page *> process(vector<page *> &pages);
-};
-
-vector<page *> scale_cmd::process(vector<page *> &pages)
-{
-  vector<page *> out;
-  for (auto p: pages)
+  page *process_page(page *p) override
     {
       pdf_matrix m;
       m.scale(x_factor, y_factor);
-      out.push_back(new xform_page(p, m));
+      return new xform_page(p, m);
     }
-  return out;
-}
+};
 
 static const arg_def scale_args[] = {
   { "x",       AT_DOUBLE | AT_MANDATORY | AT_POSITIONAL },
@@ -119,16 +118,10 @@ static cmd_exec *scale_ctor(cmd *c)
 
 /*** rotate ***/
 
-class rotate_cmd : public cmd_exec {
+class rotate_cmd : public cmd_exec_simple {
 public:
   int deg;
-  vector<page *> process(vector<page *> &pages);
-};
-
-vector<page *> rotate_cmd::process(vector<page *> &pages)
-{
-  vector<page *> out;
-  for (auto p: pages)
+  page *process_page(page *p) override
     {
       pdf_matrix m;
       switch (deg)
@@ -150,10 +143,9 @@ vector<page *> rotate_cmd::process(vector<page *> &pages)
        default:
          abort();
        }
-      out.push_back(new xform_page(p, m));
+      return new xform_page(p, m);
     }
-  return out;
-}
+};
 
 static const arg_def rotate_args[] = {
   { "angle",   AT_INT | AT_MANDATORY | AT_POSITIONAL },
@@ -173,17 +165,11 @@ static cmd_exec *rotate_ctor(cmd *c)
 
 /*** flip ***/
 
-class flip_cmd : public cmd_exec {
+class flip_cmd : public cmd_exec_simple {
 public:
   bool horizontal;
   bool vertical;
-  vector<page *> process(vector<page *> &pages);
-};
-
-vector<page *> flip_cmd::process(vector<page *> &pages)
-{
-  vector<page *> out;
-  for (auto p: pages)
+  page *process_page(page *p) override
     {
       pdf_matrix m;
       if (vertical)
@@ -196,10 +182,9 @@ vector<page *> flip_cmd::process(vector<page *> &pages)
          m.scale(-1, 1);
          m.shift(p->width, 0);
        }
-      out.push_back(new xform_page(p, m));
+      return new xform_page(p, m);
     }
-  return out;
-}
+};
 
 static const arg_def flip_args[] = {
   { "h",       AT_SWITCH },
diff --git a/jam.h b/jam.h
index 002ad04b831d1f11b17884448a0c0ea721e4fb71..7fd316a8f4a049f7d3e944861b43b0e8b38aeb84 100644 (file)
--- a/jam.h
+++ b/jam.h
@@ -68,7 +68,7 @@ struct empty_page : public page {
 };
 
 struct cmd_exec {
-  virtual vector<page *> process(vector <page *> &pages UNUSED) { abort(); }
+  virtual vector<page *> process(vector <page *> &pages UNUSED) = 0;
 };
 
 struct cmd_def {