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()109 inline 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