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

Side by Side Diff: third_party/WebKit/Source/core/layout/ng/ng_column_mapper.h

Issue 2714803002: [LayoutNG] Allow block-flow layout to be fragmented using new approach. (Closed)
Patch Set: rebase. Created 3 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef NGColumnMapper_h
6 #define NGColumnMapper_h
7
8 #include "core/CoreExport.h"
9 #include "core/layout/ng/ng_block_break_token.h"
10 #include "platform/heap/Handle.h"
11
12 namespace blink {
13
14 // Keeps track of the current column, and is used to map offsets from the
15 // coordinate established by the fragmented flow [1] to visual coordinates.
16 //
17 // [1] https://drafts.csswg.org/css-break/#fragmented-flow
18 //
19 // TODO(mstensho): Add a NGFragmentainerMapper super class. There are other
20 // fragmentation types than multicol (regions, pagination for printing).
21 class CORE_EXPORT NGColumnMapper
22 : public GarbageCollectedFinalized<NGColumnMapper> {
23 public:
24 NGColumnMapper(LayoutUnit inline_progression, LayoutUnit block_size)
25 : inline_progression_(inline_progression), block_size_(block_size) {}
26
27 // Column block length.
28 LayoutUnit BlockSize() const { return block_size_; }
29
30 // Offset for next break, in the fragmented flow coordinate space.
31 LayoutUnit NextBreakOffset() const {
32 return last_break_block_offset_ + block_size_;
33 }
34
35 // Convert an offset in the fragmented flow coordinate space to the visual
36 // coordinate space.
37 void ToVisualOffset(NGLogicalOffset& offset) {
38 offset.inline_offset += inline_offset_;
39 offset.block_offset -= last_break_block_offset_;
40 }
41
42 // Specify where in the content to start layout of the next column.
43 void SetBreakToken(NGBlockBreakToken* token) {
44 DCHECK(!break_token_);
45 break_token_ = token;
46 }
47 bool HasBreakToken() const { return break_token_; }
48
49 // Advance to the next column. Returns the break token to resume at. If
50 // nullptr is returned, there's no more content to process.
51 NGBlockBreakToken* Advance() {
52 NGBlockBreakToken* token = break_token_;
53 break_token_ = nullptr;
54 if (token) {
55 inline_offset_ += inline_progression_;
56 last_break_block_offset_ += block_size_;
57 }
58 return token;
59 }
60
61 DEFINE_INLINE_TRACE() { visitor->trace(break_token_); }
62
63 private:
64 // Where to resume in the next column.
65 Member<NGBlockBreakToken> break_token_;
66
67 // The sum of used column-width and column_gap.
68 LayoutUnit inline_progression_;
69
70 // Inline offset to the current column.
71 LayoutUnit inline_offset_;
72
73 // Block size of a column.
74 LayoutUnit block_size_;
75
76 // Amount of content held by previous columns.
77 LayoutUnit last_break_block_offset_;
78 };
79
80 } // namespace blink
81
82 #endif // NGColumnMapper_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698