From a4353f07c6b37712634d4b2d86527b647a08044f Mon Sep 17 00:00:00 2001
From: David Webster <Dave.Webster@bhmi.com>
Date: Wed, 21 Aug 2002 22:46:05 +0000
Subject: [PATCH] Font updates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16667 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 src/os2/font.cpp     |  4 +--
 src/os2/fontdlg.cpp  | 31 ++++--------------
 src/os2/fontutil.cpp | 75 +++++++++++++++++++++++++++++++-------------
 src/os2/wx23.def     |  4 ++-
 4 files changed, 64 insertions(+), 50 deletions(-)

diff --git a/src/os2/font.cpp b/src/os2/font.cpp
index de67ef4211..29b418ae3c 100644
--- a/src/os2/font.cpp
+++ b/src/os2/font.cpp
@@ -441,7 +441,7 @@ bool wxFontRefData::Alloc(
         m_nFamily = wxROMAN;
     else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "WarpSans") == 0)
         m_nFamily = wxDECORATIVE;
-    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Helvitica") == 0)
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Helvetica") == 0)
         m_nFamily = wxSWISS;
     else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Helv") == 0)
         m_nFamily = wxSWISS;
@@ -600,7 +600,7 @@ wxFontFamily wxNativeFontInfo::GetFamily() const
         nFamily = wxROMAN;
     else if (strcmp(fm.szFamilyname, "WarpSans") == 0)
         nFamily = wxDECORATIVE;
-    else if (strcmp(fm.szFamilyname, "Helvitica") == 0)
+    else if (strcmp(fm.szFamilyname, "Helvetica") == 0)
         nFamily = wxSWISS;
     else if (strcmp(fm.szFamilyname, "Helv") == 0)
         nFamily = wxSWISS;
diff --git a/src/os2/fontdlg.cpp b/src/os2/fontdlg.cpp
index 9b796e6527..e75040cc76 100644
--- a/src/os2/fontdlg.cpp
+++ b/src/os2/fontdlg.cpp
@@ -74,42 +74,23 @@ int wxFontDialog::ShowModal()
         vFn.usWeightClass = vFontDlg.usWeight;
         vFn.usWidthClass  = vFontDlg.usWidth;
 
-        memcpy(&vInfo.fa, &vFontDlg.fAttrs, sizeof(FATTRS));
+        memset(&vInfo.fa, '\0', sizeof(FATTRS));
         memcpy(&vInfo.fn, &vFn, sizeof(FACENAMEDESC));
 
+        vInfo.fa.usRecordLength = vFontDlg.fAttrs.usRecordLength;
+        strcpy(vInfo.fa.szFacename, vFontDlg.fAttrs.szFacename);
+        vInfo.fa.lMatch = vFontDlg.fAttrs.lMatch;
+
         //
         // Debugging
         //
         wxFont                      vChosenFont(vInfo);
 
-        int                         nFamily;
-        int                         nPointSize = vFontDlg.lEmHeight;
-        int                         nStyle;
-        int                         nWeight;
-        bool                        bUnderlined;
-        wxString                    sFaceName;
-        wxNativeFontInfo*           pInfo;
+        int                         nPointSize = vFontDlg.fxPointSize >> 16;
 
         vChosenFont.SetPointSize(nPointSize);
-        nFamily = vChosenFont.GetFamily();
-        nPointSize = vChosenFont.GetPointSize();
-        nStyle = vChosenFont.GetStyle();
-        nWeight = vChosenFont.GetWeight();
-        bUnderlined = vChosenFont.GetUnderlined();
-        sFaceName = vChosenFont.GetFaceName();
-        pInfo = vChosenFont.GetNativeFontInfo();
-
-
         m_fontData.chosenFont = vChosenFont;
 
