| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 #include "wtf/HashSet.h" | 38 #include "wtf/HashSet.h" |
| 39 #include "wtf/OwnPtr.h" | 39 #include "wtf/OwnPtr.h" |
| 40 #include "wtf/PassOwnPtr.h" | 40 #include "wtf/PassOwnPtr.h" |
| 41 #include "wtf/unicode/CharacterNames.h" | 41 #include "wtf/unicode/CharacterNames.h" |
| 42 #include "wtf/Vector.h" | 42 #include "wtf/Vector.h" |
| 43 | 43 |
| 44 namespace WebCore { | 44 namespace WebCore { |
| 45 | 45 |
| 46 class Font; | 46 class Font; |
| 47 class SimpleFontData; | 47 class SimpleFontData; |
| 48 | |
| 49 class HarfBuzzShaper FINAL { | 48 class HarfBuzzShaper FINAL { |
| 50 public: | 49 public: |
| 51 enum NormalizeMode { | 50 enum NormalizeMode { |
| 52 DoNotNormalizeMirrorChars, | 51 DoNotNormalizeMirrorChars, |
| 53 NormalizeMirrorChars | 52 NormalizeMirrorChars |
| 54 }; | 53 }; |
| 55 | 54 |
| 56 HarfBuzzShaper(const Font*, const TextRun&); | 55 enum ForTextEmphasisOrNot { |
| 56 NotForTextEmphasis, |
| 57 ForTextEmphasis |
| 58 }; |
| 59 |
| 60 HarfBuzzShaper(const Font*, const TextRun&, ForTextEmphasisOrNot = NotForTex
tEmphasis); |
| 57 | 61 |
| 58 void setDrawRange(int from, int to); | 62 void setDrawRange(int from, int to); |
| 59 bool shape(GlyphBuffer* = 0); | 63 bool shape(GlyphBuffer* = 0); |
| 60 FloatPoint adjustStartPoint(const FloatPoint&); | 64 FloatPoint adjustStartPoint(const FloatPoint&); |
| 61 float totalWidth() { return m_totalWidth; } | 65 float totalWidth() { return m_totalWidth; } |
| 62 int offsetForPosition(float targetX); | 66 int offsetForPosition(float targetX); |
| 63 FloatRect selectionRect(const FloatPoint&, int height, int from, int to); | 67 FloatRect selectionRect(const FloatPoint&, int height, int from, int to); |
| 64 | 68 |
| 65 private: | 69 private: |
| 66 class HarfBuzzRun { | 70 class HarfBuzzRun { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 130 |
| 127 // In complex text word-spacing affects each line-break, space (U+0020) and
non-breaking space (U+00A0). | 131 // In complex text word-spacing affects each line-break, space (U+0020) and
non-breaking space (U+00A0). |
| 128 static bool isCodepointSpace(UChar c) { return c == ' ' || c == noBreakSpace
|| c == '\n'; } | 132 static bool isCodepointSpace(UChar c) { return c == ' ' || c == noBreakSpace
|| c == '\n'; } |
| 129 | 133 |
| 130 void setFontFeatures(); | 134 void setFontFeatures(); |
| 131 | 135 |
| 132 bool createHarfBuzzRuns(); | 136 bool createHarfBuzzRuns(); |
| 133 bool shapeHarfBuzzRuns(); | 137 bool shapeHarfBuzzRuns(); |
| 134 bool fillGlyphBuffer(GlyphBuffer*); | 138 bool fillGlyphBuffer(GlyphBuffer*); |
| 135 void fillGlyphBufferFromHarfBuzzRun(GlyphBuffer*, HarfBuzzRun*, FloatPoint&
firstOffsetOfNextRun); | 139 void fillGlyphBufferFromHarfBuzzRun(GlyphBuffer*, HarfBuzzRun*, FloatPoint&
firstOffsetOfNextRun); |
| 140 void fillGlyphBufferForTextEmphasis(GlyphBuffer*, HarfBuzzRun* currentRun); |
| 136 void setGlyphPositionsForHarfBuzzRun(HarfBuzzRun*, hb_buffer_t*); | 141 void setGlyphPositionsForHarfBuzzRun(HarfBuzzRun*, hb_buffer_t*); |
| 137 void addHarfBuzzRun(unsigned startCharacter, unsigned endCharacter, const Si
mpleFontData*, UScriptCode); | 142 void addHarfBuzzRun(unsigned startCharacter, unsigned endCharacter, const Si
mpleFontData*, UScriptCode); |
| 138 | 143 |
| 139 GlyphBufferAdvance createGlyphBufferAdvance(float, float); | 144 GlyphBufferAdvance createGlyphBufferAdvance(float, float); |
| 140 | 145 |
| 141 const Font* m_font; | 146 const Font* m_font; |
| 142 OwnPtr<UChar[]> m_normalizedBuffer; | 147 OwnPtr<UChar[]> m_normalizedBuffer; |
| 143 unsigned m_normalizedBufferLength; | 148 unsigned m_normalizedBufferLength; |
| 144 const TextRun& m_run; | 149 const TextRun& m_run; |
| 145 | 150 |
| 146 float m_wordSpacingAdjustment; // Delta adjustment (pixels) for each word br
eak. | 151 float m_wordSpacingAdjustment; // Delta adjustment (pixels) for each word br
eak. |
| 147 float m_padding; // Pixels to be distributed over the line at word breaks. | 152 float m_padding; // Pixels to be distributed over the line at word breaks. |
| 148 float m_padPerWordBreak; // Pixels to be added to each word break. | 153 float m_padPerWordBreak; // Pixels to be added to each word break. |
| 149 float m_padError; // m_padPerWordBreak might have a fractional component. Si
nce we only add a whole number of padding pixels at each word break we accumulat
e error. This is the number of pixels that we are behind so far. | 154 float m_padError; // m_padPerWordBreak might have a fractional component. Si
nce we only add a whole number of padding pixels at each word break we accumulat
e error. This is the number of pixels that we are behind so far. |
| 150 float m_letterSpacing; // Pixels to be added after each glyph. | 155 float m_letterSpacing; // Pixels to be added after each glyph. |
| 151 | 156 |
| 152 Vector<hb_feature_t, 4> m_features; | 157 Vector<hb_feature_t, 4> m_features; |
| 153 Vector<OwnPtr<HarfBuzzRun>, 16> m_harfBuzzRuns; | 158 Vector<OwnPtr<HarfBuzzRun>, 16> m_harfBuzzRuns; |
| 154 | 159 |
| 155 FloatPoint m_startOffset; | 160 FloatPoint m_startOffset; |
| 156 | 161 |
| 157 int m_fromIndex; | 162 int m_fromIndex; |
| 158 int m_toIndex; | 163 int m_toIndex; |
| 159 | 164 |
| 165 ForTextEmphasisOrNot m_forTextEmphasis; |
| 166 |
| 160 float m_totalWidth; | 167 float m_totalWidth; |
| 161 | 168 |
| 162 friend struct CachedShapingResults; | 169 friend struct CachedShapingResults; |
| 163 }; | 170 }; |
| 164 | 171 |
| 165 } // namespace WebCore | 172 } // namespace WebCore |
| 166 | 173 |
| 167 #endif // HarfBuzzShaper_h | 174 #endif // HarfBuzzShaper_h |
| OLD | NEW |