#include "third_party/blink/renderer/core/layout/physical_box_fragment.h"
#include "build/chromeos_buildflags.h"
#include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
#include "third_party/blink/renderer/core/editing/editing_utilities.h"
#include "third_party/blink/renderer/core/editing/position_with_affinity.h"
#include "third_party/blink/renderer/core/editing/text_affinity.h"
#include "third_party/blink/renderer/core/html/html_anchor_element.h"
#include "third_party/blink/renderer/core/layout/block_break_token.h"
#include "third_party/blink/renderer/core/layout/box_fragment_builder.h"
#include "third_party/blink/renderer/core/layout/disable_layout_side_effects_scope.h"
#include "third_party/blink/renderer/core/layout/geometry/box_strut.h"
#include "third_party/blink/renderer/core/layout/geometry/physical_rect.h"
#include "third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h"
#include "third_party/blink/renderer/core/layout/inline/fragment_item.h"
#include "third_party/blink/renderer/core/layout/inline/inline_cursor.h"
#include "third_party/blink/renderer/core/layout/inline/inline_item.h"
#include "third_party/blink/renderer/core/layout/inline/physical_line_box_fragment.h"
#include "third_party/blink/renderer/core/layout/layout_block_flow.h"
#include "third_party/blink/renderer/core/layout/layout_inline.h"
#include "third_party/blink/renderer/core/layout/layout_object.h"
#include "third_party/blink/renderer/core/layout/layout_object_inlines.h"
#include "third_party/blink/renderer/core/layout/layout_text_combine.h"
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/layout/outline_utils.h"
#include "third_party/blink/renderer/core/layout/relative_utils.h"
#include "third_party/blink/renderer/core/layout/table/layout_table_cell.h"
#include "third_party/blink/renderer/core/paint/inline_paint_context.h"
#include "third_party/blink/renderer/core/paint/outline_painter.h"
#include "third_party/blink/renderer/platform/wtf/size_assertions.h"
namespace blink {
#if DCHECK_IS_ON()
unsigned PhysicalBoxFragment::AllowPostLayoutScope::allow_count_ = …;
#endif
namespace …
const PhysicalBoxFragment* PhysicalBoxFragment::Create(
BoxFragmentBuilder* builder,
WritingMode block_or_line_writing_mode) { … }
const PhysicalBoxFragment* PhysicalBoxFragment::Clone(
const PhysicalBoxFragment& other) { … }
const PhysicalBoxFragment* PhysicalBoxFragment::CloneWithPostLayoutFragments(
const PhysicalBoxFragment& other) { … }
namespace {
template <typename T>
constexpr void AccountSizeAndPadding(size_t& current_size) { … }
}
size_t PhysicalBoxFragment::AdditionalByteSize(bool has_fragment_items) { … }
PhysicalBoxFragment::PhysicalBoxFragment(
PassKey key,
BoxFragmentBuilder* builder,
bool has_scrollable_overflow,
const PhysicalRect& scrollable_overflow,
const PhysicalBoxStrut* borders,
const PhysicalBoxStrut* scrollbar,
const PhysicalBoxStrut* padding,
const std::optional<PhysicalRect>& inflow_bounds,
bool has_fragment_items,
WritingMode block_or_line_writing_mode)
: … { … }
PhysicalBoxFragment::PhysicalBoxFragment(
PassKey key,
const PhysicalBoxFragment& other,
bool has_scrollable_overflow,
const PhysicalRect& scrollable_overflow)
: … { … }
PhysicalBoxFragment::~PhysicalBoxFragment() { … }
PhysicalRect PhysicalBoxFragment::ContentRect() const { … }
const LayoutBox* PhysicalBoxFragment::OwnerLayoutBox() const { … }
LayoutBox* PhysicalBoxFragment::MutableOwnerLayoutBox() const { … }
PhysicalOffset PhysicalBoxFragment::OffsetFromOwnerLayoutBox() const { … }
const PhysicalBoxFragment* PhysicalBoxFragment::PostLayout() const { … }
PhysicalRect PhysicalBoxFragment::SelfInkOverflowRect() const { … }
PhysicalRect PhysicalBoxFragment::ContentsInkOverflowRect() const { … }
PhysicalRect PhysicalBoxFragment::InkOverflowRect() const { … }
PhysicalRect PhysicalBoxFragment::OverflowClipRect(
const PhysicalOffset& location,
OverlayScrollbarClipBehavior overlay_scrollbar_clip_behavior) const { … }
PhysicalRect PhysicalBoxFragment::OverflowClipRect(
const PhysicalOffset& location,
const BlockBreakToken* incoming_break_token,
OverlayScrollbarClipBehavior overlay_scrollbar_clip_behavior) const { … }
bool PhysicalBoxFragment::MayIntersect(
const HitTestResult& result,
const HitTestLocation& hit_test_location,
const PhysicalOffset& accumulated_offset) const { … }
gfx::Vector2d PhysicalBoxFragment::PixelSnappedScrolledContentOffset() const { … }
PhysicalSize PhysicalBoxFragment::ScrollSize() const { … }
const PhysicalBoxFragment*
PhysicalBoxFragment::InlineContainerFragmentIfOutlineOwner() const { … }
PhysicalFragmentRareData::RareField& PhysicalBoxFragment::EnsureRareField(
FieldId id) { … }
PhysicalBoxFragment::MutableForStyleRecalc::MutableForStyleRecalc(
base::PassKey<PhysicalBoxFragment>,
PhysicalBoxFragment& fragment)
: … { … }
void PhysicalBoxFragment::MutableForStyleRecalc::SetScrollableOverflow(
const PhysicalRect& scrollable_overflow) { … }
PhysicalBoxFragment::MutableForStyleRecalc
PhysicalBoxFragment::GetMutableForStyleRecalc() const { … }
PhysicalBoxFragment::MutableForContainerLayout::MutableForContainerLayout(
base::PassKey<PhysicalBoxFragment>,
PhysicalBoxFragment& fragment)
: … { … }
void PhysicalBoxFragment::MutableForContainerLayout::SetMargins(
const PhysicalBoxStrut& margins) { … }
PhysicalBoxFragment::MutableForContainerLayout
PhysicalBoxFragment::GetMutableForContainerLayout() const { … }
void PhysicalBoxFragment::MutableForOofFragmentation::AddChildFragmentainer(
const PhysicalBoxFragment& child_fragment,
LogicalOffset child_offset) { … }
void PhysicalBoxFragment::MutableForOofFragmentation::Merge(
const PhysicalBoxFragment& placeholder_fragmentainer) { … }
void PhysicalBoxFragment::MutableForOofFragmentation::UpdateOverflow() { … }
void PhysicalBoxFragment::SetInkOverflow(const PhysicalRect& self,
const PhysicalRect& contents) { … }
void PhysicalBoxFragment::RecalcInkOverflow(const PhysicalRect& contents) { … }
void PhysicalBoxFragment::RecalcInkOverflow() { … }
PhysicalRect PhysicalBoxFragment::RecalcContentsInkOverflow() { … }
PhysicalRect PhysicalBoxFragment::ComputeSelfInkOverflow() const { … }
#if DCHECK_IS_ON()
void PhysicalBoxFragment::InvalidateInkOverflow() { … }
#endif
void PhysicalBoxFragment::AddSelfOutlineRects(
const PhysicalOffset& additional_offset,
OutlineType outline_type,
OutlineRectCollector& collector,
LayoutObject::OutlineInfo* info) const { … }
void PhysicalBoxFragment::AddOutlineRects(
const PhysicalOffset& additional_offset,
OutlineType outline_type,
OutlineRectCollector& collector) const { … }
void PhysicalBoxFragment::AddOutlineRects(
const PhysicalOffset& additional_offset,
OutlineType outline_type,
bool inline_container_relative,
OutlineRectCollector& collector) const { … }
void PhysicalBoxFragment::AddOutlineRectsForInlineBox(
PhysicalOffset additional_offset,
OutlineType outline_type,
bool container_relative,
OutlineRectCollector& collector) const { … }
PositionWithAffinity PhysicalBoxFragment::PositionForPoint(
PhysicalOffset point) const { … }
PositionWithAffinity PhysicalBoxFragment::PositionForPointByClosestChild(
PhysicalOffset point_in_contents) const { … }
PositionWithAffinity PhysicalBoxFragment::PositionForPointInBlockFlowDirection(
PhysicalOffset point_in_contents) const { … }
PositionWithAffinity PhysicalBoxFragment::PositionForPointInTable(
PhysicalOffset point_in_contents) const { … }
PositionWithAffinity
PhysicalBoxFragment::PositionForPointRespectingEditingBoundaries(
const PhysicalBoxFragment& child,
PhysicalOffset point_in_child) const { … }
PhysicalBoxStrut PhysicalBoxFragment::OverflowClipMarginOutsets() const { … }
#if DCHECK_IS_ON()
PhysicalBoxFragment::AllowPostLayoutScope::AllowPostLayoutScope() { … }
PhysicalBoxFragment::AllowPostLayoutScope::~AllowPostLayoutScope() { … }
void PhysicalBoxFragment::CheckSameForSimplifiedLayout(
const PhysicalBoxFragment& other,
bool check_same_block_size,
bool check_no_fragmentation) const { … }
void PhysicalBoxFragment::CheckIntegrity() const { … }
void PhysicalBoxFragment::AssertFragmentTreeSelf() const { … }
void PhysicalBoxFragment::AssertFragmentTreeChildren(
bool allow_destroyed_or_moved) const { … }
#endif
void PhysicalBoxFragment::TraceAfterDispatch(Visitor* visitor) const { … }
}