1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/core/layout/constraint_space.h"
#include <algorithm>
#include <memory>
#include "third_party/blink/renderer/core/layout/constraint_space_builder.h"
#include "third_party/blink/renderer/core/layout/layout_block.h"
#include "third_party/blink/renderer/core/layout/layout_box_utils.h"
#include "third_party/blink/renderer/core/layout/layout_result.h"
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/layout/length_utils.h"
#include "third_party/blink/renderer/platform/wtf/size_assertions.h"
namespace blink {
namespace {
struct SameSizeAsConstraintSpace {
LogicalSize available_size;
LogicalSize percentage_size;
BfcOffset bfc_offset;
ExclusionSpace exclusion_space;
Member<void*> rare_data;
unsigned bitfields[1];
};
ASSERT_SIZE(ConstraintSpace, SameSizeAsConstraintSpace);
} // namespace
const ConstraintSpace& ConstraintSpace::CloneForBlockInInlineIfNeeded(
std::optional<ConstraintSpace>& space) const {
if (ShouldTextBoxTrimNodeEnd()) {
// A block-in-inline always has following lines, though it could be empty.
// `ShouldTextBoxTrimEnd()` shouldn't trim the end if it's not the last
// inflow child. See `CreateConstraintSpaceForChild()`.
//
// If all following lines are empty, which in turn makes it the last
// *non-empty* inflow child, `RelayoutForTextBoxTrimEnd()` should run the
// layout again with `ShouldForceTextBoxTrimEnd()` set.
space = *this;
if (ShouldForceTextBoxTrimEnd()) {
space->SetShouldForceTextBoxTrimEnd(false);
} else {
space->EnsureRareData()->should_text_box_trim_node_end = false;
space->EnsureRareData()->should_text_box_trim_fragmentainer_end = false;
}
return *space;
} else {
DCHECK(!ShouldForceTextBoxTrimEnd());
}
return *this;
}
String ConstraintSpace::ToString() const {
return String::Format("Offset: %s,%s Size: %sx%s Clearance: %s",
BfcOffset().line_offset.ToString().Ascii().c_str(),
BfcOffset().block_offset.ToString().Ascii().c_str(),
AvailableSize().inline_size.ToString().Ascii().c_str(),
AvailableSize().block_size.ToString().Ascii().c_str(),
HasClearanceOffset()
? ClearanceOffset().ToString().Ascii().c_str()
: "none");
}
} // namespace blink
|