Commit 1ab27060 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

linechart: add 'margin' property to set all margins at once

parent cce0b33b
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -181,6 +181,15 @@ ReturnCode configureSeries(const plist::Property& prop, LinechartConfig* config)
ReturnCode configure(const plist::PropertyList& plist, ElementRef* elem) {
  LinechartConfig config;
  static const ParserDefinitions pdefs = {
    {
      "margin",
      configure_multiprop({
          std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[0]),
          std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[1]),
          std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[2]),
          std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[3])
      })
    },
    {"margin-top", std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[0])},
    {"margin-right", std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[1])},
    {"margin-bottom", std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[2])},
+12 −0
Original line number Diff line number Diff line
@@ -62,6 +62,18 @@ ReturnCode parseMeasureProp(
  return parse_measure(prop[0], value);
}

ParserFn configure_multiprop(const std::vector<ParserFn>& parsers) {
  return [parsers] (const plist::Property& prop) -> ReturnCode {
    for (const auto& p : parsers) {
      if (auto rc = p(prop); !rc) {
        return rc;
      }
    }

    return OK;
  };
}

ReturnCode configure_colour(
    const plist::Property& prop,
    Colour* value) {
+5 −3
Original line number Diff line number Diff line
@@ -37,9 +37,9 @@

namespace plotfx {

using ParserDefinitions = std::unordered_map<
    std::string,
    std::function<ReturnCode (const plist::Property&)>>;
using ParserFn = std::function<ReturnCode (const plist::Property&)>;

using ParserDefinitions = std::unordered_map<std::string, ParserFn>;

inline ReturnCode parseAll(
    const plist::PropertyList& plist,
@@ -79,6 +79,8 @@ ReturnCode parseEnum(
  return ReturnCode::success();
}

ParserFn configure_multiprop(const std::vector<ParserFn>& parsers);

ReturnCode parseDataSeries(
    const plist::Property& prop,
    std::vector<double>* data);
+9 −0
Original line number Diff line number Diff line
linechart {
  margin: 130px;

  series {
    xs: 10   20   30   40   50   60    70   80  90  100;
    ys: 1.23 4.32 3.23 6.43 3.45 12.32 8.14 5.2 3.5 2.2;
    colour: #06c;
  }
}
+44.3 KiB
Loading image diff...