Commit cce0b33b authored by Paul Asmuth's avatar Paul Asmuth
Browse files

linechart: make margins configurable

parent 99a96050
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -51,7 +51,11 @@ LinechartSeries::LinechartSeries() :
    colour(Colour::fromRGB(0, 0, 0)) {}

LinechartConfig::LinechartConfig() :
    margin_rem(4.0f) {}
    margins({
        Measure(Unit::REM, 4.0f),
        Measure(Unit::REM, 4.0f),
        Measure(Unit::REM, 4.0f),
        Measure(Unit::REM, 4.0f)}) {}

ReturnCode drawSeries(
    const LinechartSeries& series,
@@ -102,10 +106,10 @@ ReturnCode draw(
  // setup layout
  auto border_box = layout_margin_box(
      clip,
      from_rem(*layer, config.margin_rem),
      from_rem(*layer, config.margin_rem),
      from_rem(*layer, config.margin_rem),
      from_rem(*layer, config.margin_rem));
      to_unit(layer->measures, config.margins[0]).value,
      to_unit(layer->measures, config.margins[1]).value,
      to_unit(layer->measures, config.margins[2]).value,
      to_unit(layer->measures, config.margins[3]).value);

  // render axes
  AxisDefinition axis_top;
@@ -177,6 +181,10 @@ ReturnCode configureSeries(const plist::Property& prop, LinechartConfig* config)
ReturnCode configure(const plist::PropertyList& plist, ElementRef* elem) {
  LinechartConfig config;
  static const ParserDefinitions pdefs = {
    {"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])},
    {"margin-left", std::bind(&parseMeasureProp, std::placeholders::_1, &config.margins[3])},
    {"axis-top", std::bind(&parseAxisModeProp, std::placeholders::_1, &config.axis_top.mode)},
    {"axis-right", std::bind(&parseAxisModeProp, std::placeholders::_1, &config.axis_right.mode)},
    {"axis-bottom", std::bind(&parseAxisModeProp, std::placeholders::_1, &config.axis_bottom.mode)},
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ struct LinechartConfig {
  AxisDefinition axis_right;
  AxisDefinition axis_bottom;
  AxisDefinition axis_left;
  double margin_rem;
  Measure margins[4];
  std::vector<LinechartSeries> series;
};

+19 −0
Original line number Diff line number Diff line
@@ -79,6 +79,25 @@ Measure to_px(const MeasureTable& t, const Measure& v) {
  return Measure{.unit = Unit::PX, .value = v_px};
}

Measure to_unit(const MeasureTable& t, const Measure& v) {
  double v_unit;

  switch (v.unit) {
    case Unit::UNIT:
    case Unit::PX:
      v_unit = v.value;
      break;
    case Unit::PT:
      v_unit = (v.value / 72.0) * t.dpi;
      break;
    case Unit::REM:
      v_unit = ((v.value * t.rem) / 72.0) * t.dpi;
      break;
  }

  return Measure{.unit = Unit::UNIT, .value = v_unit};
}

ReturnCode parse_measure(const std::string& s, Measure* measure) {
  double value;
  size_t unit_pos;
+1 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ Measure from_pt(double v);
Measure from_rem(double v);

Measure to_px(const MeasureTable& t, const Measure& v);
Measure to_unit(const MeasureTable& t, const Measure& v);

ReturnCode parse_measure(const std::string& s, Measure* value);

+4 −0
Original line number Diff line number Diff line
linechart
    margin-top
    margin-right
    margin-bottom
    margin-left
    axis-top -> off, auto, manual
    axis-right -> off, auto, manual
    axis-bottom -> off auto, manual
Loading