Author: tkreuzer
Date: Sun May 22 17:36:34 2011
New Revision: 51850
URL:
http://svn.reactos.org/svn/reactos?rev=51850&view=rev
Log:
[GDI FONT DRIVER]
- Calculate fxMaxAscender and fxMaxDescender for the FD_DEVICEMETRICS differenly
Modified:
branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/ftfd.h
branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/glyph.c
Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/ftfd.h
URL:
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers…
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/ftfd.h [iso-8859-1]
(original)
+++ branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/ftfd.h [iso-8859-1] Sun May
22 17:36:34 2011
@@ -114,19 +114,22 @@
PFTFD_FACE apface[1];
} FTFD_FILE, *PFTFD_FILE;
-typedef union _FTFD_DEVICEMETRICS
-{
- POINTL aptl[10];
- struct
+typedef struct _FTFD_DEVICEMETRICS
+{
+ union
{
- POINTFIX ptfxMaxAscender;
- POINTFIX ptfxMaxDescender;
- POINTL ptlUnderline1;
- POINTL ptlStrikeout;
- POINTL ptlULThickness;
- POINTL ptlSOThickness;
- POINTL aptlBBox[4];
+ POINTL aptl[8];
+ struct
+ {
+ POINTL ptlUnderline1;
+ POINTL ptlStrikeout;
+ POINTL ptlULThickness;
+ POINTL ptlSOThickness;
+ POINTL aptlBBox[4];
+ };
};
+ FIX fxMaxAscender;
+ FIX fxMaxDescender;
} FTFD_DEVICEMETRICS;
typedef struct _POINTEF
Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/glyph.c
URL:
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers…
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/glyph.c [iso-8859-1]
(original)
+++ branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/glyph.c [iso-8859-1] Sun May
22 17:36:34 2011
@@ -146,6 +146,14 @@
/* Normalize the base vectors and get their length */
efScaleX = FtfdNormalizeBaseVector(&pfont->ptefBase);
efScaleY = FtfdNormalizeBaseVector(&pfont->ptefSide);
+
+ /* Calculate maximum ascender and descender */
+ efTemp = efScaleY;
+ FLOATOBJ_MulLong(&efTemp, pface->ifiex.ifi.fwdWinAscender << 4);
+ pfont->metrics.fxMaxAscender = FLOATOBJ_GetLong(&efTemp);
+ efTemp = efScaleY;
+ FLOATOBJ_MulLong(&efTemp, pface->ifiex.ifi.fwdWinDescender << 4);
+ pfont->metrics.fxMaxDescender = FLOATOBJ_GetLong(&efTemp);
/* The coordinate transformation given by Windows transforms from font
* space to device space. Since we use FT_Set_Char_Size, which allows
@@ -221,10 +229,6 @@
/* Prepare required coordinates in font space */
pmetrics = &pfont->metrics;
- pmetrics->ptfxMaxAscender.x = 0;
- pmetrics->ptfxMaxAscender.y = pface->ifiex.ifi.fwdWinAscender << 4;
- pmetrics->ptfxMaxDescender.x = 0;
- pmetrics->ptfxMaxDescender.y = pface->ifiex.ifi.fwdWinDescender << 4;
pmetrics->ptlUnderline1.x = 0;
pmetrics->ptlUnderline1.y = -pface->ifiex.ifi.fwdUnderscorePosition;
pmetrics->ptlStrikeout.x = 0;
@@ -243,7 +247,7 @@
pmetrics->aptlBBox[3].y = ftface->bbox.yMax;
/* Transform all coordinates into device space */
- if (!XFORMOBJ_bApplyXform(pxo, XF_LTOL, 10, pmetrics->aptl, pmetrics->aptl))
+ if (!XFORMOBJ_bApplyXform(pxo, XF_LTOL, 8, pmetrics->aptl, pmetrics->aptl))
{
WARN("Failed apply coordinate transformation.\n");
EngFreeMem(pfont);
@@ -332,8 +336,8 @@
pfddm->lD = 0;
/* Copy some values from the font structure */
- pfddm->fxMaxAscender = pfont->metrics.ptfxMaxAscender.y;
- pfddm->fxMaxDescender = pfont->metrics.ptfxMaxDescender.y;
+ pfddm->fxMaxAscender = pfont->metrics.fxMaxAscender;
+ pfddm->fxMaxDescender = pfont->metrics.fxMaxDescender;
pfddm->ptlUnderline1 = pfont->metrics.ptlUnderline1;
pfddm->ptlStrikeout = pfont->metrics.ptlStrikeout;
pfddm->ptlULThickness = pfont->metrics.ptlULThickness;