Commit 5fad2ed0 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

linechart: add {x,y}domain-padding property

parent dd3fc0f3
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -55,7 +55,9 @@ LinechartConfig::LinechartConfig() :
        Measure(Unit::REM, 4.0f),
        Measure(Unit::REM, 4.0f),
        Measure(Unit::REM, 4.0f),
        Measure(Unit::REM, 4.0f)}) {}
        Measure(Unit::REM, 4.0f)}) {
  domain_y.padding = 0.1f;
}

ReturnCode drawSeries(
    const LinechartSeries& series,
@@ -198,6 +200,8 @@ ReturnCode configure(const plist::PropertyList& plist, ElementRef* elem) {
    {"axis-right", std::bind(&parseAxisModeProp, std::placeholders::_1, &config.axis_right.mode)},
    {"axis-bottom", std::bind(&parseAxisModeProp, std::placeholders::_1, &config.axis_bottom.mode)},
    {"axis-left", std::bind(&parseAxisModeProp, std::placeholders::_1, &config.axis_left.mode)},
    {"xdomain-padding", std::bind(&configure_float, std::placeholders::_1, &config.domain_x.padding)},
    {"ydomain-padding", std::bind(&configure_float, std::placeholders::_1, &config.domain_y.padding)},
    {"xmin", std::bind(&configure_float_opt, std::placeholders::_1, &config.domain_x.min)},
    {"xmax", std::bind(&configure_float_opt, std::placeholders::_1, &config.domain_x.max)},
    {"ymin", std::bind(&configure_float_opt, std::placeholders::_1, &config.domain_y.min)},
+19 −0
Original line number Diff line number Diff line
@@ -93,6 +93,25 @@ ReturnCode configure_colour(
  return ReturnCode::error("EARG", "invalid colour");
}

ReturnCode configure_float(
    const plist::Property& prop,
    double* value) {
  if (prop.size() != 1) {
    return ReturnCode::errorf(
        "EARG",
        "incorrect number of arguments; expected: 1, got: $0",
        prop.size());
  }

  try {
    *value = std::stod(prop[0].data);
  } catch (... ) {
    return ERROR_INVALID_ARGUMENT;
  }

  return OK;
}

ReturnCode configure_float_opt(
    const plist::Property& prop,
    std::optional<double>* value) {
+4 −0
Original line number Diff line number Diff line
@@ -93,6 +93,10 @@ ReturnCode configure_colour(
    const plist::Property& prop,
    Colour* value);

ReturnCode configure_float(
    const plist::Property& prop,
    double* value);

ReturnCode configure_float_opt(
    const plist::Property& prop,
    std::optional<double>* value);
+13 −1
Original line number Diff line number Diff line
@@ -33,7 +33,8 @@ namespace plotfx {

DomainConfig::DomainConfig() :
    kind(DomainKind::LINEAR),
    inverted(false) {}
    inverted(false),
    padding(0.0f) {}

void domain_fit(const std::vector<double>& data, DomainConfig* domain) {
  bool fit_min = !domain->min;
@@ -47,6 +48,17 @@ void domain_fit(const std::vector<double>& data, DomainConfig* domain) {
      domain->max = std::optional<double>(d);
    }
  }

  auto range = domain->max.value_or(0.0f) - domain->min.value_or(0.0f);
  if (fit_max) {
    domain->max = std::optional<double>(
        domain->max.value_or(0.0f) + range * domain->padding);
  }

  if (fit_min) {
    domain->min = std::optional<double>(
        domain->min.value_or(0.0f) - range * domain->padding);
  }
}

double domain_translate(const DomainConfig& domain, double v) {
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ struct DomainConfig {
  bool inverted;
  std::optional<double> min;
  std::optional<double> max;
  double padding;
};

void domain_fit(const std::vector<double>& data, DomainConfig* domain);
Loading