OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 m_hasAnnotationsAfter(false), | 58 m_hasAnnotationsAfter(false), |
59 m_lineBreakBidiStatusEor(WTF::Unicode::LeftToRight), | 59 m_lineBreakBidiStatusEor(WTF::Unicode::LeftToRight), |
60 m_lineBreakBidiStatusLastStrong(WTF::Unicode::LeftToRight), | 60 m_lineBreakBidiStatusLastStrong(WTF::Unicode::LeftToRight), |
61 m_lineBreakBidiStatusLast(WTF::Unicode::LeftToRight), | 61 m_lineBreakBidiStatusLast(WTF::Unicode::LeftToRight), |
62 m_isFirstAfterPageBreak(false) | 62 m_isFirstAfterPageBreak(false) |
63 #if ENABLE(ASSERT) | 63 #if ENABLE(ASSERT) |
64 , | 64 , |
65 m_hasBadChildList(false) | 65 m_hasBadChildList(false) |
66 #endif | 66 #endif |
67 { | 67 { |
68 // Internet Explorer and Firefox always create a marker for list items, even
when the list-style-type is none. We do not make a marker | 68 // Internet Explorer and Firefox always create a marker for list items, even |
69 // in the list-style-type: none case, since it is wasteful to do so. Howeve
r, in order to match other browsers we have to pretend like | 69 // when the list-style-type is none. We do not make a marker in the |
70 // an invisible marker exists. The side effect of having an invisible marke
r is that the quirks mode behavior of shrinking lines with no | 70 // list-style-type: none case, since it is wasteful to do so. |
71 // text children must not apply. This change also means that gaps will exis
t between image bullet list items. Even when the list bullet | 71 // However, in order to match other browsers we have to pretend like an |
72 // is an image, the line is still considered to be immune from the quirk. | 72 // invisible marker exists. The side effect of having an invisible marker |
| 73 // is that the quirks mode behavior of shrinking lines with no text children |
| 74 // must not apply. This change also means that gaps will exist between image |
| 75 // bullet list items. Even when the list bullet is an image, the line is |
| 76 // still considered to be immune from the quirk. |
73 m_hasTextChildren = lineLayoutItem.style()->display() == EDisplay::ListItem; | 77 m_hasTextChildren = lineLayoutItem.style()->display() == EDisplay::ListItem; |
74 m_hasTextDescendants = m_hasTextChildren; | 78 m_hasTextDescendants = m_hasTextChildren; |
75 } | 79 } |
76 | 80 |
77 #if ENABLE(ASSERT) | 81 #if ENABLE(ASSERT) |
78 ~InlineFlowBox() override; | 82 ~InlineFlowBox() override; |
79 #endif | 83 #endif |
80 | 84 |
81 #ifndef NDEBUG | 85 #ifndef NDEBUG |
82 void showLineTreeAndMark(const InlineBox* = nullptr, | 86 void showLineTreeAndMark(const InlineBox* = nullptr, |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 LayoutUnit& truncatedWidth, | 277 LayoutUnit& truncatedWidth, |
274 bool&) override; | 278 bool&) override; |
275 | 279 |
276 bool hasTextChildren() const { return m_hasTextChildren; } | 280 bool hasTextChildren() const { return m_hasTextChildren; } |
277 bool hasTextDescendants() const { return m_hasTextDescendants; } | 281 bool hasTextDescendants() const { return m_hasTextDescendants; } |
278 void setHasTextDescendants() { m_hasTextDescendants = true; } | 282 void setHasTextDescendants() { m_hasTextDescendants = true; } |
279 | 283 |
280 void checkConsistency() const; | 284 void checkConsistency() const; |
281 void setHasBadChildList(); | 285 void setHasBadChildList(); |
282 | 286 |
283 // Line visual and layout overflow are in the coordinate space of the block.
This means that | 287 // Line visual and layout overflow are in the coordinate space of the block. |
284 // they aren't purely physical directions. For horizontal-tb and vertical-lr t
hey will match | 288 // This means that they aren't purely physical directions. For horizontal-tb |
285 // physical directions, but for vertical-rl, the left/right respectively are f
lipped when | 289 // and vertical-lr they will match physical directions, but for vertical-rl, |
286 // compared to their physical counterparts. For example minX is on the left i
n vertical-lr, but | 290 // the left/right respectively are flipped when compared to their physical |
287 // it is on the right in vertical-rl. | 291 // counterparts. For example minX is on the left in vertical-lr, but it is on |
| 292 // the right in vertical-rl. |
288 LayoutRect layoutOverflowRect(LayoutUnit lineTop, | 293 LayoutRect layoutOverflowRect(LayoutUnit lineTop, |
289 LayoutUnit lineBottom) const { | 294 LayoutUnit lineBottom) const { |
290 return m_overflow ? m_overflow->layoutOverflowRect() | 295 return m_overflow ? m_overflow->layoutOverflowRect() |
291 : frameRectIncludingLineHeight(lineTop, lineBottom); | 296 : frameRectIncludingLineHeight(lineTop, lineBottom); |
292 } | 297 } |
293 LayoutUnit logicalTopLayoutOverflow(LayoutUnit lineTop) const { | 298 LayoutUnit logicalTopLayoutOverflow(LayoutUnit lineTop) const { |
294 if (m_overflow) | 299 if (m_overflow) |
295 return isHorizontal() ? m_overflow->layoutOverflowRect().y() | 300 return isHorizontal() ? m_overflow->layoutOverflowRect().y() |
296 : m_overflow->layoutOverflowRect().x(); | 301 : m_overflow->layoutOverflowRect().x(); |
297 return lineTop; | 302 return lineTop; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 m_descendantsHaveSameLineHeightAndBaseline = false; | 371 m_descendantsHaveSameLineHeightAndBaseline = false; |
367 if (parent() && parent()->descendantsHaveSameLineHeightAndBaseline()) | 372 if (parent() && parent()->descendantsHaveSameLineHeightAndBaseline()) |
368 parent()->clearDescendantsHaveSameLineHeightAndBaseline(); | 373 parent()->clearDescendantsHaveSameLineHeightAndBaseline(); |
369 } | 374 } |
370 | 375 |
371 bool isFirstAfterPageBreak() const { return m_isFirstAfterPageBreak; } | 376 bool isFirstAfterPageBreak() const { return m_isFirstAfterPageBreak; } |
372 void setIsFirstAfterPageBreak(bool isFirstAfterPageBreak) { | 377 void setIsFirstAfterPageBreak(bool isFirstAfterPageBreak) { |
373 m_isFirstAfterPageBreak = isFirstAfterPageBreak; | 378 m_isFirstAfterPageBreak = isFirstAfterPageBreak; |
374 } | 379 } |
375 | 380 |
376 // Some callers (LayoutListItem) needs to set extra overflow on their line box
. | 381 // Some callers (LayoutListItem) needs to set extra overflow on their line |
| 382 // box. |
377 void overrideOverflowFromLogicalRects(const LayoutRect& logicalLayoutOverflow, | 383 void overrideOverflowFromLogicalRects(const LayoutRect& logicalLayoutOverflow, |
378 const LayoutRect& logicalVisualOverflow, | 384 const LayoutRect& logicalVisualOverflow, |
379 LayoutUnit lineTop, | 385 LayoutUnit lineTop, |
380 LayoutUnit lineBottom) { | 386 LayoutUnit lineBottom) { |
381 // If we are setting an overflow, then we can't pretend not to have an overf
low. | 387 // If we are setting an overflow, then we can't pretend not to have an |
| 388 // overflow. |
382 clearKnownToHaveNoOverflow(); | 389 clearKnownToHaveNoOverflow(); |
383 setOverflowFromLogicalRects(logicalLayoutOverflow, logicalVisualOverflow, | 390 setOverflowFromLogicalRects(logicalLayoutOverflow, logicalVisualOverflow, |
384 lineTop, lineBottom); | 391 lineTop, lineBottom); |
385 } | 392 } |
386 | 393 |
387 private: | 394 private: |
388 void placeBoxRangeInInlineDirection(InlineBox* firstChild, | 395 void placeBoxRangeInInlineDirection(InlineBox* firstChild, |
389 InlineBox* lastChild, | 396 InlineBox* lastChild, |
390 LayoutUnit& logicalLeft, | 397 LayoutUnit& logicalLeft, |
391 LayoutUnit& minLogicalLeft, | 398 LayoutUnit& minLogicalLeft, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 void computeMaxLogicalTop(LayoutUnit& maxLogicalTop) const; | 446 void computeMaxLogicalTop(LayoutUnit& maxLogicalTop) const; |
440 | 447 |
441 private: | 448 private: |
442 unsigned m_includeLogicalLeftEdge : 1; | 449 unsigned m_includeLogicalLeftEdge : 1; |
443 unsigned m_includeLogicalRightEdge : 1; | 450 unsigned m_includeLogicalRightEdge : 1; |
444 unsigned m_hasTextChildren : 1; | 451 unsigned m_hasTextChildren : 1; |
445 unsigned m_hasTextDescendants : 1; | 452 unsigned m_hasTextDescendants : 1; |
446 unsigned m_descendantsHaveSameLineHeightAndBaseline : 1; | 453 unsigned m_descendantsHaveSameLineHeightAndBaseline : 1; |
447 | 454 |
448 protected: | 455 protected: |
449 // The following members are only used by RootInlineBox but moved here to keep
the bits packed. | 456 // The following members are only used by RootInlineBox but moved here to keep |
| 457 // the bits packed. |
450 | 458 |
451 // Whether or not this line uses alphabetic or ideographic baselines by defaul
t. | 459 // Whether or not this line uses alphabetic or ideographic baselines by |
| 460 // default. |
452 unsigned m_baselineType : 1; // FontBaseline | 461 unsigned m_baselineType : 1; // FontBaseline |
453 | 462 |
454 // If the line contains any ruby runs, then this will be true. | 463 // If the line contains any ruby runs, then this will be true. |
455 unsigned m_hasAnnotationsBefore : 1; | 464 unsigned m_hasAnnotationsBefore : 1; |
456 unsigned m_hasAnnotationsAfter : 1; | 465 unsigned m_hasAnnotationsAfter : 1; |
457 | 466 |
458 unsigned m_lineBreakBidiStatusEor : 5; // WTF::Unicode::Direction | 467 unsigned m_lineBreakBidiStatusEor : 5; // WTF::Unicode::Direction |
459 unsigned m_lineBreakBidiStatusLastStrong : 5; // WTF::Unicode::Direction | 468 unsigned m_lineBreakBidiStatusLastStrong : 5; // WTF::Unicode::Direction |
460 unsigned m_lineBreakBidiStatusLast : 5; // WTF::Unicode::Direction | 469 unsigned m_lineBreakBidiStatusLast : 5; // WTF::Unicode::Direction |
461 | 470 |
(...skipping 15 matching lines...) Expand all Loading... |
477 | 486 |
478 inline void InlineFlowBox::setHasBadChildList() { | 487 inline void InlineFlowBox::setHasBadChildList() { |
479 #if ENABLE(ASSERT) | 488 #if ENABLE(ASSERT) |
480 m_hasBadChildList = true; | 489 m_hasBadChildList = true; |
481 #endif | 490 #endif |
482 } | 491 } |
483 | 492 |
484 } // namespace blink | 493 } // namespace blink |
485 | 494 |
486 #endif // InlineFlowBox_h | 495 #endif // InlineFlowBox_h |
OLD | NEW |