blob: 2a08e928c5546666b3d008978f9709fadf79d3d6 [file] [log] [blame]
// 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