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

add the element size_hint field

parent 264f2b4e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -54,8 +54,17 @@ using ElementDrawFn = std::function<
        const LayoutInfo& layout,
        Layer* layer)>;

using ElementSizeHintFn = std::function<
    ReturnCode (
        const Layer& layer,
        const std::optional<double> max_width,
        const std::optional<double> max_height,
        double* min_width,
        double* min_height)>;

struct Element {
  ElementDrawFn draw;
  ElementSizeHintFn size_hint;
};


+27 −26
Original line number Diff line number Diff line
@@ -430,7 +430,31 @@ ReturnCode axis_layout(
  return OK;
}

ReturnCode draw(
ReturnCode axis_calculate_size(
    std::shared_ptr<AxisDefinition> axis,
    const Layer& layer,
    const std::optional<double> max_width,
    const std::optional<double> max_height,
    double* min_width,
    double* min_height) {
  double size = 0.0;
  axis_layout(*axis, axis->position, layer, &size);

  switch (axis->position) {
    case AxisPosition::TOP:
    case AxisPosition::BOTTOM:
      *min_height = size;
      break;
    case AxisPosition::RIGHT:
    case AxisPosition::LEFT:
      *min_width = size;
      break;
  }

  return OK;
}

ReturnCode axis_draw(
    std::shared_ptr<AxisDefinition> config,
    const LayoutInfo& layout,
    Layer* layer) {
@@ -478,30 +502,6 @@ ReturnCode draw(
  return rc;
}

ReturnCode reflow(
    const AxisDefinition& axis,
    const Layer& layer,
    const std::optional<double> max_width,
    const std::optional<double> max_height,
    double* min_width,
    double* min_height) {
  double size = 0.0;
  axis_layout(axis, axis.position, layer, &size);

  switch (axis.position) {
    case AxisPosition::TOP:
    case AxisPosition::BOTTOM:
      *min_height = size;
      break;
    case AxisPosition::RIGHT:
    case AxisPosition::LEFT:
      *min_width = size;
      break;
  }

  return OK;
}

ReturnCode build(const Environment& env, const Expr* expr, ElementRef* elem) {
  auto elem_name = expr_get_value(expr);

@@ -653,7 +653,8 @@ ReturnCode build(const Environment& env, const Expr* expr, ElementRef* elem) {


  *elem = std::make_shared<Element>();
  (*elem)->draw = bind(&draw, config, _1, _2);
  (*elem)->draw = bind(&axis_draw, config, _1, _2);
  (*elem)->size_hint = bind(&axis_calculate_size, config, _1, _2, _3, _4, _5);
  return OK;
}