[PATCH 3/5] usp10: Take the script direction into account when applying OpenType features.
Aric Stewart
aric at codeweavers.com
Mon Mar 6 12:16:25 CST 2017
Signed-off-by: Aric Stewart <aric at codeweavers.com>
On 3/2/17 2:38 AM, Henri Verbeet wrote:
> As opposed to just looking at the run direction.
>
> Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
> ---
> dlls/usp10/shape.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/dlls/usp10/shape.c b/dlls/usp10/shape.c
> index 9e0addc..aa98366 100644
> --- a/dlls/usp10/shape.c
> +++ b/dlls/usp10/shape.c
> @@ -751,6 +751,7 @@ static void UpdateClusters(int nextIndex, int changeCount, int write_dir, int ch
> return;
> else
> {
> + int cluster_dir = pwLogClust[0] < pwLogClust[chars-1] ? 1 : -1;
> int i;
> int target_glyph = nextIndex - write_dir;
> int target_index = -1;
> @@ -775,7 +776,7 @@ static void UpdateClusters(int nextIndex, int changeCount, int write_dir, int ch
> if (changeCount < 0)
> {
> /* merge glyphs */
> - for(i = target_index; i < chars && i >= 0; i+=write_dir)
> + for (i = target_index; i < chars && i >= 0; i += cluster_dir)
> {
> if (pwLogClust[i] == target_glyph)
> continue;
> @@ -794,8 +795,8 @@ static void UpdateClusters(int nextIndex, int changeCount, int write_dir, int ch
> }
> }
>
> - /* renumber trailing indexes*/
> - for(i = target_index; i < chars && i >= 0; i+=write_dir)
> + /* renumber trailing indexes */
> + for (i = target_index; i < chars && i >= 0; i += cluster_dir)
> {
> if (pwLogClust[i] != target_glyph)
> pwLogClust[i] += changeCount;
> @@ -803,8 +804,8 @@ static void UpdateClusters(int nextIndex, int changeCount, int write_dir, int ch
> }
> else
> {
> - for(i = target_index; i < chars && i >= 0; i+=write_dir)
> - pwLogClust[i] += changeCount;
> + for (i = target_index; i < chars && i >= 0; i += cluster_dir)
> + pwLogClust[i] += changeCount;
> }
> }
> }
> @@ -3382,7 +3383,7 @@ static void SHAPE_ApplyOpenTypeFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANALYS
> if (!psc->GSUB_Table)
> return;
>
> - if (!psa->fLogicalOrder && psa->fRTL)
> + if (scriptInformation[psa->eScript].a.fRTL && (!psa->fLogicalOrder || !psa->fRTL))
> dirL = -1;
> else
> dirL = 1;
>
More information about the wine-patches
mailing list