blob: 77344c1db5f1dd1165d73be752fddd065c9be476 [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 NGLayoutOpportunityIterator_h
#define NGLayoutOpportunityIterator_h
#include "core/CoreExport.h"
#include "core/layout/ng/ng_constraint_space.h"
#include "core/layout/ng/ng_layout_opportunity_tree_node.h"
#include "core/layout/ng/ng_units.h"
#include "platform/heap/Handle.h"
#include "wtf/Optional.h"
#include "wtf/Vector.h"
namespace blink {
typedef NGLogicalRect NGLayoutOpportunity;
typedef Vector<NGLayoutOpportunity> NGLayoutOpportunities;
class CORE_EXPORT NGLayoutOpportunityIterator final {
STACK_ALLOCATED();
public:
// Default constructor.
//
// @param space Constraint space with exclusions for which this iterator needs
// to generate layout opportunities.
// @param opt_origin_point Optional origin_point parameter that is used as a
// default start point for layout opportunities.
// @param opt_leader_point Optional 'leader' parameter that is used to specify
// the ending point of temporary excluded rectangle
// which starts from 'origin'. This rectangle may
// represent a text fragment for example.
NGLayoutOpportunityIterator(
NGConstraintSpace* space,
const WTF::Optional<NGLogicalOffset>& opt_origin_point = WTF::nullopt,
const WTF::Optional<NGLogicalOffset>& opt_leader_point = WTF::nullopt);
// Gets the next Layout Opportunity or nullptr if the search is exhausted.
// TODO(chrome-layout-team): Refactor with using C++ <iterator> library.
const NGLayoutOpportunity Next();
private:
// Mutable Getters.
NGLayoutOpportunityTreeNode* MutableOpportunityTreeRoot() {
return opportunity_tree_root_.get();
}
// Read-only Getters.
const NGLayoutOpportunityTreeNode* OpportunityTreeRoot() const {
return opportunity_tree_root_.get();
}
Persistent<NGConstraintSpace> constraint_space_;
NGLayoutOpportunities opportunities_;
NGLayoutOpportunities::const_iterator opportunity_iter_;
Persistent<NGLayoutOpportunityTreeNode> opportunity_tree_root_;
};
} // namespace blink
#endif // NGLayoutOpportunityIterator_h