-        nFamily = m_fontData.chosenFont.GetFamily();
-        nPointSize = m_fontData.chosenFont.GetPointSize();
-        nStyle = m_fontData.chosenFont.GetStyle();
-        nWeight = m_fontData.chosenFont.GetWeight();
-        bUnderlined = m_fontData.chosenFont.GetUnderlined();
-        sFaceName = m_fontData.chosenFont.GetFaceName();
-        pInfo = m_fontData.chosenFont.GetNativeFontInfo();
-
         m_fontData.EncodingInfo().facename = vFontDlg.fAttrs.szFacename;
         m_fontData.EncodingInfo().charset = vFontDlg.fAttrs.usCodePage;
 
diff --git a/src/os2/fontutil.cpp b/src/os2/fontutil.cpp
index 069b7d7f68..8b4d684739 100644
--- a/src/os2/fontutil.cpp
+++ b/src/os2/fontutil.cpp
@@ -258,6 +258,44 @@ bool wxTestFontEncoding(
 // wxFont <-> LOGFONT conversion
 // ----------------------------------------------------------------------------
 
+void wxConvertVectorFontSize(
+  FIXED                             fxPointSize
+, PFATTRS                           pFattrs
+)
+{
+    HPS                             hPS;
+    HDC                             hDC;
+    LONG                            lXFontResolution;
+    LONG                            lYFontResolution;
+    SIZEF                           vSizef;
+
+    hPS = WinGetScreenPS(HWND_DESKTOP); // Screen presentation space
+
+    //
+    //   Query device context for the screen and then query
+    //   the resolution of the device for the device context.
+    //
+
+    hDC = GpiQueryDevice(hPS);
+    DevQueryCaps( hDC, CAPS_HORIZONTAL_FONT_RES, (LONG)1, &lXFontResolution);
+    DevQueryCaps( hDC, CAPS_VERTICAL_FONT_RES, (LONG)1, &lYFontResolution);
+
+    //
+    //   Calculate the size of the character box, based on the
+    //   point size selected and the resolution of the device.
+    //   The size parameters are of type FIXED, NOT int.
+    //   NOTE: 1 point == 1/72 of an inch.
+    //
+
+    vSizef.cx = (FIXED)(((fxPointSize) / 72 ) * lXFontResolution );
+    vSizef.cy = (FIXED)(((fxPointSize) / 72 ) * lYFontResolution );
+
+    pFattrs->lMaxBaselineExt = MAKELONG( HIUSHORT( vSizef.cy ), 0 );
+    pFattrs->lAveCharWidth   = MAKELONG( HIUSHORT( vSizef.cx ), 0 );
+    WinReleasePS(hPS);
+
+} // end of wxConvertVectorPointSize
+
 void wxFillLogFont(
   LOGFONT*                          pFattrs  // OS2 GPI FATTRS
 , PFACENAMEDESC                     pFaceName
@@ -327,8 +365,7 @@ void wxFillLogFont(
     // Initialize FATTR and FACENAMEDESC
     //
     pFattrs->usRecordLength = sizeof(FATTRS);
-    pFattrs->fsFontUse = FATTR_FONTUSE_OUTLINE |       // only outline fonts allowed
-                         FATTR_FONTUSE_TRANSFORMABLE;  // may be transformed
+    pFattrs->fsFontUse = FATTR_FONTUSE_OUTLINE;       // only outline fonts allowed
     pFattrs->fsType = 0;
     pFattrs->lMaxBaselineExt = pFattrs->lAveCharWidth = 0;
     pFattrs->idRegistry = 0;
@@ -602,30 +639,24 @@ void wxOS2SelectMatchingFontByName(
     // Fill in the FATTRS with the best match from FONTMETRICS
     //
     pFattrs->usRecordLength  = sizeof(FATTRS);              // Sets size of structure
-    pFattrs->fsSelection     = pFM[nIndex].fsSelection;     // Uses default selection
     pFattrs->lMatch          = pFM[nIndex].lMatch;          // Force match
-    pFattrs->idRegistry      = pFM[nIndex].idRegistry;      // Uses default registry
-    pFattrs->usCodePage      = pFM[nIndex].usCodePage;      // Code-page
-    pFattrs->fsType          = 0;          // Uses default type
-    pFattrs->lMaxBaselineExt = 0;
-    pFattrs->lAveCharWidth   = 0;
-    pFattrs->fsFontUse       = FATTR_FONTUSE_OUTLINE |      // only outline fonts allowed
-                               FATTR_FONTUSE_TRANSFORMABLE; // may be transformed
-#if 0
-    pFattrs->lMaxBaselineExt = pFM[nIndex].lMaxBaselineExt;
-    pFattrs->lAveCharWidth   = pFM[nIndex].lAveCharWidth;
-#endif
+    pFattrs->idRegistry      = 0;                           // Registry
+    pFattrs->usCodePage      = 0;                           // Match proper CodePage
+    pFattrs->fsFontUse       = 0;                           // Use only outline fonts
+    pFattrs->fsType          = 0;                           // Use only outline fonts
+    pFattrs->lMaxBaselineExt = 0;                           // Use only outline fonts
+    pFattrs->lAveCharWidth   = 0;                           // Use only outline fonts
     wxStrcpy(pFattrs->szFacename, pFM[nIndex].szFacename);
-    // Debug
-    strcpy(zFontFaceName, pFM[nIndex].szFacename);
-    strcpy(zFontFaceName, pFattrs->szFacename);
+    if (pFont->GetWeight() == wxNORMAL)
+        pFattrs->fsSelection = 0;
+    else
+        pFattrs->fsSelection = FATTR_SEL_BOLD;
 
-    if(usWeightClass >= FWEIGHT_BOLD)
-        pFattrs->fsSelection |= FATTR_SEL_BOLD;
-    if(pFont->GetUnderlined())
-        pFattrs->fsSelection |= FATTR_SEL_UNDERSCORE;
-    if(fsSelection & FM_SEL_ITALIC)
+    if (pFont->GetStyle() == wxITALIC || pFont->GetStyle() == wxSLANT)
         pFattrs->fsSelection |= FATTR_SEL_ITALIC;
+
+    if (pFont->GetUnderlined())
+        pFattrs->fsSelection |= FATTR_SEL_UNDERSCORE;
 } // end of wxOS2SelectMatchingFontByName
 
 wxFont wxCreateFontFromLogFont(
diff --git a/src/os2/wx23.def b/src/os2/wx23.def
index f9330bee47..ad99183d6d 100644
--- a/src/os2/wx23.def
+++ b/src/os2/wx23.def
@@ -4,7 +4,7 @@ DATA MULTIPLE NONSHARED READWRITE LOADONCALL
 CODE LOADONCALL
 
 EXPORTS
-;From library:  H:\DEV\WX2\WXWINDOWS\LIB\wx.lib
+;From library:  H:\DEV\WX2\WXWINDOWS\lib\wx.lib
   ;From object file:  dummy.cpp
     ;PUBDEFs (Symbols available from object file):
       wxDummyChar
@@ -12803,6 +12803,8 @@ EXPORTS
       wxFillLogFont__FP7_FATTRSP13_FACENAMEDESCPUlT3PlR8wxStringP6wxFont
       ;wxGetNativeFontEncoding(wxFontEncoding,wxNativeEncodingInfo*)
       wxGetNativeFontEncoding__F14wxFontEncodingP20wxNativeEncodingInfo
+      ;wxConvertVectorFontSize(long,_FATTRS*)
+      wxConvertVectorFontSize__FlP7_FATTRS
       ;wxOS2SelectMatchingFontByName(_FATTRS*,_FACENAMEDESC*,_FONTMETRICS*,int,const wxFont*)
       wxOS2SelectMatchingFontByName__FP7_FATTRSP13_FACENAMEDESCP12_FONTMETRICSiPC6wxFont
       ;wxGpiStrcmp(char*,char*)
-- 
2.50.0

