freetype
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ft] Extracting sub-glyph transformation


From: Kevin Rogovin
Subject: Re: [ft] Extracting sub-glyph transformation
Date: Fri, 31 Aug 2018 10:35:18 +0300

Hi,

 I think the fog is clearing some what but I am not sure I have this right,
the key comment being

[code]
      /* match l-th point of the newly loaded component to the k-th point */
      /* of the previously loaded components.
            */
[/code]

so in this case, it means that p1 is the base_points[arg2] where
base_points is the points of the outline of the parent glyph and p2 is
sub_glyph[arg1] where sub_glyph is the points of the current sub-glyph. Is
that correct?

-Kevin

P.S. I still would love to have a Freetype function to grab/compute those
translation since the code is quite involved and tricky.


On Fri, Aug 31, 2018 at 10:21 AM Kevin Rogovin <address@hidden>
wrote:

> Hi,
>
> Thankyuo for the fast reply. The part that I am having trickiness is when
> flags has the bit ARGS_ARE_XY_VALUES as down; then the values of args1 and
> arg2 are indices into an array, the relevant code I found is
> src/truetype/ttgload.c, function TT_Process_Composite_Component():
>
> [code]
>       FT_UInt     num_points = (FT_UInt)gloader->base.outline.n_points;
>       FT_UInt     k = (FT_UInt)subglyph->arg1;
>       FT_UInt     l = (FT_UInt)subglyph->arg2;
>       FT_Vector*  p1;
>       FT_Vector*  p2;
>
>
>       /* match l-th point of the newly loaded component to the k-th point
> */
>       /* of the previously loaded components.
>  */
>
>       /* change to the point numbers used by our outline */
>       k += start_point;
>       l += num_base_points;
>       if ( k >= num_base_points ||
>            l >= num_points      )
>         return FT_THROW( Invalid_Composite );
>
>       p1 = gloader->base.outline.points + k;
>       p2 = gloader->base.outline.points + l;
>
>       x = p1->x - p2->x;
>       y = p1->y - p2->y;
> [/code]
>
> I see that  arg1 and arg2 function as indices when the bit
> ARGS_ARE_XY_VALUES are down, but I don't know how to get those vertices
> from the index values. And that is likely the easy part... for then I need
> to copy the tricky code to adjust the translations too.
>
> Would it be possible to add a new entry point to FreeType that returns the
> computed translation? Users will still likely want the flags (for example
> to have a fast check if the FT_Matrix is identity, scaling only or 2x2).
> Related question: are the values of the FT_Matrix returned by
> FT_GetSubGlyphInfo() in units of the parent glyph?
>
> Best Regards,
>  -Kevin Rogovin
>
> On Fri, Aug 31, 2018 at 8:00 AM Werner LEMBERG <address@hidden> wrote:
>
>>
>> > I am trying to load glyph’s geometric data with FT_LOAD_NO_RECURSE.
>> > The entry point FT_GetSubGlyphInfo() has almost what I needed, but
>> > not quite.  It does provide the 2x2 matrix, but not the translation
>> > (at least when I read the docs and FreeType source code).  [...]
>>
>> The FreeType documentation explicitly refers to the OpenType
>> specification; for clarity, I've now added a link.
>>
>> I hope this helps.  It's quite tricky, indeed.
>>
>>
>>    Werner
>>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]