diff --git a/src/Win/EnumWinFonts.cpp b/src/Win/EnumWinFonts.cpp index cd51cd0..740934a 100644 --- a/src/Win/EnumWinFonts.cpp +++ b/src/Win/EnumWinFonts.cpp @@ -8,46 +8,56 @@ namespace hgl { BOOL CALLBACK EnumFontFamCallBack(CONST LOGFONTW *lplf, CONST TEXTMETRICW *lpntm, DWORD FontType, LPARAM lpUser) { - FontMap *font_map=(FontMap *)lpUser; + FontInfoList *fi_list=(FontInfoList *)lpUser; - FontInfo *fi=new FontInfo; + FontInfo fi; - hgl::strcpy(fi->name,HGL_FONT_NAME_MAX_LENGTH,lplf->lfFaceName); + hgl::strcpy(fi.name,HGL_FONT_NAME_MAX_LENGTH,lplf->lfFaceName); - if (FontType & RASTER_FONTTYPE ) fi->type=FontType::Raster;else - if (FontType & TRUETYPE_FONTTYPE) fi->type=FontType::TrueType;else - fi->type=FontType::Vector; + if (FontType & RASTER_FONTTYPE ) fi.type=FontType::Raster;else + if (FontType & TRUETYPE_FONTTYPE) fi.type=FontType::TrueType;else + fi.type=FontType::Vector; - fi->charset =lpntm->tmCharSet; - fi->height =lpntm->tmHeight; - fi->ascent =lpntm->tmAscent; - fi->descent =lpntm->tmDescent; - fi->internal_leading =lpntm->tmInternalLeading; - fi->external_leading =lpntm->tmExternalLeading; - fi->ave_char_width =lpntm->tmAveCharWidth; - fi->max_char_width =lpntm->tmMaxCharWidth; - fi->weight =lpntm->tmWeight; - fi->overhang =lpntm->tmOverhang; - fi->digitized_aspect_x =lpntm->tmDigitizedAspectX; - fi->digitized_aspect_y =lpntm->tmDigitizedAspectY; - fi->first_char =lpntm->tmFirstChar; - fi->last_char =lpntm->tmLastChar; - fi->default_char =lpntm->tmDefaultChar; - fi->break_char =lpntm->tmBreakChar; - fi->italic =lpntm->tmItalic; - fi->underlined =lpntm->tmUnderlined; - fi->struck_out =lpntm->tmStruckOut; - fi->pitch_and_family =lpntm->tmPitchAndFamily; + fi.charset =lpntm->tmCharSet; + fi.height =lpntm->tmHeight; + fi.ascent =lpntm->tmAscent; + fi.descent =lpntm->tmDescent; + fi.internal_leading =lpntm->tmInternalLeading; + fi.external_leading =lpntm->tmExternalLeading; + fi.ave_char_width =lpntm->tmAveCharWidth; + fi.max_char_width =lpntm->tmMaxCharWidth; + fi.weight =lpntm->tmWeight; + fi.overhang =lpntm->tmOverhang; + fi.digitized_aspect_x =lpntm->tmDigitizedAspectX; + fi.digitized_aspect_y =lpntm->tmDigitizedAspectY; + fi.first_char =lpntm->tmFirstChar; + fi.last_char =lpntm->tmLastChar; + fi.default_char =lpntm->tmDefaultChar; + fi.break_char =lpntm->tmBreakChar; + fi.italic =lpntm->tmItalic; + fi.underlined =lpntm->tmUnderlined; + fi.struck_out =lpntm->tmStruckOut; + fi.pitch_and_family =lpntm->tmPitchAndFamily; - font_map->Add(OSString(fi->name),fi); + fi_list->Add(fi); return(TRUE); } } - void EnumOSFonts(FontMap *font_map) + void EnumOSFonts(FontInfoList *fi_list) { - if(!font_map)return; + if(!fi_list)return; - EnumFontFamiliesExW(NULL,NULL,EnumFontFamCallBack,(LPARAM)&font_map,0); + LOGFONTW lf; + + hgl_zero(lf); + + lf.lfCharSet=DEFAULT_CHARSET; + + HDC dc=GetDC(NULL); + + int result=EnumFontFamiliesExW(dc,&lf,EnumFontFamCallBack,(LPARAM)fi_list,0); + + ReleaseDC(NULL,dc); } }//namespace hgl