Author: tkreuzer
Date: Mon May 16 11:50:43 2011
New Revision: 51777

URL: http://svn.reactos.org/svn/reactos?rev=51777&view=rev
Log:
[GDI FONT DRIVER]
- Calculate fxMaxAscender and fxMaxDescender of FD_DEVICEMETRICS from 
usWinAscender / usWinDescender in the OS/2 table of the font, instead of from 
the bounding box. This fixes problems with overwritten lines in fontview
- a little cleanup

Modified:
    branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/font.c
    branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/ftfd.h
    branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/glyph.c
    branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/todo.txt
    branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.h

Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/font.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/font.c?rev=51777&r1=51776&r2=51777&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/font.c 
[iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/font.c 
[iso-8859-1] Mon May 16 11:50:43 2011
@@ -145,17 +145,6 @@
     pifi->cKerningPairs = 0;
     pifi->ulPanoseCulture = FM_PANOSE_CULTURE_LATIN;
 
-    pifi->panose.bFamilyType = PAN_FAMILY_TEXT_DISPLAY;
-    pifi->panose.bSerifStyle = PAN_ANY;
-    pifi->panose.bWeight = PAN_ANY;
-    pifi->panose.bProportion = PAN_ANY;
-    pifi->panose.bContrast = PAN_ANY;
-    pifi->panose.bStrokeVariation = PAN_ANY;
-    pifi->panose.bArmStyle = PAN_ANY;
-    pifi->panose.bLetterform = PAN_ANY;
-    pifi->panose.bMidline = PAN_ANY;
-    pifi->panose.bXHeight = PAN_ANY;
-
     /* Try to get OS/2 TrueType or OpenType metrics */
     if (!FtfdGetWinMetrics(pface, pifi))
     {
@@ -183,7 +172,6 @@
         pifi->fwdTypoAscender = ftface->ascender;
         pifi->fwdTypoDescender = ftface->descender;
         pifi->fwdTypoLineGap = ftface->units_per_EM / 10;
-        pifi->fwdAveCharWidth = 0;
         pifi->fwdCapHeight = 0;
         pifi->fwdXHeight = 0;
         pifi->fwdSubscriptXSize = 0;
@@ -199,6 +187,17 @@
         /* Special characters (first and last char are already enumerated) */
         pifi->wcDefaultChar = 0x0020;
         pifi->wcBreakChar = 0x0020;
+
+        pifi->panose.bFamilyType = PAN_FAMILY_TEXT_DISPLAY;
+        pifi->panose.bSerifStyle = PAN_ANY;
+        pifi->panose.bWeight = PAN_ANY;
+        pifi->panose.bProportion = PAN_ANY;
+        pifi->panose.bContrast = PAN_ANY;
+        pifi->panose.bStrokeVariation = PAN_ANY;
+        pifi->panose.bArmStyle = PAN_ANY;
+        pifi->panose.bLetterform = PAN_ANY;
+        pifi->panose.bMidline = PAN_ANY;
+        pifi->panose.bXHeight = PAN_ANY;
 
         *(DWORD*)&pifi->achVendId = '0000';
     }

Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/ftfd.h
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/ftfd.h?rev=51777&r1=51776&r2=51777&view=diff
==============================================================================
--- 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] Mon May 16 11:50:43 2011
@@ -143,7 +143,7 @@
     FTFD_DEVICEMETRICS metrics;
     POINTEF ptefBase;
     POINTEF ptefSide;
-    ULONG xScale;
+    SIZEL sizlScale;
     HGLYPH hgSelected;
     ULONG cjSelected;
     UCHAR jBpp;

Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/glyph.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/glyph.c?rev=51777&r1=51776&r2=51777&view=diff
==============================================================================
--- 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] Mon May 16 11:50:43 2011
@@ -154,13 +154,15 @@
      * multiply with 64. */
     FLOATOBJ_MulLong(&efScaleX, 64 * pface->ifiex.ifi.fwdUnitsPerEm * 72);
     FLOATOBJ_DivLong(&efScaleX, pfo->sizLogResPpi.cx);
