// Copyright 2016 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 NGLengthUtils_h
#define NGLengthUtils_h

#include "core/CoreExport.h"
#include "core/layout/ng/ng_direction.h"
#include "core/layout/ng/ng_writing_mode.h"

namespace blink {
class ComputedStyle;
class LayoutUnit;
class Length;
class NGConstraintSpace;
struct NGBoxStrut;
class NGFragment;

enum class LengthResolveType {
  MinSize,
  MaxSize,
  ContentSize,
  MarginBorderPaddingSize
};

#define NGSizeIndefinite LayoutUnit(-1)

// Convert an inline-axis length to a layout unit using the given constraint
// space.
CORE_EXPORT LayoutUnit ResolveInlineLength(const NGConstraintSpace&,
                                           const ComputedStyle&,
                                           const Length&,
                                           LengthResolveType);

// Convert a block-axis length to a layout unit using the given constraint
// space and content size.
CORE_EXPORT LayoutUnit ResolveBlockLength(const NGConstraintSpace&,
                                          const ComputedStyle&,
                                          const Length&,
                                          LayoutUnit contentSize,
                                          LengthResolveType);

// Resolves the given length to a layout unit, constraining it by the min
// logical width and max logical width properties from the ComputedStyle
// object.
CORE_EXPORT LayoutUnit ComputeInlineSizeForFragment(const NGConstraintSpace&,
                                                    const ComputedStyle&);

// Resolves the given length to a layout unit, constraining it by the min
// logical height and max logical height properties from the ComputedStyle
// object.
CORE_EXPORT LayoutUnit ComputeBlockSizeForFragment(const NGConstraintSpace&,
                                                   const ComputedStyle&,
                                                   LayoutUnit contentSize);

CORE_EXPORT NGBoxStrut ComputeMargins(const NGConstraintSpace&,
                                      const ComputedStyle&,
                                      const NGWritingMode writing_mode,
                                      const NGDirection direction);

CORE_EXPORT NGBoxStrut ComputeBorders(const ComputedStyle&);

CORE_EXPORT NGBoxStrut ComputePadding(const NGConstraintSpace&,
                                      const ComputedStyle&);

// Resolves margin: auto in the inline direction after a box has been laid out.
// This uses the container size from the constraint space and the box size from
// the fragment to compute the margins that are auto, if any, and adjusts
// the given NGBoxStrut accordingly.
CORE_EXPORT void ApplyAutoMargins(const NGConstraintSpace&,
                                  const ComputedStyle&,
                                  const NGFragment&,
                                  NGBoxStrut* margins);

}  // namespace blink

#endif  // NGLengthUtils_h
