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 * Copyright (C) 2013 Adobe Systems Incorporated. | 5 * Copyright (C) 2013 Adobe Systems Incorporated. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 | 45 |
46 struct RenderTextInfo { | 46 struct RenderTextInfo { |
47 // Destruction of m_layout requires TextLayout to be a complete type, so the
constructor and destructor are made non-inline to avoid compilation errors. | 47 // Destruction of m_layout requires TextLayout to be a complete type, so the
constructor and destructor are made non-inline to avoid compilation errors. |
48 RenderTextInfo(); | 48 RenderTextInfo(); |
49 ~RenderTextInfo(); | 49 ~RenderTextInfo(); |
50 | 50 |
51 RenderText* m_text; | 51 RenderText* m_text; |
52 OwnPtr<TextLayout> m_layout; | 52 OwnPtr<TextLayout> m_layout; |
53 LazyLineBreakIterator m_lineBreakIterator; | 53 LazyLineBreakIterator m_lineBreakIterator; |
54 const Font* m_font; | 54 const Font* m_font; |
| 55 |
| 56 void createLayout(RenderText* renderText, float xPos, bool collapseWhiteSpac
e) |
| 57 { |
| 58 #if OS(MACOSX) |
| 59 m_layout = m_font->createLayoutForMacComplexText(RenderBlockFlow::constr
uctTextRun(renderText, *m_font, renderText, renderText->style()), renderText->te
xtLength(), xPos, collapseWhiteSpace); |
| 60 #else |
| 61 m_layout = nullptr; |
| 62 #endif |
| 63 } |
55 }; | 64 }; |
56 | 65 |
57 class WordMeasurement { | 66 class WordMeasurement { |
58 public: | 67 public: |
59 WordMeasurement() | 68 WordMeasurement() |
60 : renderer(0) | 69 : renderer(0) |
61 , width(0) | 70 , width(0) |
62 , startOffset(0) | 71 , startOffset(0) |
63 , endOffset(0) | 72 , endOffset(0) |
64 { | 73 { |
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 | 762 |
754 if (renderText->isWordBreak()) { | 763 if (renderText->isWordBreak()) { |
755 m_width.commit(); | 764 m_width.commit(); |
756 m_lineBreak.moveToStartOf(m_current.m_obj); | 765 m_lineBreak.moveToStartOf(m_current.m_obj); |
757 ASSERT(m_current.m_pos == renderText->textLength()); | 766 ASSERT(m_current.m_pos == renderText->textLength()); |
758 } | 767 } |
759 | 768 |
760 if (m_renderTextInfo.m_text != renderText) { | 769 if (m_renderTextInfo.m_text != renderText) { |
761 m_renderTextInfo.m_text = renderText; | 770 m_renderTextInfo.m_text = renderText; |
762 m_renderTextInfo.m_font = &font; | 771 m_renderTextInfo.m_font = &font; |
763 m_renderTextInfo.m_layout = font.createLayout(renderText, m_width.curren
tWidth(), m_collapseWhiteSpace); | 772 m_renderTextInfo.createLayout(renderText, m_width.currentWidth(), m_coll
apseWhiteSpace); |
764 m_renderTextInfo.m_lineBreakIterator.resetStringAndReleaseIterator(rende
rText->text(), style->locale()); | 773 m_renderTextInfo.m_lineBreakIterator.resetStringAndReleaseIterator(rende
rText->text(), style->locale()); |
765 } else if (m_renderTextInfo.m_layout && m_renderTextInfo.m_font != &font) { | 774 } else if (m_renderTextInfo.m_layout && m_renderTextInfo.m_font != &font) { |
766 m_renderTextInfo.m_font = &font; | 775 m_renderTextInfo.m_font = &font; |
767 m_renderTextInfo.m_layout = font.createLayout(renderText, m_width.curren
tWidth(), m_collapseWhiteSpace); | 776 m_renderTextInfo.createLayout(renderText, m_width.currentWidth(), m_coll
apseWhiteSpace); |
768 } | 777 } |
769 | 778 |
770 TextLayout* textLayout = m_renderTextInfo.m_layout.get(); | 779 TextLayout* textLayout = m_renderTextInfo.m_layout.get(); |
771 | 780 |
772 // Non-zero only when kerning is enabled and TextLayout isn't used, in which
case we measure | 781 // Non-zero only when kerning is enabled and TextLayout isn't used, in which
case we measure |
773 // words with their trailing space, then subtract its width. | 782 // words with their trailing space, then subtract its width. |
774 float wordTrailingSpaceWidth = (font.typesettingFeatures() & Kerning) && !te
xtLayout ? font.width(RenderBlockFlow::constructTextRun(renderText, font, &space
, 1, style)) + wordSpacing : 0; | 783 float wordTrailingSpaceWidth = (font.typesettingFeatures() & Kerning) && !te
xtLayout ? font.width(RenderBlockFlow::constructTextRun(renderText, font, &space
, 1, style)) + wordSpacing : 0; |
775 | 784 |
776 UChar lastCharacter = m_renderTextInfo.m_lineBreakIterator.lastCharacter(); | 785 UChar lastCharacter = m_renderTextInfo.m_lineBreakIterator.lastCharacter(); |
777 UChar secondToLastCharacter = m_renderTextInfo.m_lineBreakIterator.secondToL
astCharacter(); | 786 UChar secondToLastCharacter = m_renderTextInfo.m_lineBreakIterator.secondToL
astCharacter(); |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1123 m_lineBreak.m_pos--; | 1132 m_lineBreak.m_pos--; |
1124 m_lineBreak.increment(); | 1133 m_lineBreak.increment(); |
1125 } | 1134 } |
1126 | 1135 |
1127 return m_lineBreak; | 1136 return m_lineBreak; |
1128 } | 1137 } |
1129 | 1138 |
1130 } | 1139 } |
1131 | 1140 |
1132 #endif // BreakingContextInlineHeaders_h | 1141 #endif // BreakingContextInlineHeaders_h |
OLD | NEW |