| OLD | NEW | 
|---|
| 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, 2011 Apple Inc. All r
      ight reserved. | 3  * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
      ight reserved. | 
| 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 417 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 428 static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
      n, LayoutText* layoutText, LayoutUnit xPos, const LineInfo& lineInfo, | 428 static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
      n, LayoutText* layoutText, LayoutUnit xPos, const LineInfo& lineInfo, | 
| 429     GlyphOverflowAndFallbackFontsMap& textBoxDataMap, VerticalPositionCache& ver
      ticalPositionCache, WordMeasurements& wordMeasurements) | 429     GlyphOverflowAndFallbackFontsMap& textBoxDataMap, VerticalPositionCache& ver
      ticalPositionCache, WordMeasurements& wordMeasurements) | 
| 430 { | 430 { | 
| 431     HashSet<const SimpleFontData*> fallbackFonts; | 431     HashSet<const SimpleFontData*> fallbackFonts; | 
| 432     GlyphOverflow glyphOverflow; | 432     GlyphOverflow glyphOverflow; | 
| 433 | 433 | 
| 434     const Font& font = layoutText->style(lineInfo.isFirstLine())->font(); | 434     const Font& font = layoutText->style(lineInfo.isFirstLine())->font(); | 
| 435 | 435 | 
| 436     LayoutUnit hyphenWidth; | 436     LayoutUnit hyphenWidth; | 
| 437     if (toInlineTextBox(run->m_box)->hasHyphen()) | 437     if (toInlineTextBox(run->m_box)->hasHyphen()) | 
| 438         hyphenWidth = layoutText->hyphenWidth(font, run->direction()); | 438         hyphenWidth = LayoutUnit(layoutText->hyphenWidth(font, run->direction())
      ); | 
| 439 | 439 | 
| 440     float measuredWidth = 0; | 440     float measuredWidth = 0; | 
| 441     FloatRect glyphBounds; | 441     FloatRect glyphBounds; | 
| 442 | 442 | 
| 443     bool kerningIsEnabled = font.fontDescription().typesettingFeatures() & Kerni
      ng; | 443     bool kerningIsEnabled = font.fontDescription().typesettingFeatures() & Kerni
      ng; | 
| 444 | 444 | 
| 445 #if OS(MACOSX) | 445 #if OS(MACOSX) | 
| 446     // FIXME: Having any font feature settings enabled can lead to selection gap
      s on | 446     // FIXME: Having any font feature settings enabled can lead to selection gap
      s on | 
| 447     // Chromium-mac. https://bugs.webkit.org/show_bug.cgi?id=113418 | 447     // Chromium-mac. https://bugs.webkit.org/show_bug.cgi?id=113418 | 
| 448     bool canUseCachedWordMeasurements = font.canShapeWordByWord() && !font.fontD
      escription().featureSettings(); | 448     bool canUseCachedWordMeasurements = font.canShapeWordByWord() && !font.fontD
      escription().featureSettings(); | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 493     if (measuredWidth < 0) { | 493     if (measuredWidth < 0) { | 
| 494         if (measuredWidth < glyphBounds.x()) { | 494         if (measuredWidth < glyphBounds.x()) { | 
| 495             glyphBounds.expand(glyphBounds.x() - measuredWidth, 0); | 495             glyphBounds.expand(glyphBounds.x() - measuredWidth, 0); | 
| 496             glyphBounds.setX(measuredWidth); | 496             glyphBounds.setX(measuredWidth); | 
| 497         } | 497         } | 
| 498         measuredWidth = 0; | 498         measuredWidth = 0; | 
| 499     } | 499     } | 
| 500 | 500 | 
| 501     glyphOverflow.setFromBounds(glyphBounds, font.fontMetrics().floatAscent(), f
      ont.fontMetrics().floatDescent(), measuredWidth); | 501     glyphOverflow.setFromBounds(glyphBounds, font.fontMetrics().floatAscent(), f
      ont.fontMetrics().floatDescent(), measuredWidth); | 
| 502 | 502 | 
| 503     run->m_box->setLogicalWidth(measuredWidth + hyphenWidth); | 503     run->m_box->setLogicalWidth(LayoutUnit(measuredWidth) + hyphenWidth); | 
| 504     if (!fallbackFonts.isEmpty()) { | 504     if (!fallbackFonts.isEmpty()) { | 
| 505         ASSERT(run->m_box->isText()); | 505         ASSERT(run->m_box->isText()); | 
| 506         GlyphOverflowAndFallbackFontsMap::ValueType* it = textBoxDataMap.add(toI
      nlineTextBox(run->m_box), std::make_pair(Vector<const SimpleFontData*>(), GlyphO
      verflow())).storedValue; | 506         GlyphOverflowAndFallbackFontsMap::ValueType* it = textBoxDataMap.add(toI
      nlineTextBox(run->m_box), std::make_pair(Vector<const SimpleFontData*>(), GlyphO
      verflow())).storedValue; | 
| 507         ASSERT(it->value.first.isEmpty()); | 507         ASSERT(it->value.first.isEmpty()); | 
| 508         copyToVector(fallbackFonts, it->value.first); | 508         copyToVector(fallbackFonts, it->value.first); | 
| 509         run->m_box->parent()->clearDescendantsHaveSameLineHeightAndBaseline(); | 509         run->m_box->parent()->clearDescendantsHaveSameLineHeightAndBaseline(); | 
| 510     } | 510     } | 
| 511     if (!glyphOverflow.isApproximatelyZero()) { | 511     if (!glyphOverflow.isApproximatelyZero()) { | 
| 512         ASSERT(run->m_box->isText()); | 512         ASSERT(run->m_box->isText()); | 
| 513         GlyphOverflowAndFallbackFontsMap::ValueType* it = textBoxDataMap.add(toI
      nlineTextBox(run->m_box), std::make_pair(Vector<const SimpleFontData*>(), GlyphO
      verflow())).storedValue; | 513         GlyphOverflowAndFallbackFontsMap::ValueType* it = textBoxDataMap.add(toI
      nlineTextBox(run->m_box), std::make_pair(Vector<const SimpleFontData*>(), GlyphO
      verflow())).storedValue; | 
| (...skipping 1467 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1981         LayoutUnit currLogicalLeft = curr->logicalLeft(); | 1981         LayoutUnit currLogicalLeft = curr->logicalLeft(); | 
| 1982         LayoutUnit blockRightEdge = logicalRightOffsetForLine(curr->lineTop(), i
      ndentText); | 1982         LayoutUnit blockRightEdge = logicalRightOffsetForLine(curr->lineTop(), i
      ndentText); | 
| 1983         LayoutUnit blockLeftEdge = logicalLeftOffsetForLine(curr->lineTop(), ind
      entText); | 1983         LayoutUnit blockLeftEdge = logicalLeftOffsetForLine(curr->lineTop(), ind
      entText); | 
| 1984         LayoutUnit lineBoxEdge = ltr ? currLogicalLeft + curr->logicalWidth() : 
      currLogicalLeft; | 1984         LayoutUnit lineBoxEdge = ltr ? currLogicalLeft + curr->logicalWidth() : 
      currLogicalLeft; | 
| 1985         if ((ltr && lineBoxEdge > blockRightEdge) || (!ltr && lineBoxEdge < bloc
      kLeftEdge)) { | 1985         if ((ltr && lineBoxEdge > blockRightEdge) || (!ltr && lineBoxEdge < bloc
      kLeftEdge)) { | 
| 1986             // This line spills out of our box in the appropriate direction.  No
      w we need to see if the line | 1986             // This line spills out of our box in the appropriate direction.  No
      w we need to see if the line | 
| 1987             // can be truncated.  In order for truncation to be possible, the li
      ne must have sufficient space to | 1987             // can be truncated.  In order for truncation to be possible, the li
      ne must have sufficient space to | 
| 1988             // accommodate our truncation string, and no replaced elements (imag
      es, tables) can overlap the ellipsis | 1988             // accommodate our truncation string, and no replaced elements (imag
      es, tables) can overlap the ellipsis | 
| 1989             // space. | 1989             // space. | 
| 1990 | 1990 | 
| 1991             LayoutUnit width = indentText == IndentText ? firstLineEllipsisWidth
       : ellipsisWidth; | 1991             LayoutUnit width(indentText == IndentText ? firstLineEllipsisWidth :
       ellipsisWidth); | 
| 1992             LayoutUnit blockEdge = ltr ? blockRightEdge : blockLeftEdge; | 1992             LayoutUnit blockEdge = ltr ? blockRightEdge : blockLeftEdge; | 
| 1993             if (curr->lineCanAccommodateEllipsis(ltr, blockEdge, lineBoxEdge, wi
      dth)) { | 1993             if (curr->lineCanAccommodateEllipsis(ltr, blockEdge, lineBoxEdge, wi
      dth)) { | 
| 1994                 LayoutUnit totalLogicalWidth = curr->placeEllipsis(selectedEllip
      sisStr, ltr, blockLeftEdge, blockRightEdge, width); | 1994                 LayoutUnit totalLogicalWidth = curr->placeEllipsis(selectedEllip
      sisStr, ltr, blockLeftEdge, blockRightEdge, width); | 
| 1995                 LayoutUnit logicalLeft; // We are only interested in the delta f
      rom the base position. | 1995                 LayoutUnit logicalLeft; // We are only interested in the delta f
      rom the base position. | 
| 1996                 LayoutUnit availableLogicalWidth = blockRightEdge - blockLeftEdg
      e; | 1996                 LayoutUnit availableLogicalWidth = blockRightEdge - blockLeftEdg
      e; | 
| 1997                 updateLogicalWidthForAlignment(textAlign, curr, 0, logicalLeft, 
      totalLogicalWidth, availableLogicalWidth, 0); | 1997                 updateLogicalWidthForAlignment(textAlign, curr, 0, logicalLeft, 
      totalLogicalWidth, availableLogicalWidth, 0); | 
| 1998                 if (ltr) | 1998                 if (ltr) | 
| 1999                     curr->moveInInlineDirection(logicalLeft); | 1999                     curr->moveInInlineDirection(logicalLeft); | 
| 2000                 else | 2000                 else | 
| 2001                     curr->moveInInlineDirection(logicalLeft - (availableLogicalW
      idth - totalLogicalWidth)); | 2001                     curr->moveInInlineDirection(logicalLeft - (availableLogicalW
      idth - totalLogicalWidth)); | 
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2107     if (!line || !line->isFirstLineStyle()) | 2107     if (!line || !line->isFirstLineStyle()) | 
| 2108         return reason; | 2108         return reason; | 
| 2109     // It's the RootInlineBox that paints the ::first-line background. Note that
       since it may be | 2109     // It's the RootInlineBox that paints the ::first-line background. Note that
       since it may be | 
| 2110     // expensive to figure out if the first line is affected by any ::first-line
       selectors at all, | 2110     // expensive to figure out if the first line is affected by any ::first-line
       selectors at all, | 
| 2111     // we just invalidate it unconditionally, since that's typically cheaper. | 2111     // we just invalidate it unconditionally, since that's typically cheaper. | 
| 2112     invalidateDisplayItemClient(*line); | 2112     invalidateDisplayItemClient(*line); | 
| 2113     return reason; | 2113     return reason; | 
| 2114 } | 2114 } | 
| 2115 | 2115 | 
| 2116 } // namespace blink | 2116 } // namespace blink | 
| OLD | NEW | 
|---|