Index: core/fxge/apple/fx_mac_imp.cpp |
diff --git a/core/fxge/apple/fx_mac_imp.cpp b/core/fxge/apple/fx_mac_imp.cpp |
index 4ddc7db8ad56bbe1bde3e4d0fd2fd8e4c70469f8..8940896901f28700ada40243cf77f74ef869dbe6 100644 |
--- a/core/fxge/apple/fx_mac_imp.cpp |
+++ b/core/fxge/apple/fx_mac_imp.cpp |
@@ -67,10 +67,27 @@ void* CFX_MacFontInfo::MapFont(int weight, |
face = g_Base14Substs[i].m_pSubstName; |
iExact = TRUE; |
return GetFont(face.c_str()); |
- break; |
} |
} |
+ // The request may not ask for the bold and/or italic version of a font by |
+ // name. So try to construct the appropriate name. This is not 100% foolproof |
+ // as there are fonts that have "Oblique" or "BoldOblique" or "Heavy" in their |
+ // names instead. But this at least works for common fonts like Arial and |
+ // Times New Roman. A more sophisticated approach would be to find all the |
+ // fonts in |m_FontList| with |face| in the name, and examine the fonts to |
+ // see which best matches the requested characteristics. |
+ if (face.Find("Bold") == -1 && face.Find("Italic") == -1) { |
+ CFX_ByteString new_face = face; |
+ if (weight > 400) |
+ new_face += " Bold"; |
+ if (bItalic) |
+ new_face += " Italic"; |
+ auto it = m_FontList.find(new_face); |
+ if (it != m_FontList.end()) |
+ return it->second; |
+ } |
+ |
auto it = m_FontList.find(face); |
if (it != m_FontList.end()) |
return it->second; |