/*** 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[] = {
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);
};
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 },
/*** 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 },
/*** 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)
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 },
/*** 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)
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 },