OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 2 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
3 * | 3 * |
4 * This is part of HarfBuzz, an OpenType Layout engine library. | 4 * This is part of HarfBuzz, an OpenType Layout engine library. |
5 * | 5 * |
6 * Permission is hereby granted, without written agreement and without | 6 * Permission is hereby granted, without written agreement and without |
7 * license or royalty fees, to use, copy, modify, and distribute this | 7 * license or royalty fees, to use, copy, modify, and distribute this |
8 * software and its documentation for any purpose, provided that the | 8 * software and its documentation for any purpose, provided that the |
9 * above copyright notice and the following two paragraphs appear in | 9 * above copyright notice and the following two paragraphs appear in |
10 * all copies of this software. | 10 * all copies of this software. |
(...skipping 1264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 HB_Fixed *advances = item->advances; | 1275 HB_Fixed *advances = item->advances; |
1276 | 1276 |
1277 // DEBUG("positioned glyphs:"); | 1277 // DEBUG("positioned glyphs:"); |
1278 for (unsigned int i = 0; i < face->buffer->in_length; i++) { | 1278 for (unsigned int i = 0; i < face->buffer->in_length; i++) { |
1279 // DEBUG(" %d:\t orig advance: (%d/%d)\tadv=(%d/%d)\tpos=(%d/%d)\
tback=%d\tnew_advance=%d", i, | 1279 // DEBUG(" %d:\t orig advance: (%d/%d)\tadv=(%d/%d)\tpos=(%d/%d)\
tback=%d\tnew_advance=%d", i, |
1280 // glyphs[i].advance.x.toInt(), glyphs[i].advance.y.toInt(), | 1280 // glyphs[i].advance.x.toInt(), glyphs[i].advance.y.toInt(), |
1281 // (int)(positions[i].x_advance >> 6), (int)(positions[i].y_a
dvance >> 6), | 1281 // (int)(positions[i].x_advance >> 6), (int)(positions[i].y_a
dvance >> 6), |
1282 // (int)(positions[i].x_pos >> 6), (int)(positions[i].y_pos >
> 6), | 1282 // (int)(positions[i].x_pos >> 6), (int)(positions[i].y_pos >
> 6), |
1283 // positions[i].back, positions[i].new_advance); | 1283 // positions[i].back, positions[i].new_advance); |
1284 | 1284 |
1285 HB_Fixed adjustment = (item->item.bidiLevel % 2) ? -positions[i].x_a
dvance : positions[i].x_advance; | 1285 HB_Fixed adjustment = positions[i].x_advance; |
1286 | 1286 |
1287 if (!(face->current_flags & HB_ShaperFlag_UseDesignMetrics)) | 1287 if (!(face->current_flags & HB_ShaperFlag_UseDesignMetrics)) |
1288 adjustment = HB_FIXED_ROUND(adjustment); | 1288 adjustment = HB_FIXED_ROUND(adjustment); |
1289 | 1289 |
1290 if (positions[i].new_advance) { | 1290 if (positions[i].new_advance == 0) |
1291 advances[i] = adjustment; | |
1292 } else { | |
1293 advances[i] += adjustment; | 1291 advances[i] += adjustment; |
1294 } | |
1295 | 1292 |
1296 int back = 0; | 1293 int back = 0; |
1297 HB_FixedPoint *offsets = item->offsets; | 1294 HB_FixedPoint *offsets = item->offsets; |
1298 offsets[i].x = positions[i].x_pos; | 1295 offsets[i].x = positions[i].x_pos; |
1299 offsets[i].y = positions[i].y_pos; | 1296 offsets[i].y = positions[i].y_pos; |
1300 while (positions[i - back].back) { | 1297 while (positions[i - back].back) { |
1301 back += positions[i - back].back; | 1298 back += positions[i - back].back; |
1302 offsets[i].x += positions[i - back].x_pos; | 1299 offsets[i].x += positions[i - back].x_pos; |
1303 offsets[i].y += positions[i - back].y_pos; | 1300 offsets[i].y += positions[i - back].y_pos; |
1304 } | 1301 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1347 HB_Bool result = false; | 1344 HB_Bool result = false; |
1348 if (shaper_item->num_glyphs < shaper_item->item.length) { | 1345 if (shaper_item->num_glyphs < shaper_item->item.length) { |
1349 shaper_item->num_glyphs = shaper_item->item.length; | 1346 shaper_item->num_glyphs = shaper_item->item.length; |
1350 return false; | 1347 return false; |
1351 } | 1348 } |
1352 assert(shaper_item->item.script < HB_ScriptCount); | 1349 assert(shaper_item->item.script < HB_ScriptCount); |
1353 result = HB_ScriptEngines[shaper_item->item.script].shape(shaper_item); | 1350 result = HB_ScriptEngines[shaper_item->item.script].shape(shaper_item); |
1354 shaper_item->glyphIndicesPresent = false; | 1351 shaper_item->glyphIndicesPresent = false; |
1355 return result; | 1352 return result; |
1356 } | 1353 } |
1357 | |
OLD | NEW |