Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h

Issue 2228843003: [LayoutNG] Change core/layout/ng to Chromium style and rename files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
new file mode 100644
index 0000000000000000000000000000000000000000..e4ee8b10f3913507521537fbd0dcd8870f8f8604
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
@@ -0,0 +1,154 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NGConstraintSpace_h
+#define NGConstraintSpace_h
+
+#include "core/CoreExport.h"
+#include "platform/LayoutUnit.h"
+#include "wtf/DoublyLinkedList.h"
+
+namespace blink {
+
+class NGConstraintSpace;
+class NGDerivedConstraintSpace;
+class NGExclusion;
+class NGFragment;
+class NGLayoutOpportunityIterator;
+class LayoutBox;
+
+enum NGExclusionType {
+ NGClearNone = 0,
+ NGClearFloatLeft = 1,
+ NGClearFloatRight = 2,
+ NGClearFragment = 4
+};
+
+enum NGFragmentationType {
+ FragmentNone,
+ FragmentPage,
+ FragmentColumn,
+ FragmentRegion
+};
+
+enum NGExclusionFlowType {
+ ExcludeNone,
+ ExcludeInlineFlow,
+ ExcludeInlineStart,
+ ExcludeInlineEnd,
+ ExcludeInlineBoth
+};
+
+class NGExclusion {
+ public:
+ NGExclusion();
+ ~NGExclusion() {}
+};
+
+class CORE_EXPORT NGConstraintSpace {
+ public:
+ NGConstraintSpace(LayoutUnit inlineContainerSize,
+ LayoutUnit blockContainerSize);
+ ~NGConstraintSpace() {}
+
+ // Constructs Layout NG constraint space from legacy layout object.
+ static NGConstraintSpace fromLayoutObject(const LayoutBox&);
+
+ void addExclusion(const NGExclusion, unsigned options = 0);
+ void setOverflowTriggersScrollbar(bool inlineTriggers, bool blockTriggers);
+ void setFixedSize(bool inlineFixed, bool blockFixed);
+ void setFragmentationType(NGFragmentationType);
+
+ // Size of the container in each direction. Used for the following
+ // three cases:
+ // 1) Percentage resolution.
+ // 2) Resolving absolute positions of children.
+ // 3) Defining the threashold that triggers the presence of a scrollbar. Only
+ // applies if the corresponding scrollbarTrigger flag has been set for the
+ // direction.
+ LayoutUnit inlineContainerSize() const { return m_inlineContainerSize; }
+ LayoutUnit blockContainerSize() const { return m_blockContainerSize; }
+
+ // Whether exceeding the containerSize triggers the presence of a scrollbar
+ // for the indicated direction.
+ // If exceeded the current layout should be aborted and invoked again with a
+ // constraint space modified to reserve space for a scrollbar.
+ bool inlineTriggersScrollbar() const { return m_inlineTriggersScrollbar; }
+ bool blockTriggersScrollbar() const { return m_blockTriggersScrollbar; }
+
+ // Some layout modes “stretch” their children to a fixed size (e.g. flex,
+ // grid). These flags represented whether a layout needs to produce a
+ // fragment that satisfies a fixed constraint in the inline and block
+ // direction respectively.
+ bool fixedInlineSize() const { return m_fixedInlineSize; }
+ bool fixedBlockSize() const { return m_fixedBlockSize; }
+
+ // If specified a layout should produce a Fragment which fragments at the
+ // blockSize if possible.
+ NGFragmentationType blockFragmentationType() const {
+ return static_cast<NGFragmentationType>(m_blockFragmentationType);
+ }
+
+ DoublyLinkedList<const NGExclusion> exclusions(unsigned options = 0) const;
+
+ NGLayoutOpportunityIterator layoutOpportunities(
+ unsigned clear = NGClearNone,
+ NGExclusionFlowType avoid = ExcludeNone) const;
+
+ // Modifies constraint space to account for a placed fragment. Depending on
+ // the shape of the fragment this will either modify the inline or block
+ // size, or add an exclusion.
+ void subtract(const NGFragment);
+
+ private:
+ LayoutUnit m_inlineContainerSize;
+ LayoutUnit m_blockContainerSize;
+
+ unsigned m_fixedInlineSize : 1;
+ unsigned m_fixedBlockSize : 1;
+ unsigned m_inlineTriggersScrollbar : 1;
+ unsigned m_blockTriggersScrollbar : 1;
+ unsigned m_blockFragmentationType : 2;
+
+ DoublyLinkedList<const NGExclusion> m_exclusions;
+};
+
+class CORE_EXPORT NGLayoutOpportunityIterator final {
+ public:
+ NGLayoutOpportunityIterator(const NGConstraintSpace* space,
+ unsigned clear,
+ NGExclusionFlowType avoid)
+ : m_constraintSpace(space), m_clear(clear), m_avoid(avoid) {}
+ ~NGLayoutOpportunityIterator() {}
+
+ const NGDerivedConstraintSpace* next();
+
+ private:
+ const NGConstraintSpace* m_constraintSpace;
+ unsigned m_clear;
+ NGExclusionFlowType m_avoid;
+};
+
+class CORE_EXPORT NGDerivedConstraintSpace final : NGConstraintSpace {
+ public:
+ ~NGDerivedConstraintSpace();
+
+ LayoutUnit inlineOffset() const;
+ LayoutUnit blockOffset() const;
+ LayoutUnit inlineSize() const;
+ LayoutUnit blockSize() const;
+
+ private:
+ NGDerivedConstraintSpace();
+
+ LayoutUnit m_inlineOffset;
+ LayoutUnit m_blockOffset;
+ LayoutUnit m_inlineSize;
+ LayoutUnit m_blockSize;
+ NGConstraintSpace* m_original;
+};
+
+} // namespace blink
+
+#endif // NGConstraintSpace_h

Powered by Google App Engine
This is Rietveld 408576698