Commit 5142e376 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

add layer/{resize,set-dpi}

parent 0c933a7a
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@


namespace clip {
namespace clip {


using CommandFnRef = ReturnCode (*) (Context*, const Expr*);
using CommandFn = std::function<ReturnCode (Context*, const Expr*)>;
using CommandFn = std::function<ReturnCode (Context*, const Expr*)>;


struct Command {
struct Command {
@@ -28,6 +29,8 @@ struct Command {


using CommandMap = std::unordered_map<std::string, Command>;
using CommandMap = std::unordered_map<std::string, Command>;


CommandFn bind_cmd(CommandFnRef ref);

} // namespace clip
} // namespace clip


+7 −5
Original line number Original line Diff line number Diff line
@@ -20,13 +20,15 @@
namespace clip {
namespace clip {


const CommandMap COMMANDS = {
const CommandMap COMMANDS = {
  //{"width", CommandFn(&context_configure)},
  {"layer/resize", bind_cmd(&layer_resize)},
  //{"height", CommandFn(&context_configure)},
  {"layer/set-dpi", bind_cmd(&layer_set_dpi)},
  //{"dpi", CommandFn(&context_configure)},
  {"tools/plotgen", bind_cmd(&plot_eval)},
  //{"draw/rectangle", CommandFn(&draw::rectangle)},
  {"tools/plotgen", CommandFn(&plot_eval)},
};
};


CommandFn bind_cmd(CommandFnRef ref) {
  return ref;
}

} // namespace clip
} // namespace clip


+55 −2
Original line number Original line Diff line number Diff line
@@ -53,6 +53,59 @@ ReturnCode layer_create(
  return OK;
  return OK;
}
}


void layer_resize(
    Layer* layer,
    Measure width,
    Measure height) {
  layer->width = width;
  layer->height = height;
}

void layer_set_dpi(
    Layer* layer,
    double dpi) {
  layer->dpi = dpi;
}

ReturnCode layer_resize(
    Context* ctx,
    const Expr* expr) {
  auto args = expr_collect(expr);
  if (args.size() != 2) {
    return err_invalid_nargs(args.size(), 2);
  }

  Measure width;
  if (auto rc = measure_read(args[0], &width); !rc) {
    return rc;
  }

  Measure height;
  if (auto rc = measure_read(args[1], &height); !rc) {
    return rc;
  }

  layer_resize(layer_get(ctx), width, height);
  return OK;
}

ReturnCode layer_set_dpi(
    Context* ctx,
    const Expr* expr) {
  auto args = expr_collect(expr);
  if (args.size() != 1) {
    return err_invalid_nargs(args.size(), 1);
  }

  double dpi;
  if (auto rc = expr_to_float64(args[0], &dpi); !rc) {
    return rc;
  }

  layer_set_dpi(layer_get(ctx), dpi);
  return OK;
}

Layer* layer_get(Context* ctx) {
Layer* layer_get(Context* ctx) {
  return ctx->layer.get();
  return ctx->layer.get();
}
}
@@ -61,11 +114,11 @@ const Layer* layer_get(const Context* ctx) {
  return ctx->layer.get();
  return ctx->layer.get();
}
}


float layer_get_dpi(const Context* ctx) {
double layer_get_dpi(const Context* ctx) {
  return layer_get_dpi(layer_get(ctx));
  return layer_get_dpi(layer_get(ctx));
}
}


float layer_get_dpi(const Layer* layer) {
double layer_get_dpi(const Layer* layer) {
  return layer->dpi;
  return layer->dpi;
}
}


+19 −2
Original line number Original line Diff line number Diff line
@@ -45,11 +45,28 @@ ReturnCode layer_create(
    Context* ctx,
    Context* ctx,
    std::unique_ptr<Layer>* layer_storage);
    std::unique_ptr<Layer>* layer_storage);


void layer_resize(
    Layer* layer,
    Measure width,
    Measure height);

ReturnCode layer_resize(
    Context* ctx,
    const Expr* expr);

void layer_set_dpi(
    Layer* layer,
    double dpi);

ReturnCode layer_set_dpi(
    Context* ctx,
    const Expr* expr);

Layer* layer_get(Context* ctx);
Layer* layer_get(Context* ctx);
const Layer* layer_get(const Context* ctx);
const Layer* layer_get(const Context* ctx);


float layer_get_dpi(const Context* ctx);
double layer_get_dpi(const Context* ctx);
float layer_get_dpi(const Layer* layer);
double layer_get_dpi(const Layer* layer);


Measure layer_get_rem(const Context* ctx);
Measure layer_get_rem(const Context* ctx);
Measure layer_get_rem(const Layer* layer);
Measure layer_get_rem(const Layer* layer);
+10 −0
Original line number Original line Diff line number Diff line
@@ -34,6 +34,16 @@ ReturnCode err_invalid_value(
  };
  };
}
}


ReturnCode err_invalid_nargs(size_t nargs, size_t nargs_expect) {
  return {
    ERROR,
    fmt::format(
        "invalid number of arguments; got {} but expected {}",
        nargs,
        nargs_expect)
  };
}

void error_print(const ReturnCode& rc, std::ostream& os) {
void error_print(const ReturnCode& rc, std::ostream& os) {
  switch (rc.code) {
  switch (rc.code) {
    case OK:
    case OK:
Loading