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

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

Issue 2176343006: [LayoutNG] Add NGConstraintSpace class definition (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/layout/ng/NGConstraintSpace.h
diff --git a/third_party/WebKit/Source/core/layout/ng/NGConstraintSpace.h b/third_party/WebKit/Source/core/layout/ng/NGConstraintSpace.h
new file mode 100644
index 0000000000000000000000000000000000000000..f9484e2528cf25169f3b863f4c64f322c1b01e97
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/NGConstraintSpace.h
@@ -0,0 +1,96 @@
+// 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 "platform/LayoutUnit.h"
+#include "platform/PlatformExport.h"
+
+namespace blink {
+
+class NGDerivedConstraintSpace;
+class NGExclusion;
+
+class PLATFORM_EXPORT NGConstraintSpace {
ikilpatrick 2016/07/27 21:14:12 CORE_EXPORT:)
ikilpatrick 2016/07/27 21:14:12 We'll also want to think about how this will work
eae 2016/07/27 21:24:16 I'd argue that we should have constraint spaces be
eae 2016/07/27 21:24:16 Done.
+public:
+ NGConstraintSpace();
+ ~NGConstraintSpace();
+
+ enum NGClearExclusion {
+ ClearNone = 0,
+ ClearFloatLeft = 1,
+ ClearFloatRight = 2,
+ ClearFragment = 4
+ };
+
+ enum NGFragmentationType {
+ FragmentNone,
+ FragmentPage,
+ FragmentColumn,
+ FragmentRegion
+ };
+
+ enum NGExclusionType {
+ ExcludeNone,
+ ExcludeInlineFlow,
+ ExcludeInlineStart,
+ ExcludeInlineEnd,
+ ExcludeInlineBoth
+ };
+
+ NGConstraintSpace();
+ ~NGConstraintSpace();
+
+ LayoutUnit inlineSize() const;
+ LayoutUnit blockSize() const;
+
+ // 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;
+ bool fixedBlockSize() const;
+
+ // The size threashold in the inline and block directions respesvitely that
ikilpatrick 2016/07/27 21:14:12 respectively
+ // triggers the presence of a scrollbar. If exceeded the current layout
+ // should be aborted and invoked again with a constraint space modified to
+ // reserve space for a scrollbar.
+ LayoutUnit inlineOverflowSize() const;
+ LayoutUnit blockOverflowSize() const;
ikilpatrick 2016/07/27 21:14:12 Same as below... any time when there would be diff
eae 2016/07/27 21:24:15 Yes. For a regular document the body would have an
+
+ // If specified a layout should produce a Fragment which fragments at the
+ // blockFragmentationSize if possible.
+ LayoutUnit blockFragmentationSize() const;
ikilpatrick 2016/07/27 21:14:11 So when working on the spec I couldn't think of a
eae 2016/07/27 21:24:16 None comes to mind. I'll remove it.
+ NGFragmentationType blockFragmentationType() const;
+
+ void addExclusion(NGExclusion, unsigned options = 0);
+ List<NGExclusion> exclusions(unsigned options = 0) const;
+
+ List<const DerivedNGConstraintSpace> layoutOpportunities(
ikilpatrick 2016/07/27 21:14:11 TODO(layout-dev): move to generator eventually?
+ unsigned clear = ClearNone,
+ NGClearExclusion = ExcludeNone) const;
ikilpatrick 2016/07/27 21:14:12 Is NGClearExclusion meant to be "avoid"?
ikilpatrick 2016/07/27 21:14:12 Do we have any place today where the "step"/"jump-
eae 2016/07/27 21:24:16 Not today. I intentionally skipped the step-size a
eae 2016/07/27 21:24:16 Yeah
+};
+
+class PLATFORM_EXPORT NGDerivedConstraintSpace : NGConstraintSpace {
+public:
+ ~NGDerivedConstraintSpace();
+ LayoutUnit inlineOffset() const;
+ LayoutUnit blockOffset() const;
+
+ // When creating a derived NGConstraintSpace for the next inline level
+ // layout opportunity, inlineSize and blockSize of the NGConstraintSpace
+ // may be different from its parent. These properties hold the inline and
+ // block size of the original NGConstraintSpaces, allowing percentage
+ // resolution to work correctly.
+ LayoutUnit inlineSizeForPercentageResolution() const;
+ LayoutUnit blockSizeForPercentageResolution() const;
+
+private:
+ NGDerivedConstraintSpace();
+};
+
+} // namespace blink
+
+#endif // NGConstraintSpace_h
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698