Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 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 NGConstraintSpace_h | |
| 6 #define NGConstraintSpace_h | |
| 7 | |
| 8 #include "core/CoreExport.h" | |
| 9 #include "platform/LayoutUnit.h" | |
| 10 #include "wtf/DoublyLinkedList.h" | |
| 11 | |
| 12 namespace blink { | |
| 13 | |
| 14 class NGDerivedConstraintSpace; | |
| 15 class NGExclusion; | |
| 16 class NGFragment; | |
| 17 class NGLayoutOpportunityIterator; | |
| 18 | |
| 19 enum NGClearExclusion { | |
|
ikilpatrick
2016/07/29 17:18:44
probably NGExclusionTag or NGExclusionType better?
eae
2016/07/29 17:41:02
Good idea. NGExclusionType it is.
| |
| 20 ClearNone = 0, | |
| 21 ClearFloatLeft = 1, | |
| 22 ClearFloatRight = 2, | |
| 23 ClearFragment = 4 | |
| 24 }; | |
| 25 | |
| 26 enum NGFragmentationType { | |
| 27 FragmentNone, | |
| 28 FragmentPage, | |
| 29 FragmentColumn, | |
| 30 FragmentRegion | |
| 31 }; | |
| 32 | |
| 33 enum NGExclusionType { | |
|
ikilpatrick
2016/07/29 17:18:44
NGExclusionExcludeType? or... NGExclusionFlowType?
eae
2016/07/29 17:41:02
Done.
| |
| 34 ExcludeNone, | |
| 35 ExcludeInlineFlow, | |
| 36 ExcludeInlineStart, | |
| 37 ExcludeInlineEnd, | |
| 38 ExcludeInlineBoth | |
| 39 }; | |
| 40 | |
| 41 class NGExclusion { | |
| 42 public: | |
| 43 NGExclusion(); | |
| 44 ~NGExclusion() { } | |
| 45 }; | |
| 46 | |
| 47 class CORE_EXPORT NGConstraintSpace { | |
| 48 public: | |
| 49 NGConstraintSpace(LayoutUnit inlineSize, LayoutUnit blockSize); | |
| 50 ~NGConstraintSpace() { } | |
| 51 | |
| 52 void addExclusion(const NGExclusion, unsigned options = 0); | |
| 53 void setOverflowSize(LayoutUnit inlineSize, LayoutUnit blockSize); | |
| 54 void setFixedSize(bool inlineFixed, bool blockFixed); | |
| 55 void setFragmentationType(NGFragmentationType blockFragmentationType); | |
| 56 | |
| 57 // Available space in each direction, -1 indicates infinite space. | |
| 58 LayoutUnit inlineSize() const { return m_inlineSize; } | |
| 59 LayoutUnit blockSize() const { return m_blockSize; } | |
| 60 | |
| 61 // The size threashold in the inline and block directions respectively that | |
| 62 // triggers the presence of a scrollbar. If exceeded the current layout | |
| 63 // should be aborted and invoked again with a constraint space modified to | |
| 64 // reserve space for a scrollbar. -1 indicates no limit. | |
| 65 LayoutUnit inlineOverflowSize() const { return m_inlineOverflowSize; } | |
| 66 LayoutUnit blockOverflowSize() const { return m_blockOverflowSize; } | |
| 67 | |
| 68 // Some layout modes “stretch” their children to a fixed size (e.g. flex, | |
| 69 // grid). These flags represented whether a layout needs to produce a | |
| 70 // fragment that satisfies a fixed constraint in the inline and block | |
| 71 // direction respectively. | |
| 72 bool fixedInlineSize() const { return m_fixedInlineSize; } | |
| 73 bool fixedBlockSize() const { return m_fixedBlockSize; } | |
| 74 | |
| 75 // If specified a layout should produce a Fragment which fragments at the | |
| 76 // blockSize if possible. | |
| 77 NGFragmentationType blockFragmentationType() const | |
| 78 { | |
| 79 return static_cast<NGFragmentationType>(m_blockFragmentationType); | |
| 80 } | |
| 81 | |
| 82 DoublyLinkedList<const NGExclusion> exclusions(unsigned options = 0) const; | |
| 83 | |
| 84 NGLayoutOpportunityIterator layoutOpportunities( | |
| 85 unsigned clear = ClearNone, | |
| 86 NGExclusionType avoid = ExcludeNone) const; | |
| 87 | |
| 88 // Modifies constraint space to account for a placed fragment. Depending on | |
| 89 // the shape of the fragment this will either modify the inline or block | |
| 90 // size, or add an exclusion. | |
| 91 void subtract(const NGFragment); | |
| 92 | |
| 93 private: | |
| 94 LayoutUnit m_inlineSize; | |
| 95 LayoutUnit m_blockSize; | |
| 96 LayoutUnit m_inlineOverflowSize; | |
| 97 LayoutUnit m_blockOverflowSize; | |
|
ikilpatrick
2016/07/29 17:18:44
I'm pretty sure we only need:
m_{block,inline}Size
eae
2016/07/29 17:41:02
OK, will land as is but let's discuss this next we
| |
| 98 | |
| 99 unsigned m_fixedInlineSize : 1; | |
| 100 unsigned m_fixedBlockSize : 1; | |
| 101 unsigned m_blockFragmentationType : 2; | |
| 102 | |
| 103 DoublyLinkedList<const NGExclusion> m_exclusions; | |
| 104 }; | |
| 105 | |
| 106 | |
| 107 class CORE_EXPORT NGLayoutOpportunityIterator final { | |
| 108 public: | |
| 109 NGLayoutOpportunityIterator(const NGConstraintSpace* space, | |
| 110 unsigned clear, NGExclusionType avoid) | |
| 111 : m_constraintSpace(space) | |
| 112 , m_clear(clear) | |
| 113 , m_avoid(avoid) { } | |
| 114 ~NGLayoutOpportunityIterator() { } | |
| 115 | |
| 116 const NGDerivedConstraintSpace* next(); | |
| 117 | |
| 118 private: | |
| 119 const NGConstraintSpace* m_constraintSpace; | |
| 120 unsigned m_clear; | |
| 121 NGExclusionType m_avoid; | |
| 122 }; | |
| 123 | |
| 124 | |
| 125 class CORE_EXPORT NGDerivedConstraintSpace final : NGConstraintSpace { | |
| 126 public: | |
| 127 ~NGDerivedConstraintSpace(); | |
| 128 | |
| 129 LayoutUnit inlineOffset() const; | |
| 130 LayoutUnit blockOffset() const; | |
| 131 | |
| 132 // When creating a derived NGConstraintSpace for the next inline level | |
| 133 // layout opportunity, inlineSize and blockSize of the NGConstraintSpace | |
| 134 // may be different from its parent. These properties hold the inline and | |
| 135 // block size of the original NGConstraintSpaces, allowing percentage | |
| 136 // resolution to work correctly. | |
|
ikilpatrick
2016/07/29 17:18:44
I think we'll need this on the actual NGConstraint
eae
2016/07/29 17:41:02
For NGConstraintSpace wouldn't inlineSizeForPercen
ikilpatrick
2016/07/29 19:15:00
We'll need this for percentage height resolution i
| |
| 137 LayoutUnit inlineSizeForPercentageResolution() const; | |
| 138 LayoutUnit blockSizeForPercentageResolution() const; | |
| 139 | |
| 140 private: | |
| 141 NGDerivedConstraintSpace(); | |
| 142 | |
| 143 LayoutUnit m_inlineOffset; | |
| 144 LayoutUnit m_blockOffset; | |
| 145 NGConstraintSpace* m_original; | |
| 146 }; | |
| 147 | |
| 148 } // namespace blink | |
| 149 | |
| 150 #endif // NGConstraintSpace_h | |
| OLD | NEW |