| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 Google Inc. All rights reserved. | 2 * Copyright (c) 2012 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. | 3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 943 glyphBounds.move(glyphOrigin.x(), glyphOrigin.y()); | 943 glyphBounds.move(glyphOrigin.x(), glyphOrigin.y()); |
| 944 m_glyphBoundingBox.unite(glyphBounds); | 944 m_glyphBoundingBox.unite(glyphBounds); |
| 945 glyphOrigin += FloatSize(advance + offsetX, offsetY); | 945 glyphOrigin += FloatSize(advance + offsetX, offsetY); |
| 946 | 946 |
| 947 totalAdvance += advance; | 947 totalAdvance += advance; |
| 948 } | 948 } |
| 949 currentRun->setWidth(totalAdvance > 0.0 ? totalAdvance : 0.0); | 949 currentRun->setWidth(totalAdvance > 0.0 ? totalAdvance : 0.0); |
| 950 m_totalWidth += currentRun->width(); | 950 m_totalWidth += currentRun->width(); |
| 951 } | 951 } |
| 952 | 952 |
| 953 void HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun(GlyphBufferWithOffsets* glyp
hBuffer, HarfBuzzRun* currentRun, float& carryAdvance) | 953 void HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun(GlyphBuffer* glyphBuffer, |
| 954 HarfBuzzRun* currentRun, float& carryAdvance) |
| 954 { | 955 { |
| 955 FloatSize* offsets = currentRun->offsets(); | 956 FloatSize* offsets = currentRun->offsets(); |
| 956 uint16_t* glyphs = currentRun->glyphs(); | 957 uint16_t* glyphs = currentRun->glyphs(); |
| 957 float* advances = currentRun->advances(); | 958 float* advances = currentRun->advances(); |
| 958 unsigned numGlyphs = currentRun->numGlyphs(); | 959 unsigned numGlyphs = currentRun->numGlyphs(); |
| 959 uint16_t* glyphToCharacterIndexes = currentRun->glyphToCharacterIndexes(); | 960 uint16_t* glyphToCharacterIndexes = currentRun->glyphToCharacterIndexes(); |
| 960 FloatSize runStartOffset = FloatSize(); | 961 FloatSize runStartOffset = FloatSize(); |
| 961 if (m_run.rtl()) { | 962 if (m_run.rtl()) { |
| 962 for (unsigned i = 0; i < numGlyphs; ++i) { | 963 for (unsigned i = 0; i < numGlyphs; ++i) { |
| 963 uint16_t currentCharacterIndex = currentRun->startIndex() + glyphToC
haracterIndexes[i]; | 964 uint16_t currentCharacterIndex = currentRun->startIndex() + glyphToC
haracterIndexes[i]; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 unsigned numRuns = m_harfBuzzRuns.size(); | 1043 unsigned numRuns = m_harfBuzzRuns.size(); |
| 1043 float carryAdvance = 0; | 1044 float carryAdvance = 0; |
| 1044 if (m_run.rtl()) { | 1045 if (m_run.rtl()) { |
| 1045 for (int runIndex = numRuns - 1; runIndex >= 0; --runIndex) { | 1046 for (int runIndex = numRuns - 1; runIndex >= 0; --runIndex) { |
| 1046 HarfBuzzRun* currentRun = m_harfBuzzRuns[runIndex].get(); | 1047 HarfBuzzRun* currentRun = m_harfBuzzRuns[runIndex].get(); |
| 1047 if (!currentRun->hasGlyphToCharacterIndexes()) { | 1048 if (!currentRun->hasGlyphToCharacterIndexes()) { |
| 1048 // FIXME: bug 337886, 359664 | 1049 // FIXME: bug 337886, 359664 |
| 1049 continue; | 1050 continue; |
| 1050 } | 1051 } |
| 1051 if (m_forTextEmphasis == ForTextEmphasis) { | 1052 if (m_forTextEmphasis == ForTextEmphasis) { |
| 1052 ASSERT(!glyphBuffer->hasOffsets()); | |
| 1053 fillGlyphBufferForTextEmphasis(glyphBuffer, currentRun); | 1053 fillGlyphBufferForTextEmphasis(glyphBuffer, currentRun); |
| 1054 } else { | 1054 } else { |
| 1055 ASSERT(glyphBuffer->hasOffsets()); | 1055 fillGlyphBufferFromHarfBuzzRun(glyphBuffer, currentRun, carryAdv
ance); |
| 1056 fillGlyphBufferFromHarfBuzzRun( | |
| 1057 static_cast<GlyphBufferWithOffsets*>(glyphBuffer), currentRu
n, carryAdvance); | |
| 1058 } | 1056 } |
| 1059 } | 1057 } |
| 1060 } else { | 1058 } else { |
| 1061 for (unsigned runIndex = 0; runIndex < numRuns; ++runIndex) { | 1059 for (unsigned runIndex = 0; runIndex < numRuns; ++runIndex) { |
| 1062 HarfBuzzRun* currentRun = m_harfBuzzRuns[runIndex].get(); | 1060 HarfBuzzRun* currentRun = m_harfBuzzRuns[runIndex].get(); |
| 1063 if (!currentRun->hasGlyphToCharacterIndexes()) { | 1061 if (!currentRun->hasGlyphToCharacterIndexes()) { |
| 1064 // FIXME: bug 337886, 359664 | 1062 // FIXME: bug 337886, 359664 |
| 1065 continue; | 1063 continue; |
| 1066 } | 1064 } |
| 1067 if (m_forTextEmphasis == ForTextEmphasis) { | 1065 if (m_forTextEmphasis == ForTextEmphasis) { |
| 1068 ASSERT(!glyphBuffer->hasOffsets()); | |
| 1069 fillGlyphBufferForTextEmphasis(glyphBuffer, currentRun); | 1066 fillGlyphBufferForTextEmphasis(glyphBuffer, currentRun); |
| 1070 } else { | 1067 } else { |
| 1071 ASSERT(glyphBuffer->hasOffsets()); | 1068 fillGlyphBufferFromHarfBuzzRun(glyphBuffer, currentRun, carryAdv
ance); |
| 1072 fillGlyphBufferFromHarfBuzzRun( | |
| 1073 static_cast<GlyphBufferWithOffsets*>(glyphBuffer), currentRu
n, carryAdvance); | |
| 1074 } | 1069 } |
| 1075 } | 1070 } |
| 1076 } | 1071 } |
| 1077 return glyphBuffer->size(); | 1072 return glyphBuffer->size(); |
| 1078 } | 1073 } |
| 1079 | 1074 |
| 1080 int HarfBuzzShaper::offsetForPosition(float targetX) | 1075 int HarfBuzzShaper::offsetForPosition(float targetX) |
| 1081 { | 1076 { |
| 1082 int charactersSoFar = 0; | 1077 int charactersSoFar = 0; |
| 1083 float currentX = 0; | 1078 float currentX = 0; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 point.x() + fromX, point.x() + toX, | 1151 point.x() + fromX, point.x() + toX, |
| 1157 point.y(), height); | 1152 point.y(), height); |
| 1158 } | 1153 } |
| 1159 | 1154 |
| 1160 return Font::pixelSnappedSelectionRect( | 1155 return Font::pixelSnappedSelectionRect( |
| 1161 point.x() + toX, point.x() + fromX, | 1156 point.x() + toX, point.x() + fromX, |
| 1162 point.y(), height); | 1157 point.y(), height); |
| 1163 } | 1158 } |
| 1164 | 1159 |
| 1165 } // namespace blink | 1160 } // namespace blink |
| OLD | NEW |