1416 1417 loader->current.num_subglyphs = 2; 1418 1419 goto exit; 1420 } 1421 1422 /* First load `bchar' in builder */ 1423 /* now load the unscaled outline */ 1424 1425 /* prepare loader */ 1426 FT_GlyphLoader_Prepare( decoder->builder.loader ); 1427 1428 error2 = cf2_getT1SeacComponent( decoder, 1429 (FT_UInt)bchar_index, 1430 &component ); 1431 if ( error2 ) 1432 { 1433 lastError = error2; /* pass FreeType error through */ 1434 goto exit; 1435 } 1436 cf2_interpT2CharString( font, 1437 &component, 1438 callbacks, 1439 translation, 1440 TRUE, 1441 0, 1442 0, 1443 &dummyWidth ); 1444 cf2_freeT1SeacComponent( decoder, &component ); 1445 1446 /* save the left bearing and width of the base */ 1447 /* character as they will be erased by the next load */ 1448 1449 left_bearing = *decoder->builder.left_bearing; 1450 advance = *decoder->builder.advance; 1451 1452 decoder->builder.left_bearing->x = 0; 1453 decoder->builder.left_bearing->y = 0; 1454 1455 /* Now load `achar' on top of */ 1456 /* the base outline */ 1457 1458 error2 = cf2_getT1SeacComponent( decoder, 1459 (FT_UInt)achar_index, 1460 &component ); 1461 if ( error2 ) 1462 { 1463 lastError = error2; /* pass FreeType error through */ 1464 goto exit; 1465 } 1466 cf2_interpT2CharString( font, 1467 &component, 1468 callbacks, 1469 translation, 1470 TRUE, 1471 adx - asb, 1472 ady, 1473 &dummyWidth ); 1474 cf2_freeT1SeacComponent( decoder, &component ); 1475 1476 /* restore the left side bearing and */ 1477 /* advance width of the base character */ 1478 1479 *decoder->builder.left_bearing = left_bearing; 1480 *decoder->builder.advance = advance; 1481 1482 goto exit; 1483 } 1484 break; 1485 1486 case cf2_escSBW: 1487 if ( !font->isT1 ) 1488 FT_TRACE4(( " unknown op (12, %d)\n", op2 )); 1489 else 1490 { 1491 CF2_Fixed lsb_x, lsb_y; 1492 PS_Builder* builder; 1493 1494 1495 FT_TRACE4(( " sbw" )); 1496 1497 builder = &decoder->builder; | 1416 1417 loader->current.num_subglyphs = 2; 1418 1419 goto exit; 1420 } 1421 1422 /* First load `bchar' in builder */ 1423 /* now load the unscaled outline */ 1424 1425 /* prepare loader */ 1426 FT_GlyphLoader_Prepare( decoder->builder.loader ); 1427 1428 error2 = cf2_getT1SeacComponent( decoder, 1429 (FT_UInt)bchar_index, 1430 &component ); 1431 if ( error2 ) 1432 { 1433 lastError = error2; /* pass FreeType error through */ 1434 goto exit; 1435 } 1436 1437 /* save the left bearing and width of the SEAC */ 1438 /* glyph as they will be erased by the next load */ 1439 1440 left_bearing = *decoder->builder.left_bearing; 1441 advance = *decoder->builder.advance; 1442 1443 cf2_interpT2CharString( font, 1444 &component, 1445 callbacks, 1446 translation, 1447 TRUE, 1448 0, 1449 0, 1450 &dummyWidth ); 1451 cf2_freeT1SeacComponent( decoder, &component ); 1452 1453 /* If the SEAC glyph doesn't have a (H)SBW of its */ 1454 /* own use the values from the base glyph. */ 1455 1456 if ( !haveWidth ) 1457 { 1458 left_bearing = *decoder->builder.left_bearing; 1459 advance = *decoder->builder.advance; 1460 } 1461 1462 decoder->builder.left_bearing->x = 0; 1463 decoder->builder.left_bearing->y = 0; 1464 1465 /* Now load `achar' on top of */ 1466 /* the base outline */ 1467 1468 error2 = cf2_getT1SeacComponent( decoder, 1469 (FT_UInt)achar_index, 1470 &component ); 1471 if ( error2 ) 1472 { 1473 lastError = error2; /* pass FreeType error through */ 1474 goto exit; 1475 } 1476 cf2_interpT2CharString( font, 1477 &component, 1478 callbacks, 1479 translation, 1480 TRUE, 1481 adx - asb, 1482 ady, 1483 &dummyWidth ); 1484 cf2_freeT1SeacComponent( decoder, &component ); 1485 1486 /* restore the left side bearing and advance width */ 1487 /* of the SEAC glyph or base character (saved above) */ 1488 1489 *decoder->builder.left_bearing = left_bearing; 1490 *decoder->builder.advance = advance; 1491 1492 goto exit; 1493 } 1494 break; 1495 1496 case cf2_escSBW: 1497 if ( !font->isT1 ) 1498 FT_TRACE4(( " unknown op (12, %d)\n", op2 )); 1499 else 1500 { 1501 CF2_Fixed lsb_x, lsb_y; 1502 PS_Builder* builder; 1503 1504 1505 FT_TRACE4(( " sbw" )); 1506 1507 builder = &decoder->builder; |