| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright © 2009 Red Hat, Inc. | 2 * Copyright © 2009 Red Hat, Inc. |
| 3 * Copyright © 2012 Google, Inc. | 3 * Copyright © 2012 Google, Inc. |
| 4 * | 4 * |
| 5 * This is part of HarfBuzz, a text shaping library. | 5 * This is part of HarfBuzz, a text shaping library. |
| 6 * | 6 * |
| 7 * Permission is hereby granted, without written agreement and without | 7 * Permission is hereby granted, without written agreement and without |
| 8 * license or royalty fees, to use, copy, modify, and distribute this | 8 * license or royalty fees, to use, copy, modify, and distribute this |
| 9 * software and its documentation for any purpose, provided that the | 9 * software and its documentation for any purpose, provided that the |
| 10 * above copyright notice and the following two paragraphs appear in | 10 * above copyright notice and the following two paragraphs appear in |
| (...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1189 0, /* x_ppem */ | 1189 0, /* x_ppem */ |
| 1190 0, /* y_ppem */ | 1190 0, /* y_ppem */ |
| 1191 | 1191 |
| 1192 0, /* num_coords */ | 1192 0, /* num_coords */ |
| 1193 NULL, /* coords */ | 1193 NULL, /* coords */ |
| 1194 | 1194 |
| 1195 const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil), /* klass */ | 1195 const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil), /* klass */ |
| 1196 NULL, /* user_data */ | 1196 NULL, /* user_data */ |
| 1197 NULL, /* destroy */ | 1197 NULL, /* destroy */ |
| 1198 | 1198 |
| 1199 hb_font_t::NOTHING, /* dirty */ |
| 1200 |
| 1199 { | 1201 { |
| 1200 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, | 1202 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, |
| 1201 #include "hb-shaper-list.hh" | 1203 #include "hb-shaper-list.hh" |
| 1202 #undef HB_SHAPER_IMPLEMENT | 1204 #undef HB_SHAPER_IMPLEMENT |
| 1203 } | 1205 } |
| 1204 }; | 1206 }; |
| 1205 | 1207 |
| 1206 return const_cast<hb_font_t *> (&_hb_font_nil); | 1208 return const_cast<hb_font_t *> (&_hb_font_nil); |
| 1207 } | 1209 } |
| 1208 | 1210 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1341 void | 1343 void |
| 1342 hb_font_set_parent (hb_font_t *font, | 1344 hb_font_set_parent (hb_font_t *font, |
| 1343 hb_font_t *parent) | 1345 hb_font_t *parent) |
| 1344 { | 1346 { |
| 1345 if (font->immutable) | 1347 if (font->immutable) |
| 1346 return; | 1348 return; |
| 1347 | 1349 |
| 1348 if (!parent) | 1350 if (!parent) |
| 1349 parent = hb_font_get_empty (); | 1351 parent = hb_font_get_empty (); |
| 1350 | 1352 |
| 1353 if (parent == font->parent) |
| 1354 return; |
| 1355 |
| 1356 font->dirty |= font->PARENT; |
| 1357 |
| 1351 hb_font_t *old = font->parent; | 1358 hb_font_t *old = font->parent; |
| 1352 | 1359 |
| 1353 font->parent = hb_font_reference (parent); | 1360 font->parent = hb_font_reference (parent); |
| 1354 | 1361 |
| 1355 hb_font_destroy (old); | 1362 hb_font_destroy (old); |
| 1356 } | 1363 } |
| 1357 | 1364 |
| 1358 /** | 1365 /** |
| 1359 * hb_font_get_parent: | 1366 * hb_font_get_parent: |
| 1360 * @font: a font. | 1367 * @font: a font. |
| 1361 * | 1368 * |
| 1362 * | 1369 * |
| 1363 * | 1370 * |
| 1364 * Return value: (transfer none): | 1371 * Return value: (transfer none): |
| 1365 * | 1372 * |
| 1366 * Since: 0.9.2 | 1373 * Since: 0.9.2 |
| 1367 **/ | 1374 **/ |
| 1368 hb_font_t * | 1375 hb_font_t * |
| 1369 hb_font_get_parent (hb_font_t *font) | 1376 hb_font_get_parent (hb_font_t *font) |
| 1370 { | 1377 { |
| 1371 return font->parent; | 1378 return font->parent; |
| 1372 } | 1379 } |
| 1373 | 1380 |
| 1374 /** | 1381 /** |
| 1382 * hb_font_set_face: |
| 1383 * @font: a font. |
| 1384 * @face: new face. |
| 1385 * |
| 1386 * Sets font-face of @font. |
| 1387 * |
| 1388 * Since: 1.4.3 |
| 1389 **/ |
| 1390 void |
| 1391 hb_font_set_face (hb_font_t *font, |
| 1392 hb_face_t *face) |
| 1393 { |
| 1394 if (font->immutable) |
| 1395 return; |
| 1396 |
| 1397 if (unlikely (!face)) |
| 1398 face = hb_face_get_empty (); |
| 1399 |
| 1400 if (font->face == face) |
| 1401 return; |
| 1402 |
| 1403 font->dirty |= font->FACE; |
| 1404 |
| 1405 hb_face_t *old = font->face; |
| 1406 |
| 1407 font->face = hb_face_reference (face); |
| 1408 |
| 1409 hb_face_destroy (old); |
| 1410 } |
| 1411 |
| 1412 /** |
| 1375 * hb_font_get_face: | 1413 * hb_font_get_face: |
| 1376 * @font: a font. | 1414 * @font: a font. |
| 1377 * | 1415 * |
| 1378 * | 1416 * |
| 1379 * | 1417 * |
| 1380 * Return value: (transfer none): | 1418 * Return value: (transfer none): |
| 1381 * | 1419 * |
| 1382 * Since: 0.9.2 | 1420 * Since: 0.9.2 |
| 1383 **/ | 1421 **/ |
| 1384 hb_face_t * | 1422 hb_face_t * |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1410 destroy (font_data); | 1448 destroy (font_data); |
| 1411 return; | 1449 return; |
| 1412 } | 1450 } |
| 1413 | 1451 |
| 1414 if (font->destroy) | 1452 if (font->destroy) |
| 1415 font->destroy (font->user_data); | 1453 font->destroy (font->user_data); |
| 1416 | 1454 |
| 1417 if (!klass) | 1455 if (!klass) |
| 1418 klass = hb_font_funcs_get_empty (); | 1456 klass = hb_font_funcs_get_empty (); |
| 1419 | 1457 |
| 1458 font->dirty |= font->FUNCS; |
| 1459 |
| 1420 hb_font_funcs_reference (klass); | 1460 hb_font_funcs_reference (klass); |
| 1421 hb_font_funcs_destroy (font->klass); | 1461 hb_font_funcs_destroy (font->klass); |
| 1422 font->klass = klass; | 1462 font->klass = klass; |
| 1423 font->user_data = font_data; | 1463 font->user_data = font_data; |
| 1424 font->destroy = destroy; | 1464 font->destroy = destroy; |
| 1425 } | 1465 } |
| 1426 | 1466 |
| 1427 /** | 1467 /** |
| 1428 * hb_font_set_funcs_data: | 1468 * hb_font_set_funcs_data: |
| 1429 * @font: a font. | 1469 * @font: a font. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1465 * Since: 0.9.2 | 1505 * Since: 0.9.2 |
| 1466 **/ | 1506 **/ |
| 1467 void | 1507 void |
| 1468 hb_font_set_scale (hb_font_t *font, | 1508 hb_font_set_scale (hb_font_t *font, |
| 1469 int x_scale, | 1509 int x_scale, |
| 1470 int y_scale) | 1510 int y_scale) |
| 1471 { | 1511 { |
| 1472 if (font->immutable) | 1512 if (font->immutable) |
| 1473 return; | 1513 return; |
| 1474 | 1514 |
| 1515 if (font->x_scale == x_scale && font->y_scale == y_scale) |
| 1516 return; |
| 1517 |
| 1518 font->dirty |= font->SCALE; |
| 1519 |
| 1475 font->x_scale = x_scale; | 1520 font->x_scale = x_scale; |
| 1476 font->y_scale = y_scale; | 1521 font->y_scale = y_scale; |
| 1477 } | 1522 } |
| 1478 | 1523 |
| 1479 /** | 1524 /** |
| 1480 * hb_font_get_scale: | 1525 * hb_font_get_scale: |
| 1481 * @font: a font. | 1526 * @font: a font. |
| 1482 * @x_scale: (out): | 1527 * @x_scale: (out): |
| 1483 * @y_scale: (out): | 1528 * @y_scale: (out): |
| 1484 * | 1529 * |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1506 * Since: 0.9.2 | 1551 * Since: 0.9.2 |
| 1507 **/ | 1552 **/ |
| 1508 void | 1553 void |
| 1509 hb_font_set_ppem (hb_font_t *font, | 1554 hb_font_set_ppem (hb_font_t *font, |
| 1510 unsigned int x_ppem, | 1555 unsigned int x_ppem, |
| 1511 unsigned int y_ppem) | 1556 unsigned int y_ppem) |
| 1512 { | 1557 { |
| 1513 if (font->immutable) | 1558 if (font->immutable) |
| 1514 return; | 1559 return; |
| 1515 | 1560 |
| 1561 if (font->x_ppem == x_ppem && font->y_ppem == y_ppem) |
| 1562 return; |
| 1563 |
| 1564 font->dirty |= font->PPEM; |
| 1565 |
| 1516 font->x_ppem = x_ppem; | 1566 font->x_ppem = x_ppem; |
| 1517 font->y_ppem = y_ppem; | 1567 font->y_ppem = y_ppem; |
| 1518 } | 1568 } |
| 1519 | 1569 |
| 1520 /** | 1570 /** |
| 1521 * hb_font_get_ppem: | 1571 * hb_font_get_ppem: |
| 1522 * @font: a font. | 1572 * @font: a font. |
| 1523 * @x_ppem: (out): | 1573 * @x_ppem: (out): |
| 1524 * @y_ppem: (out): | 1574 * @y_ppem: (out): |
| 1525 * | 1575 * |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1538 | 1588 |
| 1539 /* | 1589 /* |
| 1540 * Variations | 1590 * Variations |
| 1541 */ | 1591 */ |
| 1542 | 1592 |
| 1543 static void | 1593 static void |
| 1544 _hb_font_adopt_var_coords_normalized (hb_font_t *font, | 1594 _hb_font_adopt_var_coords_normalized (hb_font_t *font, |
| 1545 int *coords, /* 2.14 normalized */ | 1595 int *coords, /* 2.14 normalized */ |
| 1546 unsigned int coords_length) | 1596 unsigned int coords_length) |
| 1547 { | 1597 { |
| 1598 if (font->num_coords == coords_length && |
| 1599 (coords_length == 0 || |
| 1600 0 == memcmp (font->coords, coords, coords_length * sizeof (coords[0])))) |
| 1601 { |
| 1602 free (coords); |
| 1603 return; |
| 1604 } |
| 1605 |
| 1606 font->dirty |= font->VARIATIONS; |
| 1607 |
| 1548 free (font->coords); | 1608 free (font->coords); |
| 1549 | 1609 |
| 1550 font->coords = coords; | 1610 font->coords = coords; |
| 1551 font->num_coords = coords_length; | 1611 font->num_coords = coords_length; |
| 1552 } | 1612 } |
| 1553 | 1613 |
| 1554 /** | 1614 /** |
| 1555 * hb_font_set_variations: | 1615 * hb_font_set_variations: |
| 1556 * | 1616 * |
| 1557 * Since: 1.4.2 | 1617 * Since: 1.4.2 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1620 if (unlikely (coords_length && !copy)) | 1680 if (unlikely (coords_length && !copy)) |
| 1621 return; | 1681 return; |
| 1622 | 1682 |
| 1623 if (coords_length) | 1683 if (coords_length) |
| 1624 memcpy (copy, coords, coords_length * sizeof (coords[0])); | 1684 memcpy (copy, coords, coords_length * sizeof (coords[0])); |
| 1625 | 1685 |
| 1626 _hb_font_adopt_var_coords_normalized (font, copy, coords_length); | 1686 _hb_font_adopt_var_coords_normalized (font, copy, coords_length); |
| 1627 } | 1687 } |
| 1628 | 1688 |
| 1629 /** | 1689 /** |
| 1630 * hb_font_set_var_coords_normalized: | 1690 * hb_font_get_var_coords_normalized: |
| 1631 * | 1691 * |
| 1632 * Return value is valid as long as variation coordinates of the font | 1692 * Return value is valid as long as variation coordinates of the font |
| 1633 * are not modified. | 1693 * are not modified. |
| 1634 * | 1694 * |
| 1635 * Since: 1.4.2 | 1695 * Since: 1.4.2 |
| 1636 */ | 1696 */ |
| 1637 const int * | 1697 const int * |
| 1638 hb_font_get_var_coords_normalized (hb_font_t *font, | 1698 hb_font_get_var_coords_normalized (hb_font_t *font, |
| 1639 unsigned int *length) | 1699 unsigned int *length) |
| 1640 { | 1700 { |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1764 trampoline_destroy); | 1824 trampoline_destroy); |
| 1765 | 1825 |
| 1766 trampoline_reference (&trampoline->closure); | 1826 trampoline_reference (&trampoline->closure); |
| 1767 hb_font_funcs_set_variation_glyph_func (ffuncs, | 1827 hb_font_funcs_set_variation_glyph_func (ffuncs, |
| 1768 hb_font_get_variation_glyph_trampoline
, | 1828 hb_font_get_variation_glyph_trampoline
, |
| 1769 trampoline, | 1829 trampoline, |
| 1770 trampoline_destroy); | 1830 trampoline_destroy); |
| 1771 } | 1831 } |
| 1772 | 1832 |
| 1773 #endif /* HB_DISABLE_DEPRECATED */ | 1833 #endif /* HB_DISABLE_DEPRECATED */ |
| OLD | NEW |