Author: tkreuzer
Date: Mon May 16 17:40:41 2011
New Revision: 51794

URL: http://svn.reactos.org/svn/reactos?rev=51794&view=rev
Log:
[GDI FONT DRIVER]
- Get font revision and lowest ppem from 'head' true type table
- use font revision to create the unique name

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/tttables.c
    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=51794&r1=51793&r2=51794&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 17:40:41 2011
@@ -51,6 +51,7 @@
         }
     }
 
+    /* Return the average glyph width */
     return (FWORD)(ulAccumCharWidth / cGlyphs);
 }
 
@@ -85,7 +86,7 @@
     pifi->dpCharSets = FIELD_OFFSET(FTFD_IFIMETRICS, ajCharSet);
     pifi->dpFontSim = 0;
 
-    /* Charsets */
+    /* Initialize charsets */
     pifi->jWinCharSet = ANSI_CHARSET;
     pifiex->ajCharSet[0] = pifi->jWinCharSet;
     for (i = 1; i < 16; i++)
@@ -118,7 +119,7 @@
 
     /* Font resolution */
     pifi->fwdUnitsPerEm = ftface->units_per_EM;
-    pifi->fwdLowestPPEm = 3; // FIXME
+    pifi->fwdLowestPPEm = 3;
 
     /* Font metrics */
     pifi->fwdMacAscender = ftface->ascender;
@@ -242,15 +243,13 @@
                            strnlen(ftface->family_name, MAX_PATH));
 
     /* Create a unique name */
-    wcscpy(pifiex->awcUniqueName, L"1.000;ABCD;");
+    wcscpy(pifiex->awcUniqueName, L"1.000;????;");
     wcsncat(pifiex->awcUniqueName, pifiex->awcFamilyName, LF_FACESIZE);
-    pifiex->awcUniqueName[0] = L'1'; // + version?
-    pifiex->awcUniqueName[2] = L'0'; // + version?
-    EngMultiByteToUnicodeN(pifiex->awcUniqueName + 6,
-                           4,
-                           NULL,
-                           pifi->achVendId,
-                           4);
+    pifiex->awcUniqueName[0] = L'0' +  HIWORD(pface->ulFontRevision) % 10;
+    pifiex->awcUniqueName[2] = L'0' + (LOWORD(pface->ulFontRevision) / 100) % 
10;
+    pifiex->awcUniqueName[3] = L'0' + (LOWORD(pface->ulFontRevision) / 10) % 
10;
+    pifiex->awcUniqueName[4] = L'0' +  LOWORD(pface->ulFontRevision) % 10;
+    EngMultiByteToUnicodeN(pifiex->awcUniqueName+6, 4, NULL, pifi->achVendId, 
4);
 
     //__debugbreak();
     return TRUE;
@@ -279,7 +278,6 @@
         WARN("EngAllocMem() failed.\n");
         return NULL;
     }
-
 
     /* Calculate FD_GLYPHSET size (incl. HGLYPH array!) */
     cjSize = FIELD_OFFSET(FD_GLYPHSET, awcrun)
@@ -437,6 +435,7 @@
         wcCurrent = (WCHAR)FT_Get_Next_Char(ftface, wcCurrent, &index);
     }
 
+    /* Save the last character */
     pface->ifiex.ifi.wcLastChar = wcPrev;
 
     /* Initialize IFIMETRICS */

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=51794&r1=51793&r2=51794&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 17:40:41 2011
@@ -93,6 +93,7 @@
     ULONG cGlyphs;
     ULONG cMappings;
     ULONG cRuns;
