1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_API_LINE_LAYOUT_BOX_H_ 6 #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_API_LINE_LAYOUT_BOX_H_ 7 8 #include "third_party/blink/renderer/core/layout/api/line_layout_box_model.h" 9 #include "third_party/blink/renderer/core/layout/layout_block_flow.h" 10 #include "third_party/blink/renderer/core/layout/layout_box.h" 11 #include "third_party/blink/renderer/platform/geometry/layout_unit.h" 12 13 namespace blink { 14 15 class LayoutBox; 16 17 class LineLayoutBox : public LineLayoutBoxModel { 18 public: LineLayoutBox(LayoutBox * layout_box)19 explicit LineLayoutBox(LayoutBox* layout_box) 20 : LineLayoutBoxModel(layout_box) {} 21 LineLayoutBox(const LineLayoutItem & item)22 explicit LineLayoutBox(const LineLayoutItem& item) 23 : LineLayoutBoxModel(item) { 24 SECURITY_DCHECK(!item || item.IsBox()); 25 } 26 LineLayoutBox(std::nullptr_t)27 explicit LineLayoutBox(std::nullptr_t) : LineLayoutBoxModel(nullptr) {} 28 29 LineLayoutBox() = default; 30 Location()31 LayoutPoint Location() const { return ToBox()->Location(); } PhysicalLocation()32 PhysicalOffset PhysicalLocation() const { 33 return ToBox()->PhysicalLocation(); 34 } 35 Size()36 LayoutSize Size() const { return ToBox()->Size(); } 37 SetLogicalHeight(LayoutUnit size)38 void SetLogicalHeight(LayoutUnit size) { ToBox()->SetLogicalHeight(size); } 39 LogicalHeight()40 LayoutUnit LogicalHeight() const { return ToBox()->LogicalHeight(); } 41 LogicalTop()42 LayoutUnit LogicalTop() const { return ToBox()->LogicalTop(); } 43 LogicalBottom()44 LayoutUnit LogicalBottom() const { return ToBox()->LogicalBottom(); } 45 FlipForWritingMode(LayoutUnit unit)46 LayoutUnit FlipForWritingMode(LayoutUnit unit) const { 47 return ToBox()->FlipForWritingMode(unit); 48 } 49 FlipForWritingMode(LayoutRect & rect)50 void FlipForWritingMode(LayoutRect& rect) const { 51 ToBox()->DeprecatedFlipForWritingMode(rect); 52 } 53 FlipForWritingMode(const LayoutPoint & point)54 LayoutPoint FlipForWritingMode(const LayoutPoint& point) const { 55 return ToBox()->DeprecatedFlipForWritingMode(point); 56 } 57 MoveWithEdgeOfInlineContainerIfNecessary(bool is_horizontal)58 void MoveWithEdgeOfInlineContainerIfNecessary(bool is_horizontal) { 59 ToBox()->MoveWithEdgeOfInlineContainerIfNecessary(is_horizontal); 60 } 61 Move(const LayoutUnit & width,const LayoutUnit & height)62 void Move(const LayoutUnit& width, const LayoutUnit& height) { 63 ToBox()->Move(width, height); 64 } 65 HasLayoutOverflow()66 bool HasLayoutOverflow() const { return ToBox()->HasLayoutOverflow(); } HasVisualOverflow()67 bool HasVisualOverflow() const { return ToBox()->HasVisualOverflow(); } LogicalVisualOverflowRectForPropagation()68 LayoutRect LogicalVisualOverflowRectForPropagation() const { 69 return ToBox()->LogicalVisualOverflowRectForPropagation(); 70 } LogicalLayoutOverflowRectForPropagation()71 LayoutRect LogicalLayoutOverflowRectForPropagation() const { 72 return ToBox()->LogicalLayoutOverflowRectForPropagation(nullptr); 73 } 74 SetLocation(const LayoutPoint & location)75 void SetLocation(const LayoutPoint& location) { 76 return ToBox()->SetLocation(location); 77 } 78 SetSize(const LayoutSize & size)79 void SetSize(const LayoutSize& size) { return ToBox()->SetSize(size); } 80 ScrolledContentOffset()81 LayoutSize ScrolledContentOffset() const { 82 return ToBox()->ScrolledContentOffset(); 83 } 84 CreateInlineBox()85 InlineBox* CreateInlineBox() { return ToBox()->CreateInlineBox(); } 86 InlineBoxWrapper()87 InlineBox* InlineBoxWrapper() const { return ToBox()->InlineBoxWrapper(); } 88 SetInlineBoxWrapper(InlineBox * box)89 void SetInlineBoxWrapper(InlineBox* box) { 90 return ToBox()->SetInlineBoxWrapper(box); 91 } 92 93 #if DCHECK_IS_ON() 94 ShowLineTreeAndMark(const InlineBox * marked_box1,const char * marked_label1)95 void ShowLineTreeAndMark(const InlineBox* marked_box1, 96 const char* marked_label1) const { 97 if (auto* layout_block_flow = DynamicTo<LayoutBlockFlow>(GetLayoutObject())) 98 layout_block_flow->ShowLineTreeAndMark(marked_box1, marked_label1); 99 } 100 101 #endif 102 103 private: ToBox()104 LayoutBox* ToBox() { return To<LayoutBox>(GetLayoutObject()); } 105 ToBox()106 const LayoutBox* ToBox() const { return To<LayoutBox>(GetLayoutObject()); } 107 }; 108 ContainingBlock()109inline LineLayoutBox LineLayoutItem::ContainingBlock() const { 110 return LineLayoutBox(GetLayoutObject()->ContainingBlock()); 111 } 112 113 } // namespace blink 114 115 #endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_API_LINE_LAYOUT_BOX_H_ 116