[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Initial pen position in freetype?
From: |
Andrew Tomazos |
Subject: |
Re: Initial pen position in freetype? |
Date: |
Fri, 31 Jul 2020 08:31:55 +1000 |
For the record I ended up using as initial pen position:
pen.x = 0;
pen.y = -face->size->metrics.ascender;
This seems to be the appropriate minimal border to the topleft of the
origin of the first glyph.
Further, using face->size->metrics.descender past the last baseline (origin
of the last glyph), for the bottom border. And using the x pen position
after advancing (.advance) past the origin of the rightmost glyph as the
minimal righthand border.
On Wed, Jul 22, 2020 at 8:55 PM Andrew Tomazos <andrewtomazos@gmail.com>
wrote:
>
>
> On Wed, Jul 22, 2020 at 12:36 AM Werner LEMBERG <wl@gnu.org> wrote:
>
>>
>> > After drawing a glyph with freetype the pen is advanced as follows:
>> >
>> > pen.x += face->glyph->advance.x;
>> > pen.y += face->glyph->advance.y;
>> >
>> > (possibly plus a kerning delta)
>> >
>> > But my question is, how do you set the initial pen position of the
>> > first character, relative to the upper left bound of the drawing
>> > surface?
>>
>> Please have a look into the example programs, for example
>>
>> https://www.freetype.org/freetype2/docs/tutorial/example1.c
>>
>> If this doesn't answer your question please go into more detail.
>>
>
> Hi Werner,
>
> Thanks for responding. In example1.c the initial pen position is set as
> follows:
>
> /* the pen position in 26.6 cartesian space coordinates; */
> /* start at (300,200) relative to the upper left corner */
> pen.x = 300 * 64;
> pen.y = ( target_height - 200 ) * 64;
>
> which is just picking an arbitrary point (300,200) within the image to
> place the origin of the first glyph.
>
> My question is: rather than (300,200), is there some
> "typographically-correct" point if we want the text to appear at the upper
> left of the image? Or, put another way, what is the minimal margin to the
> left and above the origin of the first glyph?
>
> Here is a list of the metrics I am collecting when the face size is set:
>
> ascender = FT_MulFix( face->ascender, face->size->metrics.y_scale );
> descender = FT_MulFix( face->descender, face->size->metrics.y_scale );
> height = FT_MulFix( face->height, face->size->metrics.y_scale );
> max_advance_width = FT_MulFix(face->max_advance_width,
> face->size->metrics.x_scale);
> max_advance_height = FT_MulFix(face->max_advance_height,
> face->size->metrics.y_scale);
> bbox_xMin = FT_MulFix(face->bbox.xMin, face->size->metrics.x_scale);
> bbox_xMax = FT_MulFix(face->bbox.xMax, face->size->metrics.x_scale);
> bbox_yMin = FT_MulFix(face->bbox.yMin, face->size->metrics.y_scale);
> bbox_yMax = FT_MulFix(face->bbox.yMax, face->size->metrics.y_scale);
> em_width = FT_MulFix(face->units_per_EM, face->size->metrics.x_scale);
> em_height = FT_MulFix(face->units_per_EM, face->size->metrics.y_scale);
>
> (`height` for example is how far to advance downward to the next line on
> newline)
>
> My current wild-ass guess is something like `ascender` down and `em_width`
> across ? Is it clear what I am asking?
>
> Thanks,
> Andrew.
>
>
- Re: Initial pen position in freetype?, (continued)
- Re: Initial pen position in freetype?, Lawrence D'Oliveiro, 2020/07/20
- Re: Initial pen position in freetype?, Andrew Tomazos, 2020/07/20
- Re: Initial pen position in freetype?, Lawrence D'Oliveiro, 2020/07/20
- Re: Initial pen position in freetype?, Andrew Tomazos, 2020/07/21
- Re: Initial pen position in freetype?, Andrew Tomazos, 2020/07/21
- Re: Initial pen position in freetype?, Lawrence D'Oliveiro, 2020/07/21
- Re: Initial pen position in freetype?, Andrew Tomazos, 2020/07/21
- Re: Initial pen position in freetype?, Derek Nylen, 2020/07/21
Re: Initial pen position in freetype?, Werner LEMBERG, 2020/07/21