// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FLUTTER_LIB_UI_TEXT_LINE_METRICS_H_
#define FLUTTER_LIB_UI_TEXT_LINE_METRICS_H_

#include "third_party/dart/runtime/include/dart_api.h"
#include "third_party/tonic/converter/dart_converter.h"

namespace flutter {

struct LineMetrics {
  const bool* hard_break;

  // The final computed ascent and descent for the line. This can be impacted by
  // the strut, height, scaling, as well as outlying runs that are very tall.
  //
  // The top edge is `baseline - ascent` and the bottom edge is `baseline +
  // descent`. Ascent and descent are provided as positive numbers. Raw numbers
  // for specific runs of text can be obtained in run_metrics_map. These values
  // are the cumulative metrics for the entire line.
  const double* ascent;
  const double* descent;
  const double* unscaled_ascent;
  // Height of the line.
  const double* height;
  // Width of the line.
  const double* width;
  // The left edge of the line. The right edge can be obtained with `left +
  // width`
  const double* left;
  // The y position of the baseline for this line from the top of the paragraph.
  const double* baseline;
  // Zero indexed line number.
  const size_t* line_number;

  LineMetrics();

  LineMetrics(const bool* hard_break,
              const double* ascent,
              const double* descent,
              const double* unscaled_ascent,
              const double* height,
              const double* width,
              const double* left,
              const double* baseline,
              const size_t* line_number)
      : hard_break(hard_break),
        ascent(ascent),
        descent(descent),
        unscaled_ascent(unscaled_ascent),
        height(height),
        width(width),
        left(left),
        baseline(baseline),
        line_number(line_number) {}
};

}  // namespace flutter

#endif  // FLUTTER_LIB_UI_TEXT_LINE_METRICS_H_
