// Copyright 2018 The Chromium 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 THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_EXCLUSIONS_NG_LINE_LAYOUT_OPPORTUNITY_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_EXCLUSIONS_NG_LINE_LAYOUT_OPPORTUNITY_H_

#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/layout_unit.h"
#include "third_party/blink/renderer/platform/wtf/allocator.h"

namespace blink {

// This struct represents a 1D-area where a line can fit. It is only used for
// representing the inline size.
struct CORE_EXPORT NGLineLayoutOpportunity {
  STACK_ALLOCATED();

  NGLineLayoutOpportunity() {}
  NGLineLayoutOpportunity(LayoutUnit inline_size)
      : line_right_offset(inline_size), float_line_right_offset(inline_size) {}
  NGLineLayoutOpportunity(LayoutUnit line_left_offset,
                          LayoutUnit line_right_offset,
                          LayoutUnit float_line_left_offset,
                          LayoutUnit float_line_right_offset,
                          LayoutUnit bfc_block_offset,
                          LayoutUnit line_block_size)
      : line_left_offset(line_left_offset),
        line_right_offset(line_right_offset),
        float_line_left_offset(float_line_left_offset),
        float_line_right_offset(float_line_right_offset),
        bfc_block_offset(bfc_block_offset),
        line_block_size(line_block_size) {}

  // The available inline-size of the line, taking shapes into account. Both
  // offsets are relative to the BFC coordinate system.
  LayoutUnit line_left_offset;
  LayoutUnit line_right_offset;

  // The available inline-size of the line *for floats*. This is the same size
  // as the layout opportunity which generated this object. Both offsets are
  // relative to the BFC coordinate system.
  LayoutUnit float_line_left_offset;
  LayoutUnit float_line_right_offset;

  LayoutUnit bfc_block_offset;

  // The block-size this line layout opportunity was created with. Should
  // *only* be used for re-querying for a new line layout opportunity with the
  // same block-size.
  LayoutUnit line_block_size;

  LayoutUnit AvailableInlineSize() const {
    DCHECK_GE(line_right_offset, line_left_offset);
    return line_right_offset - line_left_offset;
  }

  LayoutUnit AvailableFloatInlineSize() const {
    DCHECK_GE(float_line_right_offset, float_line_left_offset);
    return float_line_right_offset - float_line_left_offset;
  }
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_EXCLUSIONS_NG_LINE_LAYOUT_OPPORTUNITY_H_
