]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/font.cpp
corrected warnings
[wxWidgets.git] / src / os2 / font.cpp
index e4abc8de91e245c0e2f11010037875d690ab8c3d..5ada2e0801acfeba948a027ef52d37b99f3b4f4c 100644 (file)
@@ -108,8 +108,13 @@ public:
     //
     inline int GetPointSize(void) const
     {
-        return m_bNativeFontInfoOk ? m_vNativeFontInfo.GetPointSize()
-                                   : m_nPointSize;
+        //
+        // We don't use the actual native font point size since it is
+        // the chosen physical font, which is usually only and approximation
+        // of the desired outline font.  The actual displayable point size
+        // is the one stored in the refData
+        //
+        return m_nPointSize;
     }
 
     inline int GetFamily(void) const
@@ -343,14 +348,19 @@ void wxFontRefData::Init(
     m_bNativeFontInfoOk = TRUE;
     m_vNativeFontInfo = rInfo;
 
-    if (m_hPS == NULLHANDLE)
+    if (hPS == NULLHANDLE)
     {
         m_hPS = ::WinGetPS(HWND_DESKTOP);
-        m_bInternalPS;
+        m_bInternalPS = TRUE;
     }
     else
         m_hPS = (HPS)hPS;
-}
+
+    m_nFontId     = 0;
+    m_bTemporary  = FALSE;
+    m_pFM         = (PFONTMETRICS)NULL;
+    m_nNumFonts   = 0;
+} // end of wxFontRefData::Init
 
 wxFontRefData::~wxFontRefData()
 {
@@ -363,6 +373,11 @@ bool wxFontRefData::Alloc(
 {
     wxString                        sFaceName;
     long                            flId = m_hFont;
+    long                            lRc;
+    short                           nIndex = 0;
+    PFONTMETRICS                    pFM = NULL;
+    ERRORID                         vError;
+    wxString                        sError;
 
     if (!m_bNativeFontInfoOk)
     {
@@ -376,23 +391,32 @@ bool wxFontRefData::Alloc(
                      );
         m_bNativeFontInfoOk = TRUE;
     }
-
-    if(::GpiCreateLogFont( m_hPS
-                          ,NULL
-                          ,flId
-                          ,&m_vNativeFontInfo.fa
-                         ) != GPI_ERROR)
+    else
+    {
+        if (flId == 0L)
+            flId = 1L;
+        else
+            flId++;
+        if (flId > 254)
+            flId = 1L;
+    }
+    if((lRc = ::GpiCreateLogFont( m_hPS
+                                 ,NULL
+                                 ,flId
+                                 ,&m_vNativeFontInfo.fa
+                                )) != GPI_ERROR)
+    {
        m_hFont = (WXHFONT)flId;
        m_nFontId = flId;
-
+    }
     if (!m_hFont)
     {
+        vError = ::WinGetLastError(vHabmain);
+        sError = wxPMErrorToStr(vError);
         wxLogLastError("CreateFont");
     }
 
-    //
-    // Query for the actual metrics of the current font being used
-    //
+    ::GpiSetCharSet(m_hPS, flId); // sets font for presentation space
     ::GpiQueryFontMetrics(m_hPS, sizeof(FONTMETRICS), &m_vNativeFontInfo.fm);
 
     //
@@ -400,17 +424,43 @@ bool wxFontRefData::Alloc(
     //
     memcpy(&m_vFattrs, &m_vNativeFontInfo.fa, sizeof(m_vFattrs));
     memcpy(&m_vFname, &m_vNativeFontInfo.fn, sizeof(m_vFname));
-    m_nPointSize  = m_vNativeFontInfo.fm.lEmHeight;
-    if (strcmp(m_vNativeFontInfo.fa.szFacename, "Times New Roman") == 0)
+    //
+    // Going to leave the point size alone.  Mostly we use outline fonts
+    // that can be set to any point size inside of Presentation Parameters,
+    // regardless of whether or not the actual font is registered in the system.
+    // The GpiCreateLogFont will do enough by selecting the right family,
+    // and face name.
+    //
+    if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Times New Roman") == 0)
+        m_nFamily = wxROMAN;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Times New Roman MT 30") == 0)
+        m_nFamily = wxROMAN;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "@Times New Roman MT 30") == 0)
         m_nFamily = wxROMAN;
-    else if (strcmp(m_vNativeFontInfo.fa.szFacename, "WarpSans") == 0)
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Tms Rmn") == 0)
+        m_nFamily = wxROMAN;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "WarpSans") == 0)
+        m_nFamily = wxDECORATIVE;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Helvetica") == 0)
+        m_nFamily = wxSWISS;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Helv") == 0)
         m_nFamily = wxSWISS;
-    else if (strcmp(m_vNativeFontInfo.fa.szFacename, "Script") == 0)
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Script") == 0)
         m_nFamily = wxSCRIPT;
-    else if (strcmp(m_vNativeFontInfo.fa.szFacename, "Courier New") == 0)
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Courier New") == 0)
+        m_nFamily = wxTELETYPE;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Courier") == 0)
+        m_nFamily = wxTELETYPE;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "System Monospaced") == 0)
+        m_nFamily = wxTELETYPE;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "System VIO") == 0)
         m_nFamily = wxMODERN;
