< prev index next >

src/java.desktop/share/native/libfreetype/src/psaux/psintrp.c

Print this page




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;


< prev index next >