blob: 00d5b68c80c45428ff508c9cf480c8781b7ada8d [file] [log] [blame]
// 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 NGPhysicalConstraintSpace_h
#define NGPhysicalConstraintSpace_h
#include "core/CoreExport.h"
#include "core/layout/ng/ng_units.h"
#include "platform/heap/Handle.h"
#include "wtf/DoublyLinkedList.h"
namespace blink {
enum NGExclusionType {
NGClearNone = 0,
NGClearFloatLeft = 1,
NGClearFloatRight = 2,
NGClearFragment = 4
};
enum NGFragmentationType {
FragmentNone,
FragmentPage,
FragmentColumn,
FragmentRegion
};
class NGExclusion {
public:
NGExclusion();
~NGExclusion() {}
};
// The NGPhysicalConstraintSpace contains the underlying data for the
// NGConstraintSpace. It is not meant to be used directly as all members are in
// the physical coordinate space. Instead NGConstraintSpace should be used.
class CORE_EXPORT NGPhysicalConstraintSpace final
: public GarbageCollected<NGPhysicalConstraintSpace> {
public:
NGPhysicalConstraintSpace();
NGPhysicalConstraintSpace(NGPhysicalSize);
NGPhysicalConstraintSpace(const NGPhysicalConstraintSpace&);
NGPhysicalSize ContainerSize() const { return container_size_; }
void AddExclusion(const NGExclusion, unsigned options = 0);
const DoublyLinkedList<const NGExclusion>* Exclusions(
unsigned options = 0) const;
DEFINE_INLINE_TRACE() {}
private:
friend class NGConstraintSpace;
NGPhysicalSize container_size_;
unsigned fixed_width_ : 1;
unsigned fixed_height_ : 1;
unsigned width_direction_triggers_scrollbar_ : 1;
unsigned height_direction_triggers_scrollbar_ : 1;
unsigned width_direction_fragmentation_type_ : 2;
unsigned height_direction_fragmentation_type_ : 2;
DoublyLinkedList<const NGExclusion> exclusions_;
};
} // namespace blink
#endif // NGPhysicalConstraintSpace_h