blob: b3d8aa9a7f50edd425ce5f8f433673fcfeb68ca1 [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 NGUnpositionedFloat_h
#define NGUnpositionedFloat_h
#include "base/memory/scoped_refptr.h"
#include "third_party/blink/renderer/core/layout/ng/geometry/ng_box_strut.h"
#include "third_party/blink/renderer/core/layout/ng/geometry/ng_logical_size.h"
#include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h"
#include "third_party/blink/renderer/core/layout/ng/ng_block_node.h"
#include "third_party/blink/renderer/core/layout/ng/ng_layout_result.h"
#include "third_party/blink/renderer/core/style/computed_style_constants.h"
namespace blink {
// Struct that keeps all information needed to position floats in LayoutNG.
struct CORE_EXPORT NGUnpositionedFloat final {
DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
public:
NGUnpositionedFloat(const NGLogicalSize& available_size,
const NGLogicalSize& percentage_size,
LayoutUnit origin_bfc_line_offset,
LayoutUnit bfc_line_offset,
NGBlockNode node,
NGBlockBreakToken* token);
~NGUnpositionedFloat();
NGBlockNode node;
scoped_refptr<NGBlockBreakToken> token;
// Available size of the constraint space that will be used by
// NGLayoutOpportunityIterator to position this floating object.
NGLogicalSize available_size;
NGLogicalSize percentage_size;
// This is the BFC inline-offset for where we begin searching for layout
// opportunities for this float.
LayoutUnit origin_bfc_line_offset;
// This is the BFC inline-offset for the float's parent. This is used for
// calculating the offset between the float and its parent.
LayoutUnit bfc_line_offset;
// The margins are relative to the writing mode of the block formatting
// context. They are stored for convinence and could be recomputed with other
// data on this object.
NGBoxStrut margins;
// The layout result for this unpositioned float. This is only present if
// it's in a different writing mode than the BFC.
scoped_refptr<NGLayoutResult> layout_result;
bool IsLeft() const;
bool IsRight() const;
EClear ClearType() const;
};
} // namespace blink
#endif // NGUnpositionedFloat_h