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

add the axis-{...}-title-rotate option

parent 11043187
Loading
Loading
Loading
Loading
+50 −11
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ struct AxisDefinition {
  Measure title_font_size;
  Color title_color;
  Measure title_padding;
  double title_rotate;
  AxisLabelPosition title_position;
  AxisLabelPosition tick_position;
  AxisLabelPosition label_position;
@@ -84,6 +85,7 @@ struct AxisDefinition {

AxisDefinition::AxisDefinition() :
    position(AxisPosition::BOTTOM),
    title_rotate(0.0),
    label_position(AxisLabelPosition::OUTSIDE),
    tick_position(AxisLabelPosition::INSIDE) {}

@@ -432,8 +434,19 @@ static ReturnCode axis_draw_vertical(
      title_padding += label_size;
    }

    double title_size = 0;
    if (auto rc =
          axis_layout_title(
              axis_config,
              axis_config.position,
              *target,
              &title_size);
        !rc) {
      return rc;
    }

    Point p;
    p.x = x + title_padding * title_position;
    p.x = x + (title_padding + title_size * 0.5) * title_position;
    p.y = y0 + (y1 - y0) * 0.5;

    TextStyle style;
@@ -441,10 +454,18 @@ static ReturnCode axis_draw_vertical(
    style.color = axis_config.title_color;
    style.font_size = axis_config.title_font_size;

    auto ax = title_position > 0 ? HAlign::LEFT : HAlign::RIGHT;
    auto ay = VAlign::CENTER;
    if (auto rc = drawTextLabel(axis_config.title, p, ax, ay, style, target); !rc) {
      return rc;
    auto draw_rc =
      drawTextLabel(
          axis_config.title,
          p,
          HAlign::CENTER,
          VAlign::CENTER,
          axis_config.title_rotate,
          style,
          target);

    if (!draw_rc) {
      return draw_rc;
    }
  }

@@ -490,7 +511,6 @@ static ReturnCode axis_draw_horizontal(
        axis_config.border_style);
  }


  /* draw labels */
  double label_position = 0;
  switch (axis_config.label_position) {
@@ -561,19 +581,37 @@ static ReturnCode axis_draw_horizontal(
      title_padding += label_size;
    }

    double title_size = 0;
    if (auto rc =
          axis_layout_title(
              axis_config,
              axis_config.position,
              *target,
              &title_size);
        !rc) {
      return rc;
    }

    Point p;
    p.x = x0 + (x1 - x0) * 0.5;
    p.y = y + title_padding * title_position;
    p.y = y + (title_padding + title_size * 0.5) * title_position;

    TextStyle style;
    style.font = axis_config.title_font;
    style.color = axis_config.title_color;
    style.font_size = axis_config.title_font_size;

    auto ax = HAlign::CENTER;
    auto ay = label_position > 0 ? VAlign::TOP : VAlign::BOTTOM;
    if (auto rc = drawTextLabel(axis_config.title, p, ax, ay, style, target); !rc) {
      return rc;
    auto draw_rc = drawTextLabel(
        axis_config.title,
        p,
        HAlign::CENTER,
        VAlign::CENTER,
        axis_config.title_rotate,
        style,
        target);

    if (!draw_rc) {
      return draw_rc;
    }
  }

@@ -693,6 +731,7 @@ ReturnCode build(const Environment& env, const Expr* expr, ElementRef* elem) {
      {"title-font-size", bind(&expr_to_measure, _1, &config->title_font_size)},
      {"title-color", bind(&expr_to_color, _1, &config->title_color)},
      {"title-padding", bind(&expr_to_measure, _1, &config->title_padding)},
      {"title-rotate", bind(&expr_to_float64, _1, &config->title_rotate)},
    });

    if (!rc) {
+2 −0
Original line number Diff line number Diff line
@@ -321,6 +321,8 @@ ReturnCode build(
    {"axis-y-title-color", bind(&expr_rewritev, _1, "title-color", &axis_y_opts)},
    {"axis-x-title-padding", bind(&expr_rewritev, _1, "title-padding", &axis_x_opts)},
    {"axis-y-title-padding", bind(&expr_rewritev, _1, "title-padding", &axis_y_opts)},
    {"axis-x-title-rotate", bind(&expr_rewritev, _1, "title-padding", &axis_x_opts)},
    {"axis-y-title-rotate", bind(&expr_rewritev, _1, "title-padding", &axis_y_opts)},
    {"axes", bind(&expr_to_stringset, _1, &axes)},
    {"areas", bind(&build_geom, "chart/areas", _1, &geoms, &x, &y)},
    {"bars", bind(&build_geom, "chart/bars", _1, &geoms, &x, &y)},
+2 −0
Original line number Diff line number Diff line
@@ -117,6 +117,8 @@ ReturnCode build(
    {"axis-y-title-color", bind(&expr_rewritev, _1, "title-color", &axis_y_opts)},
    {"axis-x-title-padding", bind(&expr_rewritev, _1, "title-padding", &axis_x_opts)},
    {"axis-y-title-padding", bind(&expr_rewritev, _1, "title-padding", &axis_y_opts)},
    {"axis-x-title-rotate", bind(&expr_rewritev, _1, "title-padding", &axis_x_opts)},
    {"axis-y-title-rotate", bind(&expr_rewritev, _1, "title-padding", &axis_y_opts)},
    {"color", bind(&expr_rewritev, _1, "color", &line_opts)},
    {"colors", bind(&expr_rewritev, _1, "colors", &line_opts)},
    {"stroke", bind(&expr_rewritev, _1, "stroke", &line_opts)},
+2 −0
Original line number Diff line number Diff line
@@ -117,6 +117,8 @@ ReturnCode build(
    {"axis-y-title-color", bind(&expr_rewritev, _1, "title-color", &axis_y_opts)},
    {"axis-x-title-padding", bind(&expr_rewritev, _1, "title-padding", &axis_x_opts)},
    {"axis-y-title-padding", bind(&expr_rewritev, _1, "title-padding", &axis_y_opts)},
    {"axis-x-title-rotate", bind(&expr_rewritev, _1, "title-padding", &axis_x_opts)},
    {"axis-y-title-rotate", bind(&expr_rewritev, _1, "title-padding", &axis_y_opts)},
    {"size", bind(&expr_rewritev, _1, "size", &point_opts)},
    {"sizes", bind(&expr_rewritev, _1, "sizes", &point_opts)},
    {"color", bind(&expr_rewritev, _1, "color", &point_opts)},
+9 −0
Original line number Diff line number Diff line
(layout/box
  margin 1em
  body (
    (chart/axis-bottom
      ticks (linear 1)
      limit (0 16)
      title "Fnord (f/s)"
      title-rotate -45
      title-font-size 16pt)))
Loading