Re: [PATCH 1/2] Implement GdipGetLogFontA (try3)
Was there something wrong with this patch series? On Tue, 2008-11-11 at 11:24 -0500, Adam Petaccia wrote:
Changelog: try3: Only copy the bytes we'll use Toss out bytesWritten try2: Fix memcpy() use Add documentation Add testcase --- dlls/gdiplus/font.c | 27 +++++++++++++++++++++++++++ dlls/gdiplus/gdiplus.spec | 2 +- include/gdiplusflat.h | 1 + 3 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c index 32713c7..7f815b6 100644 --- a/dlls/gdiplus/font.c +++ b/dlls/gdiplus/font.c @@ -368,6 +368,33 @@ GpStatus WINGDIPAPI GdipGetFontUnit(GpFont *font, Unit *unit) }
/******************************************************************************* + * GdipGetLogFontA [GDIPLUS.@] + * + * Converts a font into a LOGFONTA + * + * PARAMS + * font [I] GpFont to create LOGFONTA object + * graphics [I] Current graphics context + * lfa [O] Resulting LOGFONTA object + * RETURNS + * InvalidParameter: font, graphics, or lfa was NULL. + * Ok: otherwise + */ +GpStatus WINGDIPAPI GdipGetLogFontA(GpFont *font, GpGraphics *graphics, + LOGFONTA *lfa) +{ + /* FIXME: use graphics */ + if(!(font && graphics && lfa)) + return InvalidParameter; + + memcpy(lfa, &font->lfw, FIELD_OFFSET(LOGFONTA, lfFaceName)); + WideCharToMultiByte(CP_ACP, 0, font->lfw.lfFaceName, -1, + lfa->lfFaceName, LF_FACESIZE, NULL, NULL); + + return Ok; +} + +/******************************************************************************* * GdipGetLogFontW [GDIPLUS.@] */ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index c25d4b7..dce558c 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -311,7 +311,7 @@ @ stdcall GdipGetLineSpacing(ptr long ptr) @ stub GdipGetLineTransform @ stdcall GdipGetLineWrapMode(ptr ptr) -@ stub GdipGetLogFontA +@ stdcall GdipGetLogFontA(ptr ptr ptr) @ stdcall GdipGetLogFontW(ptr ptr ptr) @ stdcall GdipGetMatrixElements(ptr ptr) @ stub GdipGetMetafileDownLevelRasterizationLimit diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index ea4bec5..a2c6fc9 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -81,6 +81,7 @@ GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**); GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**); GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**); GpStatus WINGDIPAPI GdipDeleteFont(GpFont*); +GpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*); GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*); GpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**); GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*);
I can't say for sure, but I think you should share code with GdipGetLogFontW somehow (probably either calling it or adding a helper for both functions to call). Vincent Povirk On Mon, Nov 17, 2008 at 6:47 PM, Adam Petaccia <adam(a)tpetaccia.com> wrote:
Was there something wrong with this patch series?
On Tue, 2008-11-11 at 11:24 -0500, Adam Petaccia wrote:
Changelog: try3: Only copy the bytes we'll use Toss out bytesWritten try2: Fix memcpy() use Add documentation Add testcase --- dlls/gdiplus/font.c | 27 +++++++++++++++++++++++++++ dlls/gdiplus/gdiplus.spec | 2 +- include/gdiplusflat.h | 1 + 3 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c index 32713c7..7f815b6 100644 --- a/dlls/gdiplus/font.c +++ b/dlls/gdiplus/font.c @@ -368,6 +368,33 @@ GpStatus WINGDIPAPI GdipGetFontUnit(GpFont *font, Unit *unit) }
/******************************************************************************* + * GdipGetLogFontA [GDIPLUS.@] + * + * Converts a font into a LOGFONTA + * + * PARAMS + * font [I] GpFont to create LOGFONTA object + * graphics [I] Current graphics context + * lfa [O] Resulting LOGFONTA object + * RETURNS + * InvalidParameter: font, graphics, or lfa was NULL. + * Ok: otherwise + */ +GpStatus WINGDIPAPI GdipGetLogFontA(GpFont *font, GpGraphics *graphics, + LOGFONTA *lfa) +{ + /* FIXME: use graphics */ + if(!(font && graphics && lfa)) + return InvalidParameter; + + memcpy(lfa, &font->lfw, FIELD_OFFSET(LOGFONTA, lfFaceName)); + WideCharToMultiByte(CP_ACP, 0, font->lfw.lfFaceName, -1, + lfa->lfFaceName, LF_FACESIZE, NULL, NULL); + + return Ok; +} + +/******************************************************************************* * GdipGetLogFontW [GDIPLUS.@] */ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index c25d4b7..dce558c 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -311,7 +311,7 @@ @ stdcall GdipGetLineSpacing(ptr long ptr) @ stub GdipGetLineTransform @ stdcall GdipGetLineWrapMode(ptr ptr) -@ stub GdipGetLogFontA +@ stdcall GdipGetLogFontA(ptr ptr ptr) @ stdcall GdipGetLogFontW(ptr ptr ptr) @ stdcall GdipGetMatrixElements(ptr ptr) @ stub GdipGetMetafileDownLevelRasterizationLimit diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index ea4bec5..a2c6fc9 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -81,6 +81,7 @@ GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**); GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**); GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**); GpStatus WINGDIPAPI GdipDeleteFont(GpFont*); +GpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*); GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*); GpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**); GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*);
participants (2)
-
Adam Petaccia -
Vincent Povirk