+ default:
+ {
+ xweight = MWLF_WEIGHT_DEFAULT;
+ break;
+ }
+ }
+ GR_SCREEN_INFO screenInfo;
+ GrGetScreenInfo(& screenInfo);
+
+ int yPixelsPerCM = screenInfo.ydpcm;
+
+ // A point is 1/72 of an inch.
+ // An inch is 2.541 cm.
+ // So pixelHeight = (pointSize / 72) (inches) * 2.541 (for cm) * yPixelsPerCM (for pixels)
+ // In fact pointSize is 10 * the normal point size so
+ // divide by 10.
+
+ int pixelHeight = (int) ( (((float)pointSize) / 720.0) * 2.541 * (float) yPixelsPerCM) ;
+
+ // An alternative: assume that the screen is 72 dpi.
+ //int pixelHeight = (int) (((float)pointSize / 720.0) * 72.0) ;
+ //int pixelHeight = (int) ((float)pointSize / 10.0) ;
+
+ GR_LOGFONT logFont;
+ logFont.lfHeight = pixelHeight;
+ logFont.lfWidth = 0;
+ logFont.lfEscapement = 0;
+ logFont.lfOrientation = 0;
+ logFont.lfWeight = xweight;
+ logFont.lfItalic = (style == wxNORMAL ? 0 : 1) ;
+ logFont.lfUnderline = 0;
+ logFont.lfStrikeOut = 0;
+ logFont.lfCharSet = MWLF_CHARSET_DEFAULT; // TODO: select appropriate one
+ logFont.lfOutPrecision = MWLF_TYPE_DEFAULT;
+ logFont.lfClipPrecision = 0; // Not used
+ logFont.lfRoman = (family == wxROMAN ? 1 : 0) ;
+ logFont.lfSerif = (family == wxSWISS ? 0 : 1) ;
+ logFont.lfSansSerif = !logFont.lfSerif ;
+ logFont.lfModern = (family == wxMODERN ? 1 : 0) ;
+ logFont.lfProportional = (family == wxTELETYPE ? 0 : 1) ;
+ logFont.lfOblique = 0;
+ logFont.lfSmallCaps = 0;
+ logFont.lfPitch = 0; // 0 = default
+ strcpy(logFont.lfFaceName, facename.c_str());
+
+ XFontStruct* fontInfo = (XFontStruct*) malloc(sizeof(XFontStruct));
+ fontInfo->fid = GrCreateFont((GR_CHAR*) facename.c_str(), pixelHeight, & logFont);
+ GrGetFontInfo(fontInfo->fid, & fontInfo->info);
+ return (wxNativeFont) fontInfo;
+
+#else