[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [Devel] losing less when calculating root->units_per_EM
From: |
Tom Kacvinsky |
Subject: |
RE: [Devel] losing less when calculating root->units_per_EM |
Date: |
Sat, 1 Sep 2001 13:40:24 -0400 (EDT) |
OK, I see that instead of the division (1 / tempscale / 1000 ), you are
approching this as 1000 / tempscale, which is 1 less division. I will
add the code presently.
Regards,
Tom
On Wed, 29 Aug 2001, Erik Strik wrote:
> Dear Tom,
>
> I send this mail on behalf of Martin Muskens.
>
> The fonts are indeed originally TrueType fonts that are set to a non-1000-EM
> (indeed 2048 which is the TT standard). This happens with embedded fonts in
> PDF files.
>
> Kind regards,
>
> Erik Strik
> Aurelon
>
> -----Original Message-----
> From: Tom Kacvinsky [mailto:address@hidden
> Sent: dinsdag 28 augustus 2001 16:05
> To: address@hidden
> Subject: Re: [Devel] losing less when calculating root->units_per_EM
>
>
> How is it not precise enough? Is it becuase of the multiple dvisions? Did
> you try this with TT fonts that were autoconverted to Type 1 fonts, so that
> the units per EM is something like 2048? Do you get the correct value for
> that? Etc, etc...
>
> On Tue, 28 Aug 2001, Martin Muskens wrote:
>
> > Hi all,
> >
> > in the file t1load.c the calculation of root->units_per_EM is not precise
> > enough.
> > I think this is a better solution:
> >
> > bye
> > Martin Muskens
> > Aurelon
> >
> >
> > #ifdef AURELON
> > #define Int2Fixed( x ) ( (FT_Fixed)( x ) << 16 )
> > #endif
> >
> > static void
> > parse_font_matrix( T1_Face face,
> > T1_Loader* loader )
> > {
> > T1_ParserRec* parser = &loader->parser;
> > FT_Matrix* matrix = &face->type1.font_matrix;
> > FT_Vector* offset = &face->type1.font_offset;
> > FT_Face root = (FT_Face)&face->root;
> > FT_Fixed temp[6];
> > FT_Fixed temp_scale;
> >
> >
> > if ( matrix->xx || matrix->yx )
> > /* with synthetic fonts, it's possible we get here twice */
> > return;
> >
> > (void)T1_ToFixedArray( parser, 6, temp, 3 );
> >
> > temp_scale = ABS( temp[3] );
> >
> > /* Set Units per EM based on FontMatrix values. We set the value to */
> > /* 1000 / temp_scale, because temp_scale was already multiplied by */
> > /* 1000 (in t1_tofixed, from psobjs.c). */
> >
> > #ifdef AURELON
> > root->units_per_EM = (FT_UShort)( FT_DivFix( Int2Fixed( 1000 ),
> > temp_scale ) >> 16 );
> > #else
> > root->units_per_EM = (FT_UShort)FT_DivFix( 0x10000L,
> > FT_DivFix( temp_scale, 1000
> )
> > );
> > #endif
> >
> > /* we need to scale the values by 1.0/temp_scale */
> > if ( temp_scale != 0x10000L )
> > {
> > temp[0] = FT_DivFix( temp[0], temp_scale );
> > temp[1] = FT_DivFix( temp[1], temp_scale );
> > temp[2] = FT_DivFix( temp[2], temp_scale );
> > temp[4] = FT_DivFix( temp[4], temp_scale );
> > temp[5] = FT_DivFix( temp[5], temp_scale );
> > temp[3] = 0x10000L;
> > }
> >
> > matrix->xx = temp[0];
> > matrix->yx = temp[1];
> > matrix->xy = temp[2];
> > matrix->yy = temp[3];
> >
> > /* note that the offsets must be expressed in integer font units */
> > offset->x = temp[4] >> 16;
> > offset->y = temp[5] >> 16;
> > }
> >
> > _______________________________________________
> > Devel mailing list
> > address@hidden
> > http://www.freetype.org/mailman/listinfo/devel
> >
>
>
> _______________________________________________
> Devel mailing list
> address@hidden
> http://www.freetype.org/mailman/listinfo/devel
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- RE: [Devel] losing less when calculating root->units_per_EM,
Tom Kacvinsky <=