ID Number: Q72460
3.00
WINDOWS
Summary:
When a font is italicized under Windows version 3.0, the dimensions of
the character cells change because the descender of the character may
require more space at the left edge of the character cell.
Because the character cell is larger, the relative position of the
baseline of the character within the cell changes. The baseline itself
is not affected, but when a character is drawn italic and nonitalic
with the TextOut() function at the same x coordinate, the baseline of
the italic font is shifted a few pixels to the right.
To account for this shift, calculate the slope of the font -- ascent
divided by overhang -- after italicization. Using this slope, the
number of pixels by which the character cell was expanded left is
equal to descent divided by slope, or (descent times overhang) divided
by ascent. This value can be subtracted from the x coordinate in the
TextOut() call to align the baselines.
More Information:
Consider the character "f". In a normal character cell, it would
appear as:
^ ........
| ........
| ...xx...
| ..x..x..
Ascent| ..x.....
| ..xx....
| ..x.....
| ..x.....
| ..x.....
v .xxx....<-baseline
Descent^ ........
v ........
When italicized, the descent is shifted to the left and the ascent is
shifted to the right, along a line of constant slope equal to the
ascent divided by the overhang:
^ ............
| ............
| .......xx...
| ......x..x..
Ascent| .....x......
| .....xx.....
| ....x.......
| ....x.......
| ...x........
v ..xxx.......<-baseline
Descent^ ............
v ............
<->
Overhang
Because the descent of the character is shifted left according to the
slope of the line, this particular character cell has been expanded
one pixel left, which has the effect of shifting the baseline in the
character cell one pixel right.
Since the overhang represents the amount the ascent of the character
is shifted right in the cell, the corresponding shift of the descent
can be calculated and can be called the "underhang":
descent * overhang
underhang = --------------------
ascent
When calling the TextOut() function, use the normal x-coordinate where
the text should be drawn, but subtract the underhang. This places the
baseline of the character exactly where it would be if the character
were not italic.