+    pfont->sizlScale.cx = FLOATOBJ_GetLong(&efScaleX);
     FLOATOBJ_MulLong(&efScaleY, 64 * pface->ifiex.ifi.fwdUnitsPerEm * 72);
     FLOATOBJ_DivLong(&efScaleY, pfo->sizLogResPpi.cy);
+    pfont->sizlScale.cy = FLOATOBJ_GetLong(&efScaleY);
 
     /* Set the x and y character size for the font */
     fterror = FT_Set_Char_Size(ftface,
-                               FLOATOBJ_GetLong(&efScaleX),
-                               FLOATOBJ_GetLong(&efScaleY),
+                               pfont->sizlScale.cx,
+                               pfont->sizlScale.cy,
                                pfo->sizLogResPpi.cx,
                                pfo->sizLogResPpi.cy);
     if (fterror)
@@ -219,9 +221,9 @@
     /* Prepare required coordinates in font space */
     pmetrics = &pfont->metrics;
     pmetrics->ptfxMaxAscender.x = 0;
-    pmetrics->ptfxMaxAscender.y = ftface->bbox.yMax << 4; // FIXME: not exact
+    pmetrics->ptfxMaxAscender.y = pface->ifiex.ifi.fwdWinAscender << 4;
     pmetrics->ptfxMaxDescender.x = 0;
-    pmetrics->ptfxMaxDescender.y = -ftface->bbox.yMin << 4; // FIXME: not exact
+    pmetrics->ptfxMaxDescender.y = pface->ifiex.ifi.fwdWinDescender << 4;
     pmetrics->ptlUnderline1.x = 0;
     pmetrics->ptlUnderline1.y = -pface->ifiex.ifi.fwdUnderscorePosition;
     pmetrics->ptlStrikeout.x = 0;
@@ -245,7 +247,8 @@
     if (pmetrics->ptlULThickness.y <= 0) pmetrics->ptlULThickness.y = 1;
     if (pmetrics->ptlSOThickness.y <= 0) pmetrics->ptlSOThickness.y = 1;
 
-    //TRACE("Created font of size %ld (%ld)\n", yScale, (yScale+32)/64);
+    TRACE("Created font of size %ld (%ld)\n",
+          pfont->sizlScale.cy, (pfont->sizlScale.cy+32)/64);
     //__debugbreak();
 
     /* Set the pvProducer member of the fontobj */
@@ -339,6 +342,8 @@
         pfddm->lMinD = 0;
     }
 
+    TRACE("pfddm->fxMaxAscender=%ld, yScale=%ld, height=%ld\n",
+          pfddm->fxMaxAscender, pfont->sizlScale.cy, 
(pfont->sizlScale.cy+32)/64);
 //__debugbreak();
 
     /* Return the size of the structure */
@@ -400,14 +405,18 @@
         pgd->fxAB = pgd->fxA + ftglyph->metrics.height;
     }
 
+    /* D is the glyph advance width */
     pgd->fxD = ftglyph->advance.x / 4; // should be projected on the x-axis
 
-    pgd->fxInkBottom = 0;
-    pgd->fxInkTop = pgd->fxInkBottom + (ftglyph->bitmap.rows << 4);
+    /* This is the box in which the bitmap fits */
     pgd->rclInk.left = ftglyph->bitmap_left;
     pgd->rclInk.top = -ftglyph->bitmap_top;
     pgd->rclInk.right = pgd->rclInk.left + ftglyph->bitmap.width;
     pgd->rclInk.bottom = pgd->rclInk.top + ftglyph->bitmap.rows;
+
+    /* FIX representation of bitmap top and bottom */
+    pgd->fxInkBottom = (-pgd->rclInk.bottom) << 4;
+    pgd->fxInkTop = pgd->rclInk.top << 4;
 
     /* Make the bitmap at least 1x1 pixel */
     if (ftglyph->bitmap.width == 0) pgd->rclInk.right++;
@@ -418,8 +427,6 @@
     pgd->ptqD.x.HighPart = 0;
     pgd->ptqD.y.LowPart = 0;
     pgd->ptqD.y.HighPart = 0;
-    //pgd->ptqD.x.QuadPart = 0;
-    //pgd->ptqD.y.QuadPart = 0;
 //__debugbreak();
 }
 
@@ -441,7 +448,6 @@
     ULONG ulRows, ulDstDelta, ulSrcDelta;
     PBYTE pjDstLine, pjSrcLine;
 
