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

improved discrete axis layout

parent ac4f3d93
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ axis {

axis {
  position: bottom;
  layout: discrete;
  layout: linear(1, align 1);
}

axis {
+3 −3
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ double domain_translate_linear(
    vt = 1.0 - vt;
  }

  return std::clamp(vt, 0.0, 1.0);
  return vt;
}

double domain_translate_log(
@@ -128,7 +128,7 @@ double domain_translate_log(
    vt = 1.0 - vt;
  }

  return std::clamp(vt, 0.0, 1.0);
  return vt;
}

double domain_translate_discrete(
@@ -143,7 +143,7 @@ double domain_translate_discrete(
    vt = 1.0 - vt;
  }

  return std::clamp(vt, 0.0, 1.0);
  return vt;
}

double domain_translate(
+24 −13
Original line number Diff line number Diff line
@@ -447,24 +447,35 @@ ReturnCode axis_place_labels_subdivide(
ReturnCode axis_place_labels_discrete(
    const DomainConfig& domain,
    AxisDefinition* axis) {
  auto range = domain_max(domain) + 1;
  uint32_t step = 1;
  uint32_t range = domain_max(domain) - domain_min(domain);

  axis->labels.clear();
  axis->ticks.clear();
  axis->ticks.push_back(0.0f);

  std::vector<double> label_positions;
  for (size_t i = 0; i < range; ++i) {
    auto o = (1.0f / range) * (i + 1);
    label_positions.push_back(o - 0.5 / range);
    axis->ticks.push_back(o);
  for (size_t i = 0; i <= range; i += step) {
    auto o = domain_translate(domain, i);
    auto o1 = domain_translate(domain, i - step * 0.5);
    auto o2 = domain_translate(domain, i + step * 0.5);
    auto v = uint32_t(domain_min(domain)) + i;

    auto label = axis->label_formatter(std::to_string(i));
    if (step > 1) {
      label += " - ";
      label += axis->label_formatter(std::to_string(i + step));
    }

  auto label_values = domain_untranslate(domain, label_positions);
  for (size_t i = 0; i < label_positions.size(); ++i) {
    axis->labels.emplace_back(
        label_positions[i],
        axis->label_formatter(label_values[i]));
    if (o1 >= 0 && o2 <= 1) {
      axis->labels.emplace_back(o, label);
    }

    if (o1 >= 0 && o1 <= 1) {
      axis->ticks.push_back(o1);
    }

    if (o2 >= 0 && o2 <= 1) {
      axis->ticks.push_back(o2);
    }
  }

  return OK;