diff options
author | Khaled Hosny <khaledhosny@eglug.org> | 2014-03-26 15:45:02 +0000 |
---|---|---|
committer | Khaled Hosny <khaledhosny@eglug.org> | 2014-03-26 15:45:02 +0000 |
commit | 591e8990beb850b552eff5efae5cf355046a11f7 (patch) | |
tree | af3b831499af7495d93d94744711bdb25b3c3694 /Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp | |
parent | 2a9f065bb22081f73cff6c4ef8a5a4493190f414 (diff) |
Sync XeTeX
git-svn-id: svn://tug.org/texlive/trunk@33296 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp')
-rw-r--r-- | Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp b/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp index 6eae6dbe5d6..d75b933cd36 100644 --- a/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp +++ b/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp @@ -798,37 +798,36 @@ getGlyphAdvances(XeTeXLayoutEngine engine, float advances[]) } void -getGlyphPositions(XeTeXLayoutEngine engine, float positions[]) +getGlyphPositions(XeTeXLayoutEngine engine, FloatPoint positions[]) { int glyphCount = hb_buffer_get_length(engine->hbBuffer); hb_glyph_position_t *hbPositions = hb_buffer_get_glyph_positions(engine->hbBuffer, NULL); - int i = 0; float x = 0, y = 0; if (engine->font->getLayoutDirVertical()) { - for (i = 0; i < glyphCount; i++) { - positions[2*i] = - engine->font->unitsToPoints(x + hbPositions[i].y_offset); /* negative is forwards */ - positions[2*i+1] = engine->font->unitsToPoints(y - hbPositions[i].x_offset); + for (int i = 0; i < glyphCount; i++) { + positions[i].x = -engine->font->unitsToPoints(x + hbPositions[i].y_offset); /* negative is forwards */ + positions[i].y = engine->font->unitsToPoints(y - hbPositions[i].x_offset); x += hbPositions[i].y_advance; y += hbPositions[i].x_advance; } - positions[2*i] = - engine->font->unitsToPoints(x); - positions[2*i+1] = engine->font->unitsToPoints(y); + positions[glyphCount].x = -engine->font->unitsToPoints(x); + positions[glyphCount].y = engine->font->unitsToPoints(y); } else { - for (i = 0; i < glyphCount; i++) { - positions[2*i] = engine->font->unitsToPoints(x + hbPositions[i].x_offset); - positions[2*i+1] = - engine->font->unitsToPoints(y + hbPositions[i].y_offset); /* negative is upwards */ + for (int i = 0; i < glyphCount; i++) { + positions[i].x = engine->font->unitsToPoints(x + hbPositions[i].x_offset); + positions[i].y = -engine->font->unitsToPoints(y + hbPositions[i].y_offset); /* negative is upwards */ x += hbPositions[i].x_advance; y += hbPositions[i].y_advance; } - positions[2*i] = engine->font->unitsToPoints(x); - positions[2*i+1] = - engine->font->unitsToPoints(y); + positions[glyphCount].x = engine->font->unitsToPoints(x); + positions[glyphCount].y = -engine->font->unitsToPoints(y); } if (engine->extend != 1.0 || engine->slant != 0.0) for (int i = 0; i <= glyphCount; ++i) - positions[2*i] = positions[2*i] * engine->extend - positions[2*i+1] * engine->slant; + positions[i].x = positions[i].x * engine->extend - positions[i].y * engine->slant; } float |