Commit 9996b3f2 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

linechart: add point-size and point-colour properties

parent 17644a88
Loading
Loading
Loading
Loading
+41 −17
Original line number Diff line number Diff line
@@ -47,8 +47,7 @@ char LineChart::kDefaultPointSize[] = "3";
*/

LinechartSeries::LinechartSeries() :
    line_width(from_pt(2)),
    line_colour(Colour::fromRGB(0, 0, 0)) {}
    line_width(from_pt(2)) {}

LinechartConfig::LinechartConfig() :
    margins({
@@ -70,6 +69,8 @@ ReturnCode drawSeries(
    return ERROR_INVALID_ARGUMENT;
  }

  // draw line
  {
    Path path;
    for (size_t i = 0; i < series.xs.size(); ++i) {
      auto x = series.xs[i];
@@ -88,6 +89,26 @@ ReturnCode drawSeries(
    style.line_width = series.line_width;
    style.colour = series.line_colour;
    strokePath(layer, clip, path, style);
  }

  // draw points
  auto point_size = to_px(layer->measures, series.point_size);
  if (point_size > 0) {
    FillStyle style;
    style.colour = series.point_colour;
    for (size_t i = 0; i < series.xs.size(); ++i) {
      auto x = series.xs[i];
      auto y = series.ys[i];
      auto sx = clip.x + domain_translate(domain_x, x) * clip.w;
      auto sy = clip.y + (1.0 - domain_translate(domain_y, y)) * clip.h;

      // FIXME point style
      Path path;
      path.moveTo(sx + point_size, sy);
      path.arcTo(sx, sy, point_size, 0, M_PI * 2);
      fillPath(layer, clip, path, style);
    }
  }

  return OK;
}
@@ -172,10 +193,13 @@ ReturnCode configureSeries(const plist::Property& prop, LinechartConfig* config)
      "colour",
      configure_multiprop({
          std::bind(&configure_colour, std::placeholders::_1, &series.line_colour),
          std::bind(&configure_colour, std::placeholders::_1, &series.point_colour),
      })
    },
    {"line-colour", std::bind(&configure_colour, std::placeholders::_1, &series.line_colour)},
    {"line-width", std::bind(&parseMeasureProp, std::placeholders::_1, &series.line_width)},
    {"point-colour", std::bind(&configure_colour, std::placeholders::_1, &series.point_colour)},
    {"point-size", std::bind(&parseMeasureProp, std::placeholders::_1, &series.point_size)},
  };

  if (auto rc = parseAll(*prop.child, pdefs); !rc) {
+2 −0
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ struct LinechartSeries {
  std::vector<double> ys;
  Measure line_width;
  Colour line_colour;
  Measure point_size;
  Colour point_colour;
};

struct LinechartConfig {
+9 −0
Original line number Diff line number Diff line
linechart {
  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;
    line-colour: #06c;
    point-colour: #6c0;
    point-size: 5pt;
  }
}
+40.5 KiB
Loading image diff...
+8 −0
Original line number Diff line number Diff line
linechart {
  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;
    point-size: 5pt;
  }
}
Loading