+    ULONG ulFontRevision;
     PWCHAR pwcReverseTable;
     FD_GLYPHSET *pGlyphSet;
     FD_KERNINGPAIR *pKerningPairs;

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=51794&r1=51793&r2=51794&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 17:40:41 2011
@@ -263,10 +263,8 @@
 {
     PFTFD_FONT pfont = pfo->pvProducer;
 
-    if (!pfont)
-    {
-        pfont = FtfdCreateFontInstance(pfo);
-    }
+    /* Create a font instance if neccessary */
+    if (!pfont) pfont = FtfdCreateFontInstance(pfo);
 
     /* Return the font instance */
     return pfont;
@@ -302,7 +300,7 @@
         /* Accelerator flags (ignored atm) */
         pfddm->flRealizedType = 0;
 
-        /* Fixed width advance */
+        /* Set fixed width advance */
         if (FT_IS_FIXED_WIDTH(ftface))
             pfddm->lD = ftface->max_advance_width;
         else
@@ -362,7 +360,7 @@
     /* Check if the glyph needs to be updated */
     if (pfont->hgSelected != hg)
     {
-        /* Load the glypg into the freetype face slot */
+        /* Load the glyph into the freetype face slot */
         fterror = FT_Load_Glyph(pfont->ftface, hg, 0);
         if (fterror)
         {
@@ -406,7 +404,7 @@
     }
 
     /* D is the glyph advance width */
-    pgd->fxD = ftglyph->advance.x / 4; // should be projected on the x-axis
+    pgd->fxD = ftglyph->advance.x / 4; // FIXME: should be projected on the 
x-axis
 
     /* This is the box in which the bitmap fits */
     pgd->rclInk.left = ftglyph->bitmap_left;
@@ -418,7 +416,7 @@
     pgd->fxInkBottom = (-pgd->rclInk.bottom) << 4;
     pgd->fxInkTop = pgd->rclInk.top << 4;
 
-    /* Make the bitmap at least 1x1 pixel */
+    /* Make the bitmap at least 1x1 pixel large */
     if (ftglyph->bitmap.width == 0) pgd->rclInk.right++;
     if (ftglyph->bitmap.rows == 0) pgd->rclInk.bottom++;
 
@@ -668,7 +666,7 @@
     FT_Error fterror;
     FT_Fixed advance;
 
-    TRACE("FtfdQueryAdvanceWidths\n");
+    //TRACE("FtfdQueryAdvanceWidths\n");
 
     // FIXME: layout horizontal/vertical
     fl = (iMode == QAW_GETEASYWIDTHS) ? FT_ADVANCE_FLAG_FAST_ONLY : 0;

Modified: branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.c?rev=51794&r1=51793&r2=51794&view=diff
==============================================================================
--- branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.c 
[iso-8859-1] (original)
+++ branches/GSoC_2011/GdiFontDriver/drivers/video/font/ftfd/tttables.c 
[iso-8859-1] Mon May 16 17:40:41 2011
@@ -312,13 +312,26 @@
 {
     PFTFD_FILE pfile = pface->pfile;
     PVOID pvView = pfile->pvView;
-    PTT_OS2_DATA pOs2;
+    PTT_TABLE_OS2 pOs2;
+    PTT_TABLE_HEAD pHead;
+
+    /* Get the head table for the face */
+    pHead = FtfdFindTrueTypeTable(pvView, pfile->cjView, pface->iFace, 'daeh', 
NULL);
+    if (!pHead)
+    {
+        WARN("Couldn't find 'head' table\n");
+        return FALSE;
+    }
+
+    /* Get lowest PPEm */
+    pifi->fwdLowestPPEm = GETW(&pHead->lowestRecPPEM);
+    pface->ulFontRevision = GETD(&pHead->fontRevision);
 
     /* Get the OS/2 table for the face */
     pOs2 = FtfdFindTrueTypeTable(pvView, pfile->cjView, pface->iFace, '2/SO', 
NULL);
     if (!pOs2)
     {
-        WARN("Couldn't find OS/2 table\n");
+        WARN("Couldn't find 'OS/2' table\n");
         return FALSE;
     }
 

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=51794&r1=51793&r2=51794&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 17:40:41 2011
@@ -66,7 +66,7 @@
     SHORT glyphDataFormat;
 } TT_TABLE_HEAD, *PTT_TABLE_HEAD;
 
-typedef struct _TT_OS2_DATA
+typedef struct _TT_TABLE_OS2
 {
     USHORT     version; //     // 0x00
     SHORT      xAvgCharWidth;
@@ -113,7 +113,7 @@
     USHORT     usDefaultChar;
     USHORT     usBreakChar;
     USHORT     usMaxContext;
-} TT_OS2_DATA, *PTT_OS2_DATA;
+} TT_TABLE_OS2, *PTT_TABLE_OS2;
 
 typedef struct _TT_KERNPAIR
 {


Reply via email to