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

Side by Side Diff: Source/core/layout/line/InlineIterator.h

Issue 1162383003: C++11: Replace 0 with nullptr where applicable in layout code. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add one more file. Created 5 years, 6 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
« no previous file with comments | « Source/core/layout/line/InlineFlowBox.cpp ('k') | Source/core/layout/line/InlineTextBox.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All right r eserved. 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All right r eserved.
4 * Copyright (C) 2010 Google Inc. All rights reserved. 4 * Copyright (C) 2010 Google Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 25 matching lines...) Expand all
36 // text children. InlineIterator will use bidiNext to find the next LayoutText 36 // text children. InlineIterator will use bidiNext to find the next LayoutText
37 // optionally notifying a BidiResolver every time it steps into/out of a LayoutI nline. 37 // optionally notifying a BidiResolver every time it steps into/out of a LayoutI nline.
38 class InlineIterator { 38 class InlineIterator {
39 public: 39 public:
40 enum IncrementRule { 40 enum IncrementRule {
41 FastIncrementInIsolatedLayout, 41 FastIncrementInIsolatedLayout,
42 FastIncrementInTextNode 42 FastIncrementInTextNode
43 }; 43 };
44 44
45 InlineIterator() 45 InlineIterator()
46 : m_root(0) 46 : m_root(nullptr)
47 , m_obj(0) 47 , m_obj(nullptr)
48 , m_nextBreakablePosition(-1) 48 , m_nextBreakablePosition(-1)
49 , m_pos(0) 49 , m_pos(0)
50 { 50 {
51 } 51 }
52 52
53 InlineIterator(LayoutObject* root, LayoutObject* o, unsigned p) 53 InlineIterator(LayoutObject* root, LayoutObject* o, unsigned p)
54 : m_root(root) 54 : m_root(root)
55 , m_obj(o) 55 , m_obj(o)
56 , m_nextBreakablePosition(-1) 56 , m_nextBreakablePosition(-1)
57 , m_pos(p) 57 , m_pos(p)
(...skipping 18 matching lines...) Expand all
76 void setObject(LayoutObject* object) { m_obj = object; } 76 void setObject(LayoutObject* object) { m_obj = object; }
77 77
78 int nextBreakablePosition() const { return m_nextBreakablePosition; } 78 int nextBreakablePosition() const { return m_nextBreakablePosition; }
79 void setNextBreakablePosition(int position) { m_nextBreakablePosition = posi tion; } 79 void setNextBreakablePosition(int position) { m_nextBreakablePosition = posi tion; }
80 80
81 unsigned offset() const { return m_pos; } 81 unsigned offset() const { return m_pos; }
82 void setOffset(unsigned position) { m_pos = position; } 82 void setOffset(unsigned position) { m_pos = position; }
83 LayoutObject* root() const { return m_root; } 83 LayoutObject* root() const { return m_root; }
84 84
85 void fastIncrementInTextNode(); 85 void fastIncrementInTextNode();
86 void increment(InlineBidiResolver* = 0, IncrementRule = FastIncrementInTextN ode); 86 void increment(InlineBidiResolver* = nullptr, IncrementRule = FastIncrementI nTextNode);
87 bool atEnd() const; 87 bool atEnd() const;
88 88
89 inline bool atTextParagraphSeparator() const 89 inline bool atTextParagraphSeparator() const
90 { 90 {
91 return m_obj && m_obj->preservesNewline() && m_obj->isText() && toLayout Text(m_obj)->textLength() 91 return m_obj && m_obj->preservesNewline() && m_obj->isText() && toLayout Text(m_obj)->textLength()
92 && !toLayoutText(m_obj)->isWordBreak() && toLayoutText(m_obj)->chara cterAt(m_pos) == '\n'; 92 && !toLayoutText(m_obj)->isWordBreak() && toLayoutText(m_obj)->chara cterAt(m_pos) == '\n';
93 } 93 }
94 94
95 inline bool atParagraphSeparator() const 95 inline bool atParagraphSeparator() const
96 { 96 {
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 if (!isEmptyInline(curr)) 200 if (!isEmptyInline(curr))
201 return false; 201 return false;
202 } 202 }
203 return true; 203 return true;
204 } 204 }
205 205
206 // FIXME: This function is misleadingly named. It has little to do with bidi. 206 // FIXME: This function is misleadingly named. It has little to do with bidi.
207 // This function will iterate over inlines within a block, optionally notifying 207 // This function will iterate over inlines within a block, optionally notifying
208 // a bidi resolver as it enters/exits inlines (so it can push/pop embedding leve ls). 208 // a bidi resolver as it enters/exits inlines (so it can push/pop embedding leve ls).
209 template <class Observer> 209 template <class Observer>
210 static inline LayoutObject* bidiNextShared(LayoutObject* root, LayoutObject* cur rent, Observer* observer = 0, EmptyInlineBehavior emptyInlineBehavior = SkipEmpt yInlines, bool* endOfInlinePtr = 0) 210 static inline LayoutObject* bidiNextShared(LayoutObject* root, LayoutObject* cur rent, Observer* observer = 0, EmptyInlineBehavior emptyInlineBehavior = SkipEmpt yInlines, bool* endOfInlinePtr = nullptr)
211 { 211 {
212 LayoutObject* next = 0; 212 LayoutObject* next = nullptr;
213 // oldEndOfInline denotes if when we last stopped iterating if we were at th e end of an inline. 213 // oldEndOfInline denotes if when we last stopped iterating if we were at th e end of an inline.
214 bool oldEndOfInline = endOfInlinePtr ? *endOfInlinePtr : false; 214 bool oldEndOfInline = endOfInlinePtr ? *endOfInlinePtr : false;
215 bool endOfInline = false; 215 bool endOfInline = false;
216 216
217 while (current) { 217 while (current) {
218 next = 0; 218 next = 0;
219 if (!oldEndOfInline && !isIteratorTarget(current)) { 219 if (!oldEndOfInline && !isIteratorTarget(current)) {
220 next = current->slowFirstChild(); 220 next = current->slowFirstChild();
221 notifyObserverEnteredObject(observer, next); 221 notifyObserverEnteredObject(observer, next);
222 } 222 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 template <class Observer> 267 template <class Observer>
268 static inline LayoutObject* bidiNextSkippingEmptyInlines(LayoutObject* root, Lay outObject* current, Observer* observer) 268 static inline LayoutObject* bidiNextSkippingEmptyInlines(LayoutObject* root, Lay outObject* current, Observer* observer)
269 { 269 {
270 // The SkipEmptyInlines callers never care about endOfInlinePtr. 270 // The SkipEmptyInlines callers never care about endOfInlinePtr.
271 return bidiNextShared(root, current, observer, SkipEmptyInlines); 271 return bidiNextShared(root, current, observer, SkipEmptyInlines);
272 } 272 }
273 273
274 // This makes callers cleaner as they don't have to specify a type for the obser ver when not providing one. 274 // This makes callers cleaner as they don't have to specify a type for the obser ver when not providing one.
275 static inline LayoutObject* bidiNextSkippingEmptyInlines(LayoutObject* root, Lay outObject* current) 275 static inline LayoutObject* bidiNextSkippingEmptyInlines(LayoutObject* root, Lay outObject* current)
276 { 276 {
277 InlineBidiResolver* observer = 0; 277 InlineBidiResolver* observer = nullptr;
278 return bidiNextSkippingEmptyInlines(root, current, observer); 278 return bidiNextSkippingEmptyInlines(root, current, observer);
279 } 279 }
280 280
281 static inline LayoutObject* bidiNextIncludingEmptyInlines(LayoutObject* root, La youtObject* current, bool* endOfInlinePtr = 0) 281 static inline LayoutObject* bidiNextIncludingEmptyInlines(LayoutObject* root, La youtObject* current, bool* endOfInlinePtr = nullptr)
282 { 282 {
283 InlineBidiResolver* observer = 0; // Callers who include empty inlines, neve r use an observer. 283 InlineBidiResolver* observer = nullptr; // Callers who include empty inlines , never use an observer.
284 return bidiNextShared(root, current, observer, IncludeEmptyInlines, endOfInl inePtr); 284 return bidiNextShared(root, current, observer, IncludeEmptyInlines, endOfInl inePtr);
285 } 285 }
286 286
287 static inline LayoutObject* bidiFirstSkippingEmptyInlines(LayoutBlockFlow* root, BidiRunList<BidiRun>& runs, InlineBidiResolver* resolver = 0) 287 static inline LayoutObject* bidiFirstSkippingEmptyInlines(LayoutBlockFlow* root, BidiRunList<BidiRun>& runs, InlineBidiResolver* resolver = nullptr)
288 { 288 {
289 LayoutObject* o = root->firstChild(); 289 LayoutObject* o = root->firstChild();
290 if (!o) 290 if (!o)
291 return 0; 291 return nullptr;
292 292
293 if (o->isLayoutInline()) { 293 if (o->isLayoutInline()) {
294 notifyObserverEnteredObject(resolver, o); 294 notifyObserverEnteredObject(resolver, o);
295 if (!isEmptyInline(o)) { 295 if (!isEmptyInline(o)) {
296 o = bidiNextSkippingEmptyInlines(root, o, resolver); 296 o = bidiNextSkippingEmptyInlines(root, o, resolver);
297 } else { 297 } else {
298 // Never skip empty inlines. 298 // Never skip empty inlines.
299 if (resolver) 299 if (resolver)
300 resolver->commitExplicitEmbedding(runs); 300 resolver->commitExplicitEmbedding(runs);
301 return o; 301 return o;
(...skipping 29 matching lines...) Expand all
331 if (m_pos < INT_MAX) 331 if (m_pos < INT_MAX)
332 m_pos++; 332 m_pos++;
333 } 333 }
334 334
335 // FIXME: This is used by LayoutBlockFlow for simplified layout, and has nothing to do with bidi 335 // FIXME: This is used by LayoutBlockFlow for simplified layout, and has nothing to do with bidi
336 // it shouldn't use functions called bidiFirst and bidiNext. 336 // it shouldn't use functions called bidiFirst and bidiNext.
337 class InlineWalker { 337 class InlineWalker {
338 public: 338 public:
339 InlineWalker(LayoutBlock* root) 339 InlineWalker(LayoutBlock* root)
340 : m_root(root) 340 : m_root(root)
341 , m_current(0) 341 , m_current(nullptr)
342 , m_atEndOfInline(false) 342 , m_atEndOfInline(false)
343 { 343 {
344 // FIXME: This class should be taught how to do the SkipEmptyInlines cod epath as well. 344 // FIXME: This class should be taught how to do the SkipEmptyInlines cod epath as well.
345 m_current = bidiFirstIncludingEmptyInlines(m_root); 345 m_current = bidiFirstIncludingEmptyInlines(m_root);
346 } 346 }
347 347
348 LayoutBlock* root() { return m_root; } 348 LayoutBlock* root() { return m_root; }
349 LayoutObject* current() { return m_current; } 349 LayoutObject* current() { return m_current; }
350 350
351 bool atEndOfInline() { return m_atEndOfInline; } 351 bool atEndOfInline() { return m_atEndOfInline; }
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 m_sor = m_eor; 737 m_sor = m_eor;
738 } 738 }
739 739
740 m_direction = WTF::Unicode::OtherNeutral; 740 m_direction = WTF::Unicode::OtherNeutral;
741 m_status.eor = WTF::Unicode::OtherNeutral; 741 m_status.eor = WTF::Unicode::OtherNeutral;
742 } 742 }
743 743
744 } 744 }
745 745
746 #endif // InlineIterator_h 746 #endif // InlineIterator_h
OLDNEW
« no previous file with comments | « Source/core/layout/line/InlineFlowBox.cpp ('k') | Source/core/layout/line/InlineTextBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698