| Index: Source/platform/fonts/shaping/HarfBuzzShaper.cpp
|
| diff --git a/Source/platform/fonts/shaping/HarfBuzzShaper.cpp b/Source/platform/fonts/shaping/HarfBuzzShaper.cpp
|
| index 310eca5f3dec129348e01b46e1f6d3dc5d5f3686..5c6fe1d4923247cbac1fe38ca9163b5958896975 100644
|
| --- a/Source/platform/fonts/shaping/HarfBuzzShaper.cpp
|
| +++ b/Source/platform/fonts/shaping/HarfBuzzShaper.cpp
|
| @@ -1140,6 +1140,31 @@ void HarfBuzzShaper::shapeResult(ShapeResult* result, unsigned index,
|
| result->m_runs[index] = run.release();
|
| }
|
|
|
| +PassRefPtr<ShapeResult> ShapeResult::createForTabulationCharacters(const Font* font,
|
| + const TextRun& textRun, float positionOffset, unsigned count)
|
| +{
|
| + const SimpleFontData* fontData = font->primaryFont();
|
| + OwnPtr<ShapeResult::RunInfo> run = adoptPtr(new ShapeResult::RunInfo(fontData,
|
| + // Tab characters are always LTR or RTL, not TTB, even when isVerticalAnyUpright().
|
| + textRun.rtl() ? HB_DIRECTION_RTL : HB_DIRECTION_LTR,
|
| + HB_SCRIPT_COMMON, 0, count, count));
|
| + float position = textRun.xPos() + positionOffset;
|
| + float startPosition = position;
|
| + for (unsigned i = 0; i < count; i++) {
|
| + float advance = font->tabWidth(*fontData, textRun.tabSize(), position);
|
| + run->m_glyphData[i].characterIndex = i;
|
| + run->setGlyphAndPositions(i, fontData->spaceGlyph(), advance, 0, 0);
|
| + position += advance;
|
| + }
|
| + run->m_width = position - startPosition;
|
| +
|
| + RefPtr<ShapeResult> result = ShapeResult::create(font, count, textRun.direction());
|
| + result->m_width = run->m_width;
|
| + result->m_numGlyphs = count;
|
| + result->m_runs.append(run.release());
|
| + return result.release();
|
| +}
|
| +
|
| float HarfBuzzShaper::adjustSpacing(ShapeResult::RunInfo* run, size_t glyphIndex, unsigned currentCharacterIndex, float& offset, float& totalAdvance)
|
| {
|
| float spacing = 0;
|
|
|