Home | History | Annotate | Download | only in truetype

Lines Matching full:loader

5 /*    TrueType Glyph Loader (body).                                        */
120 tt_get_metrics( TT_Loader loader,
123 TT_Face face = (TT_Face)loader->face;
129 FT_Stream stream = loader->stream;
143 loader->bbox.yMax,
150 loader->left_bearing = left_bearing;
151 loader->advance = advance_width;
152 loader->top_bearing = top_bearing;
153 loader->vadvance = advance_height;
157 loader->exec )
159 loader->exec->sph_tweak_flags = 0;
165 sph_set_tweaks( loader, glyph_index );
169 if ( !loader->linear_def )
171 loader->linear_def = 1;
172 loader->linear = advance_width;
182 tt_get_metrics_incr_overrides( TT_Loader loader,
185 TT_Face face = (TT_Face)loader->face;
200 metrics.bearing_x = loader->left_bearing;
202 metrics.advance = loader->advance;
218 metrics.bearing_y = loader->top_bearing;
219 metrics.advance = loader->vadvance;
232 loader->left_bearing = left_bearing;
233 loader->advance = advance_width;
234 loader->top_bearing = top_bearing;
235 loader->vadvance = advance_height;
237 if ( !loader->linear_def )
239 loader->linear_def = 1;
240 loader->linear = advance_width;
283 TT_Access_Glyph_Frame( TT_Loader loader,
289 FT_Stream stream = loader->stream;
301 loader->cursor = stream->cursor;
302 loader->limit = stream->limit;
309 TT_Forget_Glyph_Frame( TT_Loader loader )
311 FT_Stream stream = loader->stream;
319 TT_Load_Glyph_Header( TT_Loader loader )
321 FT_Byte* p = loader->cursor;
322 FT_Byte* limit = loader->limit;
328 loader->n_contours = FT_NEXT_SHORT( p );
330 loader->bbox.xMin = FT_NEXT_SHORT( p );
331 loader->bbox.yMin = FT_NEXT_SHORT( p );
332 loader->bbox.xMax = FT_NEXT_SHORT( p );
333 loader->bbox.yMax = FT_NEXT_SHORT( p );
335 FT_TRACE5(( " # of contours: %d\n", loader->n_contours ));
336 FT_TRACE5(( " xMin: %4d xMax: %4d\n", loader->bbox.xMin,
337 loader->bbox.xMax ));
338 FT_TRACE5(( " yMin: %4d yMax: %4d\n", loader->bbox.yMin,
339 loader->bbox.yMax ));
340 loader->cursor = p;
577 TT_Load_Composite_Glyph( TT_Loader loader )
580 FT_Byte* p = loader->cursor;
581 FT_Byte* limit = loader->limit;
582 FT_GlyphLoader gloader = loader->gloader;
689 FT_Stream stream = loader->stream;
696 loader->ins_pos = (FT_ULong)( FT_STREAM_POS() +
702 loader->cursor = p;
753 TT_Hint_Glyph( TT_Loader loader,
757 TT_Face face = (TT_Face)loader->face;
761 TT_GlyphZone zone = &loader->zone;
771 if ( loader->glyph->control_len > 0xFFFFL )
775 loader->glyph->control_len ));
777 n_ins = loader->glyph->control_len;
784 loader->exec->GS = ((TT_Size)loader->size)->GS;
790 loader->exec->metrics.x_scale = 1 << 16;
791 loader->exec->metrics.y_scale = 1 << 16;
797 loader->exec->metrics.x_scale =
798 ((TT_Size)loader->size)->metrics.x_scale;
799 loader->exec->metrics.y_scale =
800 ((TT_Size)loader->size)->metrics.y_scale;
820 FT_GlyphLoader gloader = loader->gloader;
824 TT_Set_CodeRange( loader->exec, tt_coderange_glyph,
825 loader->exec->glyphIns, n_ins );
827 loader->exec->is_composite = is_composite;
828 loader->exec->pts = *zone;
830 error = TT_Run_Context( loader->exec );
831 if ( error && loader->exec->pedantic_hinting )
836 ( loader->exec->GS.scan_type << 5 ) | FT_CURVE_TAG_HAS_SCANMODE;
842 loader->pp1 = zone->cur[zone->n_points - 4];
843 loader->pp2 = zone->cur[zone->n_points - 3];
844 loader->pp3 = zone->cur[zone->n_points - 2];
845 loader->pp4 = zone->cur[zone->n_points - 1];
850 if ( loader->exec->sph_tweak_flags & SPH_TWEAK_DEEMBOLDEN )
851 FT_Outline_EmboldenXY( &loader->gloader->current.outline, -24, 0 );
853 else if ( loader->exec->sph_tweak_flags & SPH_TWEAK_EMBOLDEN )
854 FT_Outline_EmboldenXY( &loader->gloader->current.outline, 24, 0 );
873 TT_Process_Simple_Glyph( TT_Loader loader )
875 FT_GlyphLoader gloader = loader->gloader;
886 outline->points[n_points ] = loader->pp1;
887 outline->points[n_points + 1] = loader->pp2;
888 outline->points[n_points + 2] = loader->pp3;
889 outline->points[n_points + 3] = loader->pp4;
900 if ( ((TT_Face)loader->face)->doblend )
903 error = TT_Vary_Apply_Glyph_Deltas( (TT_Face)(loader->face),
904 loader->glyph_index,
913 if ( IS_HINTED( loader->load_flags ) )
915 tt_prepare_zone( &loader->zone, &gloader->current, 0, 0 );
917 FT_ARRAY_COPY( loader->zone.orus, loader->zone.cur,
918 loader->zone.n_points + 4 );
923 TT_Face face = (TT_Face)loader->face;
927 FT_UInt ppem = loader->size->metrics.x_ppem;
946 if ( IS_HINTED( loader->load_flags ) )
951 loader->glyph_index );
953 if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ||
956 x_scale = FT_MulDiv( ((TT_Size)loader->size)->metrics.x_scale,
958 y_scale = ((TT_Size)loader->size)->metrics.y_scale;
976 if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
978 x_scale = ((TT_Size)loader->size)->metrics.x_scale;
979 y_scale = ((TT_Size)loader->size)->metrics.y_scale;
993 loader->pp1 = outline->points[n_points - 4];
994 loader->pp2 = outline->points[n_points - 3];
995 loader->pp3 = outline->points[n_points - 2];
996 loader->pp4 = outline->points[n_points - 1];
1000 if ( IS_HINTED( loader->load_flags ) )
1002 loader->zone.n_points += 4;
1004 error = TT_Hint_Glyph( loader, 0 );
1021 TT_Process_Composite_Component( TT_Loader loader,
1026 FT_GlyphLoader gloader = loader->gloader;
1136 if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )
1138 FT_Fixed x_scale = ((TT_Size)loader->size)->metrics.x_scale;
1139 FT_Fixed y_scale = ((TT_Size)loader->size)->metrics.y_scale;
1173 TT_Process_Composite_Glyph( TT_Loader loader,
1182 outline = &loader->gloader->base.outline;
1185 error = FT_GLYPHLOADER_CHECK_POINTS( loader->gloader,
1191 outline->points[outline->n_points ] = loader->pp1;
1192 outline->points[outline->n_points + 1] = loader->pp2;
1193 outline->points[outline->n_points + 2] = loader->pp3;
1194 outline->points[outline->n_points + 3] = loader->pp4;
1204 FT_Stream stream = loader->stream;
1211 if ( FT_STREAM_SEEK( loader->ins_pos ) ||
1218 max_ins = ((TT_Face)loader->face)->max_profile.maxSizeOfInstructions;
1223 if ( (FT_Int)n_ins > loader->byte_len )
1227 n_ins, loader->byte_len ));
1231 tmp = loader->exec->glyphSize;
1232 error = Update_Max( loader->exec->memory,
1235 (void*)&loader->exec->glyphIns,
1238 loader->exec->glyphSize = (FT_UShort)tmp;
1245 if ( FT_STREAM_READ( loader->exec->glyphIns, n_ins ) )
1248 loader->glyph->control_data = loader->exec->glyphIns;
1249 loader->glyph->control_len = n_ins;
1254 tt_prepare_zone( &loader->zone, &loader->gloader->base,
1259 for ( i = 0; i < loader->zone.n_points; i++ )
1260 loader->zone.tags[i] &= ~FT_CURVE_TAG_TOUCH_BOTH;
1262 loader->zone.n_points += 4;
1264 return TT_Hint_Glyph( loader, 1 );
1354 #define TT_LOADER_SET_PP( loader ) \
1357 FT_Bool subpixel_hinting_ = loader->exec \
1358 ? loader->exec->subpixel_hinting \
1360 FT_Bool grayscale_ = loader->exec \
1361 ? loader->exec->grayscale \
1367 (loader)->pp1.x = (loader)->bbox.xMin - (loader)->left_bearing; \
1368 (loader)->pp1.y = 0; \
1369 (loader)->pp2.x = (loader)->pp1.x + (loader)->advance; \
1370 (loader)->pp2.y = 0; \
1372 (loader)->pp3.x = use_aw_2_ ? (loader)->advance / 2 : 0; \
1373 (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing; \
1374 (loader)->pp4.x = use_aw_2_ ? (loader)->advance / 2 : 0; \
1375 (loader)->pp4.y = (loader)->pp3.y - (loader)->vadvance; \
1380 #define TT_LOADER_SET_PP( loader ) \
1383 (loader)->pp1.x = (loader)->bbox.xMin - (loader)->left_bearing; \
1384 (loader)->pp1.y = 0; \
1385 (loader)->pp2.x = (loader)->pp1.x + (loader)->advance; \
1386 (loader)->pp2.y = 0; \
1388 (loader)->pp3.x = 0; \
1389 (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing; \
1390 (loader)->pp4.x = 0; \
1391 (loader)->pp4.y = (loader)->pp3.y - (loader)->vadvance; \
1407 load_truetype_glyph( TT_Loader loader,
1415 TT_Face face = (TT_Face)loader->face;
1416 FT_GlyphLoader gloader = loader->gloader;
1444 loader->glyph_index = glyph_index;
1446 if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
1448 x_scale = ((TT_Size)loader->size)->metrics.x_scale;
1449 y_scale = ((TT_Size)loader->size)->metrics.y_scale;
1464 /* the loader stream to a memory stream reading the data returned */
1476 loader->byte_len = glyph_data.length;
1483 loader->stream = &inc_stream;
1490 (FT_UInt*)&loader->byte_len );
1492 if ( loader->byte_len > 0 )
1496 if ( !loader->glyf_offset &&
1499 if ( !loader->glyf_offset )
1507 error = face->access_glyph_frame( loader, glyph_index,
1508 loader->glyf_offset + offset,
1509 (FT_UInt)loader->byte_len );
1516 error = face->read_glyph_header( loader );
1523 error = tt_get_metrics( loader, glyph_index );
1531 if ( loader->byte_len == 0 || loader->n_contours == 0 )
1533 loader->bbox.xMin = 0;
1534 loader->bbox.xMax = 0;
1535 loader->bbox.yMin = 0;
1536 loader->bbox.yMax = 0;
1538 error = tt_get_metrics( loader, glyph_index );
1547 TT_LOADER_SET_PP( loader );
1550 tt_get_metrics_incr_overrides( loader, glyph_index );
1555 if ( ((TT_Face)(loader->face))->doblend )
1565 points[0].x = loader->pp1.x;
1566 points[0].y = loader->pp1.y;
1567 points[1].x = loader->pp2.x;
1568 points[1].y = loader->pp2.y;
1570 points[2].x = loader->pp3.x;
1571 points[2].y = loader->pp3.y;
1572 points[3].x = loader->pp4.x;
1573 points[3].y = loader->pp4.y;
1582 error = TT_Vary_Apply_Glyph_Deltas( (TT_Face)(loader->face),
1589 loader->pp1.x = points[0].x;
1590 loader->pp1.y = points[0].y;
1591 loader->pp2.x = points[1].x;
1592 loader->pp2.y = points[1].y;
1594 loader->pp3.x = points[2].x;
1595 loader->pp3.y = points[2].y;
1596 loader->pp4.x = points[3].x;
1597 loader->pp4.y = points[3].y;
1604 if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
1606 loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
1607 loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
1610 loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
1611 loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
1612 loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
1613 loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
1622 TT_LOADER_SET_PP( loader );
1625 tt_get_metrics_incr_overrides( loader, glyph_index );
1634 if ( loader->n_contours > 0 )
1636 error = face->read_simple_glyph( loader );
1641 face->forget_glyph_frame( loader );
1644 error = TT_Process_Simple_Glyph( loader );
1656 else if ( loader->n_contours == -1 )
1667 error = face->read_composite_glyph( loader );
1672 ins_pos = loader->ins_pos;
1675 face->forget_glyph_frame( loader );
1718 points[i].x = loader->pp1.x;
1719 points[i].y = loader->pp1.y;
1724 points[i].x = loader->pp2.x;
1725 points[i].y = loader->pp2.y;
1730 points[i].x = loader->pp3.x;
1731 points[i].y = loader->pp3.y;
1736 points[i].x = loader->pp4.x;
1737 points[i].y = loader->pp4.y;
1765 loader->pp1.x = points[i + 0].x;
1766 loader->pp1.y = points[i + 0].y;
1767 loader->pp2.x = points[i + 1].x;
1768 loader->pp2.y = points[i + 1].y;
1770 loader->pp3.x = points[i + 2].x;
1771 loader->pp3.y = points[i + 2].y;
1772 loader->pp4.x = points[i + 3].x;
1773 loader->pp4.y = points[i + 3].y;
1788 if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
1790 loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
1791 loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
1794 loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
1795 loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
1796 loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
1797 loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
1803 if ( loader->load_flags & FT_LOAD_NO_RECURSE )
1806 loader->glyph->format = FT_GLYPH_FORMAT_COMPOSITE;
1823 FT_Stream old_stream = loader->stream;
1824 FT_Int old_byte_len = loader->byte_len;
1841 pp[0] = loader->pp1;
1842 pp[1] = loader->pp2;
1843 pp[2] = loader->pp3;
1844 pp[3] = loader->pp4;
1848 error = load_truetype_glyph( loader,
1861 loader->pp1 = pp[0];
1862 loader->pp2 = pp[1];
1863 loader->pp3 = pp[2];
1864 loader->pp4 = pp[3];
1878 error = TT_Process_Composite_Component( loader,
1886 loader->stream = old_stream;
1887 loader->byte_len = old_byte_len;
1890 loader->ins_pos = ins_pos;
1891 if ( IS_HINTED( loader->load_flags ) &&
1897 error = TT_Process_Composite_Glyph( loader,
1919 face->forget_glyph_frame( loader );
1935 compute_glyph_metrics( TT_Loader loader,
1938 TT_Face face = (TT_Face)loader->face;
1945 TT_GlyphSlot glyph = loader->glyph;
1946 TT_Size size = (TT_Size)loader->size;
1950 if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
1956 bbox = loader->bbox;
1960 glyph->linearHoriAdvance = loader->linear;
1964 glyph->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
1968 IS_HINTED( loader->load_flags ) )
1984 ignore_x_mode = FT_BOOL( FT_LOAD_TARGET_MODE( loader->load_flags ) !=
1988 ( ( ignore_x_mode && loader->exec->compatible_widths ) ||
2019 top = (FT_Short)FT_DivFix( loader->pp3.y - bbox.yMax,
2022 if ( loader->pp3.y <= loader->pp4.y )
2025 advance = (FT_UShort)FT_DivFix( loader->pp3.y - loader->pp4.y,
2089 if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )
2171 tt_loader_init( TT_Loader loader,
2189 FT_MEM_ZERO( loader, sizeof ( TT_LoaderRec ) );
2373 loader->exec = exec;
2374 loader->instructions = exec->glyphIns;
2386 loader->glyf_offset = 0;
2395 loader->glyf_offset = 0;
2402 loader->glyf_offset = FT_STREAM_POS();
2405 /* get face's glyph loader */
2408 FT_GlyphLoader gloader = glyph->internal->loader;
2412 loader->gloader = gloader;
2415 loader->load_flags = (FT_ULong)load_flags;
2417 loader->face = (FT_Face)face;
2418 loader->size = (FT_Size)size;
2419 loader->glyph = (FT_GlyphSlot)glyph;
2420 loader->stream = stream;
2460 TT_LoaderRec loader;
2480 (void)tt_loader_init( &loader, size, glyph, load_flags, TRUE );
2481 (void)load_truetype_glyph( &loader, glyph_index, 0, TRUE );
2482 glyph->linearHoriAdvance = loader.linear;
2483 glyph->linearVertAdvance = loader.vadvance;
2510 error = tt_loader_init( &loader, size, glyph, load_flags, FALSE );
2519 error = load_truetype_glyph( &loader, glyph_index, 0, FALSE );
2524 glyph->num_subglyphs = loader.gloader->base.num_subglyphs;
2525 glyph->subglyphs = loader.gloader->base.subglyphs;
2529 glyph->outline = loader.gloader->base.outline;
2536 if ( loader.pp1.x )
2537 FT_Outline_Translate( &glyph->outline, -loader.pp1.x, 0 );
2544 if ( loader.exec->GS.scan_control )
2547 switch ( loader.exec->GS.scan_type )
2574 error = compute_glyph_metrics( &loader, glyph_index );