-    else if (strcmp(m_vNativeFontInfo.fa.szFacename, "Courier") == 0)
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "System Proportional") == 0)
         m_nFamily = wxMODERN;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Arial") == 0)
+        m_nFamily = wxSWISS;
+    else if (strcmp(m_vNativeFontInfo.fm.szFamilyname, "Swiss") == 0)
+        m_nFamily = wxSWISS;
     else
         m_nFamily = wxSWISS;
 
@@ -475,10 +525,6 @@ void wxFontRefData::Free()
 
     if ( m_hFont )
     {
-        if (!::GpiSetCharSet(m_hPS, LCID_DEFAULT))
-        {
-            wxLogLastError(wxT("DeleteObject(font)"));
-        }
         ::GpiDeleteSetId(m_hPS, 1L); /* delete the logical font          */
         m_nFontId = 0;
         m_hFont   = 0;
@@ -546,14 +592,36 @@ wxFontFamily wxNativeFontInfo::GetFamily() const
     //
     // Extract family from facename
     //
-    if (strcmp(fa.szFacename, "Times New Roman") == 0)
+    if (strcmp(fm.szFamilyname, "Times New Roman") == 0)
+        nFamily = wxROMAN;
+    else if (strcmp(fm.szFamilyname, "Times New Roman MT 30") == 0)
         nFamily = wxROMAN;
-    else if (strcmp(fa.szFacename, "WarpSans") == 0)
+    else if (strcmp(fm.szFamilyname, "@Times New Roman MT 30") == 0)
+        nFamily = wxROMAN;
+    else if (strcmp(fm.szFamilyname, "Tms Rmn") == 0)
+        nFamily = wxROMAN;
+    else if (strcmp(fm.szFamilyname, "WarpSans") == 0)
+        nFamily = wxDECORATIVE;
+    else if (strcmp(fm.szFamilyname, "Helvetica") == 0)
+        nFamily = wxSWISS;
+    else if (strcmp(fm.szFamilyname, "Helv") == 0)
         nFamily = wxSWISS;
-    else if (strcmp(fa.szFacename, "Script") == 0)
+    else if (strcmp(fm.szFamilyname, "Script") == 0)
         nFamily = wxSCRIPT;
-    else if (strcmp(fa.szFacename, "Courier New") == 0)
+    else if (strcmp(fm.szFamilyname, "Courier New") == 0)
+        nFamily = wxTELETYPE;
+    else if (strcmp(fm.szFamilyname, "Courier") == 0)
+        nFamily = wxTELETYPE;
+    else if (strcmp(fm.szFamilyname, "System Monospaced") == 0)
+        nFamily = wxTELETYPE;
+    else if (strcmp(fm.szFamilyname, "System VIO") == 0)
         nFamily = wxMODERN;
+    else if (strcmp(fm.szFamilyname, "System Proportional") == 0)
+        nFamily = wxMODERN;
+    else if (strcmp(fm.szFamilyname, "Arial") == 0)
+        nFamily = wxSWISS;
+    else if (strcmp(fm.szFamilyname, "Swiss") == 0)
+        nFamily = wxSWISS;
     else
         nFamily = wxSWISS;
     return (wxFontFamily)nFamily;
@@ -639,29 +707,32 @@ void wxNativeFontInfo::SetFamily(
     switch (eFamily)
     {
         case wxSCRIPT:
-            sFacename = _T("Script");
+            sFacename = wxT("Tms Rmn");
             break;
 
         case wxDECORATIVE:
-            sFacename = _T("Times New Roman");
+            sFacename = wxT("WarpSans");
             break;
 
         case wxROMAN:
-            sFacename = _T("Times New Roman");
+            sFacename = wxT("Tms Rmn");
             break;
 
         case wxTELETYPE:
+            sFacename = wxT("Courier") ;
+            break;
+
         case wxMODERN:
-            sFacename = _T("Courier New");
+            sFacename = wxT("System VIO") ;
             break;
 
         case wxSWISS:
-            sFacename = _T("WarpSans");
+            sFacename = wxT("Helv") ;
             break;
 
         case wxDEFAULT:
         default:
-            sFacename = _T("Helv");
+            sFacename = wxT("System VIO") ;
     }
 
     if (!wxStrlen(fa.szFacename) )
@@ -680,8 +751,7 @@ void wxNativeFontInfo::SetEncoding(
                                   ,&vInfo
                                  ))
     {
-#if wxUSE_FONTMAP
-        if (wxTheFontMapper->GetAltForEncoding( eEncoding
+        if (wxFontMapper::Get()->GetAltForEncoding( eEncoding
                                                ,&vInfo
                                               ))
         {
@@ -696,7 +766,6 @@ void wxNativeFontInfo::SetEncoding(
             }
         }
         else
-#endif // wxUSE_FONTMAP
         {
             // unsupported encoding, replace with the default
             vInfo.charset = 850;
@@ -1098,5 +1167,5 @@ void wxFont::SetPS(
     M_FONTDATA->SetPS(hPS);
 
     RealizeResource();
-} // end of wxFont::SetUnderlined
+} // end of wxFont::SetPS