static void test_createfont(void) { GpFontFamily* fontfamily = NULL, *fontfamily2; GpFont* font = NULL; GpStatus stat; Unit unit; UINT i; REAL size; WCHAR familyname[LF_FACESIZE]; stat = GdipCreateFontFamilyFromName(nonexistent, NULL, &fontfamily); expect (FontFamilyNotFound, stat); stat = GdipDeleteFont(font); expect (InvalidParameter, stat); stat = GdipCreateFontFamilyFromName(arial, NULL, &fontfamily); if(stat == FontFamilyNotFound) { skip("Arial not installed\n"); return; } expect (Ok, stat); stat = GdipCreateFont(fontfamily, 12, FontStyleRegular, UnitPoint, &font); expect (Ok, stat); stat = GdipGetFontUnit (font, &unit); expect (Ok, stat); expect (UnitPoint, unit); stat = GdipGetFamily(font, &fontfamily2); expect(Ok, stat); stat = GdipGetFamilyName(fontfamily2, familyname, 0); expect(Ok, stat); ok (lstrcmpiW(arial, familyname) == 0, "Expected arial, got %s\n", debugstr_w(familyname)); stat = GdipDeleteFontFamily(fontfamily2); expect(Ok, stat); /* Test to see if returned size is based on unit (its not) */ GdipGetFontSize(font, &size); ok (size == 12, "Expected 12, got %f\n", size); GdipDeleteFont(font); /* Make sure everything is converted correctly for all Units */ for (i = UnitWorld; i <=UnitMillimeter; i++) { if (i == UnitDisplay) continue; /* Crashes WindowsXP, wtf? */ GdipCreateFont(fontfamily, 24, FontStyleRegular, i, &font); GdipGetFontSize (font, &size); ok (size == 24, "Expected 24, got %f (with unit: %d)\n", size, i); GdipGetFontUnit (font, &unit); expect (i, unit); GdipDeleteFont(font); } GdipDeleteFontFamily(fontfamily); }
static void test_getgenerics (void) { GpStatus stat; GpFontFamily* family; WCHAR familyName[LF_FACESIZE]; ZeroMemory(familyName, sizeof(familyName)/sizeof(WCHAR)); stat = GdipGetGenericFontFamilySansSerif (&family); if (stat == FontFamilyNotFound) { skip("Microsoft Sans Serif not installed\n"); goto serif; } expect (Ok, stat); stat = GdipGetFamilyName (family, familyName, LANG_NEUTRAL); expect (Ok, stat); if (!lstrcmpiW(familyName, Tahoma)) todo_wine ok ((lstrcmpiW(familyName, MicrosoftSansSerif) == 0), "Expected Microsoft Sans Serif, got Tahoma\n"); else ok ((lstrcmpiW(familyName, MicrosoftSansSerif) == 0), "Expected Microsoft Sans Serif, got %s\n", wine_dbgstr_w(familyName)); stat = GdipDeleteFontFamily (family); expect (Ok, stat); serif: stat = GdipGetGenericFontFamilySerif (&family); if (stat == FontFamilyNotFound) { skip("Times New Roman not installed\n"); goto monospace; } expect (Ok, stat); stat = GdipGetFamilyName (family, familyName, LANG_NEUTRAL); expect (Ok, stat); ok (lstrcmpiW(familyName, TimesNewRoman) == 0, "Expected Times New Roman, got %s\n", wine_dbgstr_w(familyName)); stat = GdipDeleteFontFamily (family); expect (Ok, stat); monospace: stat = GdipGetGenericFontFamilyMonospace (&family); if (stat == FontFamilyNotFound) { skip("Courier New not installed\n"); return; } expect (Ok, stat); stat = GdipGetFamilyName (family, familyName, LANG_NEUTRAL); expect (Ok, stat); ok (lstrcmpiW(familyName, CourierNew) == 0, "Expected Courier New, got %s\n", wine_dbgstr_w(familyName)); stat = GdipDeleteFontFamily (family); expect (Ok, stat); }
static void test_fontfamily (void) { GpFontFamily *family, *clonedFontFamily; WCHAR itsName[LF_FACESIZE]; GpStatus stat; /* FontFamily cannot be NULL */ stat = GdipCreateFontFamilyFromName (arial , NULL, NULL); expect (InvalidParameter, stat); /* FontFamily must be able to actually find the family. * If it can't, any subsequent calls should fail. */ stat = GdipCreateFontFamilyFromName (nonexistent, NULL, &family); expect (FontFamilyNotFound, stat); /* Bitmap fonts are not found */ todo_wine { stat = GdipCreateFontFamilyFromName (MSSansSerif, NULL, &family); expect (FontFamilyNotFound, stat); } stat = GdipCreateFontFamilyFromName (arial, NULL, &family); if(stat == FontFamilyNotFound) { skip("Arial not installed\n"); return; } expect (Ok, stat); stat = GdipGetFamilyName (family, itsName, LANG_NEUTRAL); expect (Ok, stat); expect (0, lstrcmpiW(itsName, arial)); if (0) { /* Crashes on Windows XP SP2, Vista, and so Wine as well */ stat = GdipGetFamilyName (family, NULL, LANG_NEUTRAL); expect (Ok, stat); } /* Make sure we don't read old data */ ZeroMemory (itsName, sizeof(itsName)); stat = GdipCloneFontFamily(family, &clonedFontFamily); expect (Ok, stat); GdipDeleteFontFamily(family); stat = GdipGetFamilyName(clonedFontFamily, itsName, LANG_NEUTRAL); expect(Ok, stat); expect(0, lstrcmpiW(itsName, arial)); GdipDeleteFontFamily(clonedFontFamily); }
static void test_fontfamily_properties (void) { GpFontFamily* FontFamily = NULL; GpStatus stat; UINT16 result = 0; stat = GdipCreateFontFamilyFromName(arial, NULL, &FontFamily); if(stat == FontFamilyNotFound) skip("Arial not installed\n"); else { stat = GdipGetLineSpacing(FontFamily, FontStyleRegular, &result); expect(Ok, stat); ok (result == 2355, "Expected 2355, got %d\n", result); result = 0; stat = GdipGetEmHeight(FontFamily, FontStyleRegular, &result); expect(Ok, stat); ok(result == 2048, "Expected 2048, got %d\n", result); result = 0; stat = GdipGetCellAscent(FontFamily, FontStyleRegular, &result); expect(Ok, stat); ok(result == 1854, "Expected 1854, got %d\n", result); result = 0; stat = GdipGetCellDescent(FontFamily, FontStyleRegular, &result); ok(result == 434, "Expected 434, got %d\n", result); GdipDeleteFontFamily(FontFamily); } stat = GdipCreateFontFamilyFromName(TimesNewRoman, NULL, &FontFamily); if(stat == FontFamilyNotFound) skip("Times New Roman not installed\n"); else { result = 0; stat = GdipGetLineSpacing(FontFamily, FontStyleRegular, &result); expect(Ok, stat); ok(result == 2355, "Expected 2355, got %d\n", result); result = 0; stat = GdipGetEmHeight(FontFamily, FontStyleRegular, &result); expect(Ok, stat); ok(result == 2048, "Expected 2048, got %d\n", result); result = 0; stat = GdipGetCellAscent(FontFamily, FontStyleRegular, &result); expect(Ok, stat); ok(result == 1825, "Expected 1825, got %d\n", result); result = 0; stat = GdipGetCellDescent(FontFamily, FontStyleRegular, &result); ok(result == 443, "Expected 443 got %d\n", result); GdipDeleteFontFamily(FontFamily); } }
static void gdip_get_font_metrics(GpFont *font, struct font_metrics *fm) { INT style; GpFontFamily *family; GpStatus stat; stat = GdipGetFontStyle(font, &style); expect(Ok, stat); stat = GdipGetFontHeight(font, NULL, &fm->font_height); expect(Ok, stat); stat = GdipGetFontSize(font, &fm->font_size); expect(Ok, stat); fm->lfHeight = (INT)(fm->font_size * -1.0); stat = GdipGetFamily(font, &family); expect(Ok, stat); stat = GdipGetEmHeight(family, style, &fm->em_height); expect(Ok, stat); stat = GdipGetLineSpacing(family, style, &fm->line_spacing); expect(Ok, stat); stat = GdipGetCellAscent(family, style, &fm->ascent); expect(Ok, stat); stat = GdipGetCellDescent(family, style, &fm->descent); expect(Ok, stat); GdipDeleteFontFamily(family); }
/***************************************************************************** * GdipGetFontCollectionFamilyList [GDIPLUS.@] */ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList( GpFontCollection* fontCollection, INT numSought, GpFontFamily* gpfamilies[], INT* numFound) { INT i; GpStatus stat=Ok; TRACE("%p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, numFound); if (!(fontCollection && gpfamilies && numFound)) return InvalidParameter; memset(gpfamilies, 0, sizeof(*gpfamilies) * numSought); for (i = 0; i < numSought && i < fontCollection->count && stat == Ok; i++) { stat = GdipCloneFontFamily(fontCollection->FontFamilies[i], &gpfamilies[i]); } if (stat == Ok) *numFound = i; else { int numToFree=i; for (i=0; i<numToFree; i++) { GdipDeleteFontFamily(gpfamilies[i]); gpfamilies[i] = NULL; } } return stat; }
static GF_Err gdip_set_font(GF_FontReader *dr, const char *fontName, u32 styles) { WCHAR wcFontName[GDIP_MAX_STRING_SIZE]; FontPriv *ctx = (FontPriv *)dr->udta; if (ctx->font) GdipDeleteFontFamily(ctx->font); ctx->font = NULL; if (fontName && strlen(fontName) >= GDIP_MAX_STRING_SIZE) fontName = NULL; if (!fontName || !strlen(fontName) ) fontName = ctx->font_serif; else if (!stricmp(fontName, "SANS") || !stricmp(fontName, "sans-serif")) fontName = ctx->font_sans; else if (!stricmp(fontName, "SERIF")) fontName = ctx->font_serif; else if (!stricmp(fontName, "TYPEWRITER") || !stricmp(fontName, "monospace")) fontName = ctx->font_fixed; MultiByteToWideChar(CP_ACP, 0, fontName, strlen(fontName)+1, wcFontName, sizeof(wcFontName)/sizeof(wcFontName[0]) ); GdipCreateFontFamilyFromName(wcFontName, NULL, &ctx->font); if (!ctx->font) return GF_NOT_SUPPORTED; //setup styles ctx->font_style = 0; if (styles & GF_FONT_WEIGHT_BOLD ) ctx->font_style |= FontStyleBold; if (styles & GF_FONT_ITALIC) ctx->font_style |= FontStyleItalic; if (styles & GF_FONT_UNDERLINED) ctx->font_style |= FontStyleUnderline; if (styles & GF_FONT_STRIKEOUT) ctx->font_style |= FontStyleStrikeout; return GF_OK; }
static void test_fontfamily (void) { GpFontFamily** family = NULL; WCHAR itsName[LF_FACESIZE]; GpStatus stat; /* FontFamily can not be NULL */ stat = GdipCreateFontFamilyFromName (arial , NULL, family); expect (InvalidParameter, stat); family = GdipAlloc (sizeof (GpFontFamily*)); /* FontFamily must be able to actually find the family. * If it can't, any subsequent calls should fail * * We currently fail (meaning we don't) because we don't actually * test to see if we can successfully get a family */ stat = GdipCreateFontFamilyFromName (nonexistant, NULL, family); expect (FontFamilyNotFound, stat); stat = GdipGetFamilyName (*family,itsName, LANG_NEUTRAL); expect (InvalidParameter, stat); ok ((lstrcmpiW(itsName,nonexistant) != 0), "Expected a non-zero value for nonexistant font!\n"); stat = GdipDeleteFontFamily(*family); expect (InvalidParameter, stat); stat = GdipCreateFontFamilyFromName (arial, NULL, family); expect (Ok, stat); stat = GdipGetFamilyName (*family, itsName, LANG_NEUTRAL); expect (Ok, stat); expect (0, lstrcmpiW(itsName,arial)); if (0) { /* Crashes on Windows XP SP2, Vista, and so Wine as well */ stat = GdipGetFamilyName (*family, NULL, LANG_NEUTRAL); expect (Ok, stat); } stat = GdipDeleteFontFamily(*family); expect (Ok, stat); if (family) GdipFree (family); }
void free_installed_fonts(void) { while (installedFontCollection.count) GdipDeleteFontFamily(installedFontCollection.FontFamilies[--installedFontCollection.count]); HeapFree(GetProcessHeap(), 0, installedFontCollection.FontFamilies); installedFontCollection.FontFamilies = NULL; installedFontCollection.allocated = 0; }
M4Err gdip_shutdown_font_engine(FontRaster *dr) { FontPriv *ctx = (FontPriv *)dr->priv; if (ctx->font) GdipDeleteFontFamily(ctx->font); ctx->font = NULL; /*nothing to do*/ return M4OK; }
GF_Err gdip_shutdown_font_engine(GF_FontReader *dr) { FontPriv *ctx = (FontPriv *)dr->udta; if (ctx->font) GdipDeleteFontFamily(ctx->font); ctx->font = NULL; /*nothing to do*/ return GF_OK; }
void gdip_delete_font_driver(FontRaster *dr) { FontPriv *ctx = (FontPriv *)dr->priv; GdiplusShutdown(ctx->gdiToken); if (ctx->font) GdipDeleteFontFamily(ctx->font); ctx->font = NULL; free(dr->priv); free(dr); }
void gdip_delete_font_driver(GF_FontReader *dr) { FontPriv *ctx = (FontPriv *)dr->udta; GdiplusShutdown(ctx->gdiToken); if (ctx->font) GdipDeleteFontFamily(ctx->font); ctx->font = NULL; gf_free(dr->udta); gf_free(dr); }
/******************************************************************************* * GdipDeleteFont [GDIPLUS.@] */ GpStatus WINGDIPAPI GdipDeleteFont(GpFont* font) { TRACE("(%p)\n", font); if(!font) return InvalidParameter; GdipDeleteFontFamily(font->family); GdipFree(font); return Ok; }
static void test_getgenerics (void) { GpStatus stat; GpFontFamily** family; WCHAR familyName[LF_FACESIZE]; ZeroMemory(familyName, sizeof(familyName)/sizeof(WCHAR)); family = GdipAlloc (sizeof (GpFontFamily*)); stat = GdipGetGenericFontFamilySansSerif (family); expect (Ok, stat); stat = GdipGetFamilyName (*family, familyName, LANG_NEUTRAL); expect (Ok, stat); ok ((lstrcmpiW(familyName, MicrosoftSansSerif) == 0) || (lstrcmpiW(familyName,MSSansSerif) == 0), "Expected Microsoft Sans Serif or MS Sans Serif, got %s\n", debugstr_w(familyName)); stat = GdipDeleteFontFamily (*family); expect (Ok, stat); stat = GdipGetGenericFontFamilySerif (family); expect (Ok, stat); stat = GdipGetFamilyName (*family, familyName, LANG_NEUTRAL); expect (Ok, stat); ok (lstrcmpiW(familyName, TimesNewRoman) == 0, "Expected Times New Roman, got %s\n", debugstr_w(familyName)); stat = GdipDeleteFontFamily (*family); expect (Ok, stat); stat = GdipGetGenericFontFamilyMonospace (family); expect (Ok, stat); stat = GdipGetFamilyName (*family, familyName, LANG_NEUTRAL); expect (Ok, stat); ok (lstrcmpiW(familyName, CourierNew) == 0, "Expected Courier New, got %s\n", debugstr_w(familyName)); stat = GdipDeleteFontFamily (*family); expect (Ok, stat); GdipFree (family); }
static void check_family(const char* context, GpFontFamily *family, WCHAR *name) { GpStatus stat; GpFont* font; *name = 0; stat = GdipGetFamilyName(family, name, LANG_NEUTRAL); ok(stat == Ok, "could not get the %s family name: %.8x\n", context, stat); stat = GdipCreateFont(family, 12, FontStyleRegular, UnitPixel, &font); ok(stat == Ok, "could not create a font for the %s family: %.8x\n", context, stat); if (stat == Ok) { stat = GdipDeleteFont(font); ok(stat == Ok, "could not delete the %s family font: %.8x\n", context, stat); } stat = GdipDeleteFontFamily(family); ok(stat == Ok, "could not delete the %s family: %.8x\n", context, stat); }
static M4Err gdip_set_font(FontRaster *dr, const char *fontName, const char *styles) { WCHAR wcFontName[GDIP_MAX_STRING_SIZE]; FontPriv *ctx = (FontPriv *)dr->priv; if (ctx->font) GdipDeleteFontFamily(ctx->font); ctx->font = NULL; if (fontName && strlen(fontName) >= GDIP_MAX_STRING_SIZE) fontName = NULL; if (!fontName || !strlen(fontName) ) fontName = ctx->font_serif; else if (!strcmp(fontName, "SANS")) fontName = ctx->font_sans; else if (!strcmp(fontName, "SERIF")) fontName = ctx->font_serif; else if (!strcmp(fontName, "TYPEWRITER")) fontName = ctx->font_fixed; MultiByteToWideChar(CP_ACP, 0, fontName, strlen(fontName)+1, wcFontName, sizeof(wcFontName)/sizeof(wcFontName[0]) ); GdipCreateFontFamilyFromName(wcFontName, NULL, &ctx->font); if (!ctx->font) return M4NotSupported; //setup styles ctx->font_style = 0; if (styles) { if (strstr(styles, "BOLDITALIC")) ctx->font_style |= FontStyleBoldItalic; else if (strstr(styles, "BOLD")) ctx->font_style |= FontStyleBold; else if (strstr(styles, "ITALIC")) ctx->font_style |= FontStyleItalic; if (strstr(styles, "UNDERLINED")) { ctx->font_style |= FontStyleUnderline; } if (strstr(styles, "STRIKEOUT")) { ctx->font_style |= FontStyleStrikeout; } } return M4OK; }
static void test_logfont(void) { LOGFONTA lfa, lfa2; GpFont *font; GpFontFamily *family; GpStatus stat; GpGraphics *graphics; HDC hdc = GetDC(0); INT style; REAL rval; UINT16 em_height, line_spacing; Unit unit; GdipCreateFromHDC(hdc, &graphics); memset(&lfa, 0, sizeof(LOGFONTA)); memset(&lfa2, 0xff, sizeof(LOGFONTA)); lstrcpyA(lfa.lfFaceName, "Tahoma"); stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font); expect(Ok, stat); stat = GdipGetLogFontA(font, graphics, &lfa2); expect(Ok, stat); ok(lfa2.lfHeight < 0, "Expected negative height\n"); expect(0, lfa2.lfWidth); expect(0, lfa2.lfEscapement); expect(0, lfa2.lfOrientation); ok((lfa2.lfWeight >= 100) && (lfa2.lfWeight <= 900), "Expected weight to be set\n"); expect(0, lfa2.lfItalic); expect(0, lfa2.lfUnderline); expect(0, lfa2.lfStrikeOut); ok(lfa2.lfCharSet == GetTextCharset(hdc) || lfa2.lfCharSet == ANSI_CHARSET, "Expected %x or %x, got %x\n", GetTextCharset(hdc), ANSI_CHARSET, lfa2.lfCharSet); expect(0, lfa2.lfOutPrecision); expect(0, lfa2.lfClipPrecision); expect(0, lfa2.lfQuality); expect(0, lfa2.lfPitchAndFamily); GdipDeleteFont(font); memset(&lfa, 0, sizeof(LOGFONTA)); lfa.lfHeight = 25; lfa.lfWidth = 25; lfa.lfEscapement = lfa.lfOrientation = 50; lfa.lfItalic = lfa.lfUnderline = lfa.lfStrikeOut = TRUE; memset(&lfa2, 0xff, sizeof(LOGFONTA)); lstrcpyA(lfa.lfFaceName, "Tahoma"); stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font); expect(Ok, stat); stat = GdipGetLogFontA(font, graphics, &lfa2); expect(Ok, stat); ok(lfa2.lfHeight < 0, "Expected negative height\n"); expect(0, lfa2.lfWidth); expect(0, lfa2.lfEscapement); expect(0, lfa2.lfOrientation); ok((lfa2.lfWeight >= 100) && (lfa2.lfWeight <= 900), "Expected weight to be set\n"); expect(TRUE, lfa2.lfItalic); expect(TRUE, lfa2.lfUnderline); expect(TRUE, lfa2.lfStrikeOut); ok(lfa2.lfCharSet == GetTextCharset(hdc) || lfa2.lfCharSet == ANSI_CHARSET, "Expected %x or %x, got %x\n", GetTextCharset(hdc), ANSI_CHARSET, lfa2.lfCharSet); expect(0, lfa2.lfOutPrecision); expect(0, lfa2.lfClipPrecision); expect(0, lfa2.lfQuality); expect(0, lfa2.lfPitchAndFamily); stat = GdipGetFontStyle(font, &style); expect(Ok, stat); ok (style == (FontStyleItalic | FontStyleUnderline | FontStyleStrikeout), "Expected , got %d\n", style); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitWorld, unit); stat = GdipGetFontHeight(font, graphics, &rval); expect(Ok, stat); expectf(25.347656, rval); stat = GdipGetFontSize(font, &rval); expect(Ok, stat); expectf(21.0, rval); stat = GdipGetFamily(font, &family); expect(Ok, stat); stat = GdipGetEmHeight(family, FontStyleRegular, &em_height); expect(Ok, stat); expect(2048, em_height); stat = GdipGetLineSpacing(family, FontStyleRegular, &line_spacing); expect(Ok, stat); expect(2472, line_spacing); GdipDeleteFontFamily(family); GdipDeleteFont(font); memset(&lfa, 0, sizeof(lfa)); lfa.lfHeight = -25; lstrcpyA(lfa.lfFaceName, "Tahoma"); stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font); expect(Ok, stat); memset(&lfa2, 0xff, sizeof(lfa2)); stat = GdipGetLogFontA(font, graphics, &lfa2); expect(Ok, stat); expect(lfa.lfHeight, lfa2.lfHeight); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitWorld, unit); stat = GdipGetFontHeight(font, graphics, &rval); expect(Ok, stat); expectf(30.175781, rval); stat = GdipGetFontSize(font, &rval); expect(Ok, stat); expectf(25.0, rval); stat = GdipGetFamily(font, &family); expect(Ok, stat); stat = GdipGetEmHeight(family, FontStyleRegular, &em_height); expect(Ok, stat); expect(2048, em_height); stat = GdipGetLineSpacing(family, FontStyleRegular, &line_spacing); expect(Ok, stat); expect(2472, line_spacing); GdipDeleteFontFamily(family); GdipDeleteFont(font); GdipDeleteGraphics(graphics); ReleaseDC(0, hdc); }
static void test_font_substitution(void) { WCHAR ms_shell_dlg[LF_FACESIZE]; HDC hdc; HFONT hfont; LOGFONTA lf; GpStatus status; GpGraphics *graphics; GpFont *font; GpFontFamily *family; int ret; hdc = CreateCompatibleDC(0); status = GdipCreateFromHDC(hdc, &graphics); expect(Ok, status); hfont = GetStockObject(DEFAULT_GUI_FONT); ok(hfont != 0, "GetStockObject(DEFAULT_GUI_FONT) failed\n"); memset(&lf, 0xfe, sizeof(lf)); ret = GetObjectA(hfont, sizeof(lf), &lf); ok(ret == sizeof(lf), "GetObject failed\n"); ok(!lstrcmpA(lf.lfFaceName, "MS Shell Dlg"), "wrong face name %s\n", lf.lfFaceName); MultiByteToWideChar(CP_ACP, 0, lf.lfFaceName, -1, ms_shell_dlg, LF_FACESIZE); status = GdipCreateFontFromLogfontA(hdc, &lf, &font); expect(Ok, status); memset(&lf, 0xfe, sizeof(lf)); status = GdipGetLogFontA(font, graphics, &lf); expect(Ok, status); ok(!lstrcmpA(lf.lfFaceName, "Microsoft Sans Serif") || !lstrcmpA(lf.lfFaceName, "Tahoma"), "wrong face name %s\n", lf.lfFaceName); GdipDeleteFont(font); status = GdipCreateFontFamilyFromName(ms_shell_dlg, NULL, &family); expect(Ok, status); status = GdipCreateFont(family, 12, FontStyleRegular, UnitPoint, &font); expect(Ok, status); memset(&lf, 0xfe, sizeof(lf)); status = GdipGetLogFontA(font, graphics, &lf); expect(Ok, status); ok(!lstrcmpA(lf.lfFaceName, "Microsoft Sans Serif") || !lstrcmpA(lf.lfFaceName, "Tahoma"), "wrong face name %s\n", lf.lfFaceName); GdipDeleteFont(font); GdipDeleteFontFamily(family); status = GdipCreateFontFamilyFromName(nonexistent, NULL, &family); ok(status == FontFamilyNotFound, "expected FontFamilyNotFound, got %d\n", status); lstrcpyA(lf.lfFaceName, "ThisFontShouldNotExist"); status = GdipCreateFontFromLogfontA(hdc, &lf, &font); expect(Ok, status); memset(&lf, 0xfe, sizeof(lf)); status = GdipGetLogFontA(font, graphics, &lf); expect(Ok, status); ok(!lstrcmpA(lf.lfFaceName, "Arial"), "wrong face name %s\n", lf.lfFaceName); GdipDeleteFont(font); /* empty FaceName */ lf.lfFaceName[0] = 0; status = GdipCreateFontFromLogfontA(hdc, &lf, &font); expect(Ok, status); memset(&lf, 0xfe, sizeof(lf)); status = GdipGetLogFontA(font, graphics, &lf); expect(Ok, status); ok(!lstrcmpA(lf.lfFaceName, "Arial"), "wrong face name %s\n", lf.lfFaceName); GdipDeleteFont(font); /* zeroing out lfWeight and lfCharSet leads to font creation failure */ lf.lfWeight = 0; lf.lfCharSet = 0; lstrcpyA(lf.lfFaceName, "ThisFontShouldNotExist"); font = NULL; status = GdipCreateFontFromLogfontA(hdc, &lf, &font); todo_wine ok(status == NotTrueTypeFont || broken(status == FileNotFound), /* before XP */ "expected NotTrueTypeFont, got %d\n", status); /* FIXME: remove when wine is fixed */ if (font) GdipDeleteFont(font); /* empty FaceName */ lf.lfFaceName[0] = 0; font = NULL; status = GdipCreateFontFromLogfontA(hdc, &lf, &font); todo_wine ok(status == NotTrueTypeFont || broken(status == FileNotFound), /* before XP */ "expected NotTrueTypeFont, got %d\n", status); /* FIXME: remove when wine is fixed */ if (font) GdipDeleteFont(font); GdipDeleteGraphics(graphics); DeleteDC(hdc); }
static void test_font_metrics(void) { LOGFONTW lf; GpFont *font; GpFontFamily *family; GpGraphics *graphics; GpStatus stat; Unit unit; struct font_metrics fm_gdi, fm_gdip; HDC hdc; hdc = CreateCompatibleDC(0); stat = GdipCreateFromHDC(hdc, &graphics); expect(Ok, stat); memset(&lf, 0, sizeof(lf)); /* Tahoma,-13 */ lstrcpyW(lf.lfFaceName, Tahoma); lf.lfHeight = -13; stat = GdipCreateFontFromLogfontW(hdc, &lf, &font); expect(Ok, stat); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitWorld, unit); gdip_get_font_metrics(font, &fm_gdip); trace("gdiplus:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdip.em_height, fm_gdip.line_spacing, fm_gdip.ascent, fm_gdip.descent, fm_gdip.font_height, fm_gdip.font_size); gdi_get_font_metrics(&lf, &fm_gdi); trace("gdi:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdi.em_height, fm_gdi.line_spacing, fm_gdi.ascent, fm_gdi.descent, fm_gdi.font_height, fm_gdi.font_size); cmp_font_metrics(&fm_gdip, &fm_gdi, __LINE__); stat = GdipGetLogFontW(font, graphics, &lf); expect(Ok, stat); ok(lf.lfHeight < 0, "lf.lfHeight should be negative, got %d\n", lf.lfHeight); gdi_get_font_metrics(&lf, &fm_gdi); trace("gdi:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdi.em_height, fm_gdi.line_spacing, fm_gdi.ascent, fm_gdi.descent, fm_gdi.font_height, fm_gdi.font_size); ok((REAL)lf.lfHeight * -1.0 == fm_gdi.font_size, "expected %f, got %f\n", (REAL)lf.lfHeight * -1.0, fm_gdi.font_size); cmp_font_metrics(&fm_gdip, &fm_gdi, __LINE__); GdipDeleteFont(font); /* Tahoma,13 */ lstrcpyW(lf.lfFaceName, Tahoma); lf.lfHeight = 13; stat = GdipCreateFontFromLogfontW(hdc, &lf, &font); expect(Ok, stat); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitWorld, unit); gdip_get_font_metrics(font, &fm_gdip); trace("gdiplus:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdip.em_height, fm_gdip.line_spacing, fm_gdip.ascent, fm_gdip.descent, fm_gdip.font_height, fm_gdip.font_size); gdi_get_font_metrics(&lf, &fm_gdi); trace("gdi:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdi.em_height, fm_gdi.line_spacing, fm_gdi.ascent, fm_gdi.descent, fm_gdi.font_height, fm_gdi.font_size); cmp_font_metrics(&fm_gdip, &fm_gdi, __LINE__); stat = GdipGetLogFontW(font, graphics, &lf); expect(Ok, stat); ok(lf.lfHeight < 0, "lf.lfHeight should be negative, got %d\n", lf.lfHeight); gdi_get_font_metrics(&lf, &fm_gdi); trace("gdi:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdi.em_height, fm_gdi.line_spacing, fm_gdi.ascent, fm_gdi.descent, fm_gdi.font_height, fm_gdi.font_size); ok((REAL)lf.lfHeight * -1.0 == fm_gdi.font_size, "expected %f, got %f\n", (REAL)lf.lfHeight * -1.0, fm_gdi.font_size); cmp_font_metrics(&fm_gdip, &fm_gdi, __LINE__); GdipDeleteFont(font); stat = GdipCreateFontFamilyFromName(Tahoma, NULL, &family); expect(Ok, stat); /* Tahoma,13 */ stat = GdipCreateFont(family, 13.0, FontStyleRegular, UnitPixel, &font); expect(Ok, stat); gdip_get_font_metrics(font, &fm_gdip); trace("gdiplus:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdip.em_height, fm_gdip.line_spacing, fm_gdip.ascent, fm_gdip.descent, fm_gdip.font_height, fm_gdip.font_size); stat = GdipGetLogFontW(font, graphics, &lf); expect(Ok, stat); ok(lf.lfHeight < 0, "lf.lfHeight should be negative, got %d\n", lf.lfHeight); gdi_get_font_metrics(&lf, &fm_gdi); trace("gdi:\n"); trace("%s,%d: EmHeight %u, LineSpacing %u, CellAscent %u, CellDescent %u, FontHeight %f, FontSize %f\n", wine_dbgstr_w(lf.lfFaceName), lf.lfHeight, fm_gdi.em_height, fm_gdi.line_spacing, fm_gdi.ascent, fm_gdi.descent, fm_gdi.font_height, fm_gdi.font_size); ok((REAL)lf.lfHeight * -1.0 == fm_gdi.font_size, "expected %f, got %f\n", (REAL)lf.lfHeight * -1.0, fm_gdi.font_size); cmp_font_metrics(&fm_gdip, &fm_gdi, __LINE__); stat = GdipGetLogFontW(font, NULL, &lf); expect(InvalidParameter, stat); GdipDeleteFont(font); stat = GdipCreateFont(family, -13.0, FontStyleRegular, UnitPixel, &font); expect(InvalidParameter, stat); GdipDeleteFontFamily(family); GdipDeleteGraphics(graphics); DeleteDC(hdc); }
static void test_heightgivendpi(void) { GpStatus stat; GpFont* font = NULL; GpFontFamily* fontfamily = NULL; REAL height; Unit unit; stat = GdipCreateFontFamilyFromName(Tahoma, NULL, &fontfamily); expect(Ok, stat); stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitPixel, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(NULL, 96, &height); expect(InvalidParameter, stat); stat = GdipGetFontHeightGivenDPI(font, 96, NULL); expect(InvalidParameter, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf(36.210938, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitWorld, &font); expect(Ok, stat); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitWorld, unit); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf(36.210938, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitPoint, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf(48.281250, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitInch, &font); expect(Ok, stat); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitInch, unit); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf(3476.250000, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitDocument, &font); expect(Ok, stat); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitDocument, unit); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf(11.587500, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitMillimeter, &font); expect(Ok, stat); stat = GdipGetFontUnit(font, &unit); expect(Ok, stat); expect(UnitMillimeter, unit); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf(136.860245, height); GdipDeleteFont(font); GdipDeleteFontFamily(fontfamily); }
static void test_heightgivendpi(void) { GpStatus stat; GpFont* font = NULL; GpFontFamily* fontfamily = NULL; REAL height; stat = GdipCreateFontFamilyFromName(arial, NULL, &fontfamily); if(stat == FontFamilyNotFound) { skip("Arial not installed\n"); return; } expect(Ok, stat); stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitPixel, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(NULL, 96, &height); expect(InvalidParameter, stat); stat = GdipGetFontHeightGivenDPI(font, 96, NULL); expect(InvalidParameter, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf((REAL)34.497070, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitWorld, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf((REAL)34.497070, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitPoint, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf((REAL)45.996094, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitInch, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf((REAL)3311.718750, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitDocument, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf((REAL)11.039062, height); GdipDeleteFont(font); height = 12345; stat = GdipCreateFont(fontfamily, 30, FontStyleRegular, UnitMillimeter, &font); expect(Ok, stat); stat = GdipGetFontHeightGivenDPI(font, 96, &height); expect(Ok, stat); expectf((REAL)130.382614, height); GdipDeleteFont(font); GdipDeleteFontFamily(fontfamily); }