blob: 7df7e6235d6f36bcd6a87a59721b29d7d05d98a7 [file] [log] [blame]
// Copyright 2017 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.
#include "core/layout/ng/inline/ng_inline_item_result.h"
#include "core/layout/ng/inline/ng_inline_node.h"
#include "core/layout/ng/ng_constraint_space.h"
namespace blink {
NGInlineItemResult::NGInlineItemResult()
: item(nullptr), item_index(0), start_offset(0), end_offset(0) {}
NGInlineItemResult::NGInlineItemResult(const NGInlineItem* item,
unsigned index,
unsigned start,
unsigned end)
: item(item), item_index(index), start_offset(start), end_offset(end) {}
void NGLineInfo::SetLineStyle(const NGInlineNode& node,
const NGConstraintSpace& constraint_space,
bool is_first_line,
bool is_after_forced_break) {
LayoutObject* layout_object = node.GetLayoutObject();
use_first_line_style_ =
is_first_line &&
layout_object->GetDocument().GetStyleEngine().UsesFirstLineRules();
line_style_ = layout_object->Style(use_first_line_style_);
if (line_style_->ShouldUseTextIndent(is_first_line, is_after_forced_break)) {
// 'text-indent' applies to block container, and percentage is of its
// containing block.
// https://drafts.csswg.org/css-text-3/#valdef-text-indent-percentage
// In our constraint space tree, parent constraint space is of its
// containing block.
// TODO(kojii): ComputeMinMaxSize does not know parent constraint
// space that we cannot compute percent for text-indent.
const Length& length = line_style_->TextIndent();
LayoutUnit maximum_value;
if (length.IsPercentOrCalc() &&
constraint_space.ParentPercentageResolutionInlineSize().has_value())
maximum_value = *constraint_space.ParentPercentageResolutionInlineSize();
text_indent_ = MinimumValueForLength(length, maximum_value);
} else {
text_indent_ = LayoutUnit();
}
}
void NGLineInfo::SetLineBfcOffset(NGBfcOffset line_bfc_offset,
LayoutUnit available_width,
LayoutUnit width) {
line_bfc_offset_ = line_bfc_offset;
available_width_ = available_width;
width_ = width;
}
void NGLineInfo::SetLineEndShapeResult(
scoped_refptr<ShapeResult> result,
scoped_refptr<const ComputedStyle> style) {
line_end_shape_result_ = std::move(result);
line_end_style_ = std::move(style);
}
} // namespace blink