-
     pjDstLine = pjDest;
     ulDstDelta = (ftbitmap->width*4 + 7) / 8;
 
@@ -505,9 +511,9 @@
     else
         FtfdCopyBitmap1Bpp(pgb->aj, &ftglyph->bitmap);
 
-    TRACE("QueryGlyphBits hg=%lx, (%ld,%ld) cjSize=%ld, need %ld\n",
-          hg, pgb->sizlBitmap.cx, pgb->sizlBitmap.cy, cjSize,
-          GLYPHBITS_SIZE(pgb->sizlBitmap.cx, pgb->sizlBitmap.cy, pfont->jBpp));
+    //TRACE("QueryGlyphBits hg=%lx, (%ld,%ld) cjSize=%ld, need %ld\n",
+    //      hg, pgb->sizlBitmap.cx, pgb->sizlBitmap.cy, cjSize,
+    //      GLYPHBITS_SIZE(pgb->sizlBitmap.cx, pgb->sizlBitmap.cy, 
pfont->jBpp));
 
 }
 
@@ -554,8 +560,8 @@
 {
     PFTFD_FONT pfont = FtfdGetFontInstance(pfo);
 
-    TRACE("FtfdQueryFontData, iMode=%ld, hg=%lx, pgd=%p, pv=%p, cjSize=%ld\n",
-          iMode, hg, pgd, pv, cjSize);
+    //TRACE("FtfdQueryFontData, iMode=%ld, hg=%lx, pgd=%p, pv=%p, 
cjSize=%ld\n",
+    //      iMode, hg, pgd, pv, cjSize);
 
     switch (iMode)
     {

Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/todo.txt
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/todo.txt?rev=51777&r1=51776&r2=51777&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/todo.txt 
[iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/todo.txt 
[iso-8859-1] Mon May 16 11:50:43 2011
@@ -31,21 +31,21 @@
 
 internal interface
 -------------------
-- FtfdInitIfiMetrics: 70% done
+- FtfdInitIfiMetrics: 80% done
     - handle other font types than TTF/OTF
     - fix fwdLowestPPEm, fwdMacLineGap, ptlBaseline, ptlAspect, ptlCaret
     - cKerningPairs from atmfd is bigger, ulPanoseCulture
     - check fwdMacAscender, fwdMacDescender
     - Check jWinPitchandFamily (from OS/2 table, Apolonia: 0,0->0x12)
-    - chLastChar: hardcoded 0xff ?
     - fix fwdUnderscorePosition
 
 - FtfdInitGlyphSet: 100% done
-- FtfdInitKerningPairs: unimplemented, later
+- FtfdInitKerningPairs: 90% done
+    - Should we do complete glyph -> unicode expansion?
+
 - FtfdDestroyFace: 100% done
 
-- FtfdCreateFontInstance: 90%
-    - handle XFORM (create a matrix and set freetype xform)
+- FtfdCreateFontInstance: 95%
 - FtfdGetFontInstance: 100% done
 - FtfdQueryMaxExtents: 90% done
 

Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.h
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.h?rev=51777&r1=51776&r2=51777&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.h 
[iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.h 
[iso-8859-1] Mon May 16 11:50:43 2011
@@ -44,6 +44,27 @@
     TT_TABLE_ENTRY aTableEntries[1];
 
 } TT_FILE_HEADER, *PTT_FILE_HEADER;
+
+typedef struct _TT_TABLE_HEAD
+{
+    ULONG ulVersion;
+    ULONG fontRevision;
+    ULONG checkSumAdjustment;
+    ULONG magicNumber;
+    USHORT flags;
+    USHORT unitsPerEm;
+    ULONGLONG created;
+    ULONGLONG modified;
+    SHORT xMin;
+    SHORT yMin;
+    SHORT xMax;
+    SHORT yMax;
+    USHORT macStyle;
+    USHORT lowestRecPPEM;
+    SHORT fontDirectionHint;
+    SHORT indexToLocFormat;
+    SHORT glyphDataFormat;
+} TT_TABLE_HEAD, *PTT_TABLE_HEAD;
 
 typedef struct _TT_OS2_DATA
 {


Reply via email to