Module: wine Branch: master Commit: 4a08c13ba90441995991b9697e7b5cc77ad61d0d URL: http://source.winehq.org/git/wine.git/?a=commit;h=4a08c13ba90441995991b9697e...
Author: Nikolay Sivov bunglehead@gmail.com Date: Wed Jul 30 15:06:39 2008 +0400
gdiplus: GdipGetStringFormatTabStopCount implementation with tests.
---
dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/gdiplus_private.h | 3 +++ dlls/gdiplus/stringformat.c | 28 +++++++++++++++++++++++++++- dlls/gdiplus/tests/stringformat.c | 30 ++++++++++++++++++++++++++++++ include/gdiplusflat.h | 1 + 5 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 0579ebe..e645f06 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -392,7 +392,7 @@ @ stdcall GdipGetStringFormatHotkeyPrefix(ptr ptr) @ stdcall GdipGetStringFormatLineAlign(ptr ptr) @ stdcall GdipGetStringFormatMeasurableCharacterRangeCount(ptr ptr) -@ stub GdipGetStringFormatTabStopCount +@ stdcall GdipGetStringFormatTabStopCount(ptr ptr) @ stub GdipGetStringFormatTabStops @ stdcall GdipGetStringFormatTrimming(ptr ptr) @ stub GdipGetTextContrast diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h index cb5f821..b445a58 100644 --- a/dlls/gdiplus/gdiplus_private.h +++ b/dlls/gdiplus/gdiplus_private.h @@ -194,6 +194,9 @@ struct GpStringFormat{ HotkeyPrefix hkprefix; StringAlignment vertalign; StringDigitSubstitute digitsub; + INT tabcount; + REAL firsttab; + REAL *tabs; };
struct GpFontCollection{ diff --git a/dlls/gdiplus/stringformat.c b/dlls/gdiplus/stringformat.c index 1be075b..2c37d81 100644 --- a/dlls/gdiplus/stringformat.c +++ b/dlls/gdiplus/stringformat.c @@ -46,6 +46,10 @@ GpStatus WINGDIPAPI GdipCreateStringFormat(INT attr, LANGID lang, (*format)->digitlang = LANG_NEUTRAL; (*format)->trimming = StringTrimmingCharacter; (*format)->digitsub = StringDigitSubstituteUser; + /* tabstops */ + (*format)->tabcount = 0; + (*format)->firsttab = 0.0; + (*format)->tabs = NULL;
return Ok; } @@ -55,6 +59,7 @@ GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat *format) if(!format) return InvalidParameter;
+ GdipFree(format->tabs); GdipFree(format);
return Ok; @@ -137,6 +142,17 @@ GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( return NotImplemented; }
+GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat *format, + INT *count) +{ + if(!format || !count) + return InvalidParameter; + + *count = format->tabcount; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat *format, StringTrimming *trimming) { @@ -233,12 +249,22 @@ GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat *format, GpSt
**newFormat = *format;
+ if(format->tabcount > 0){ + (*newFormat)->tabs = GdipAlloc(sizeof(REAL) * format->tabcount); + if(!(*newFormat)->tabs){ + GdipFree(*newFormat); + return OutOfMemory; + } + memcpy((*newFormat)->tabs, format->tabs, sizeof(REAL) * format->tabcount); + } + else + (*newFormat)->tabs = NULL; + TRACE("%p %p\n",format,newFormat);
return Ok; }
-/*FIXME: add zero tab stops number */ GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **format) { GpStatus stat; diff --git a/dlls/gdiplus/tests/stringformat.c b/dlls/gdiplus/tests/stringformat.c index ae93104..376173c 100644 --- a/dlls/gdiplus/tests/stringformat.c +++ b/dlls/gdiplus/tests/stringformat.c @@ -140,6 +140,7 @@ static void test_getgenerictypographic(void) StringTrimming trimming; StringDigitSubstitute digitsub; LANGID digitlang; + INT tabcount;
/* NULL arg */ stat = GdipStringFormatGetGenericTypographic(NULL); @@ -154,6 +155,7 @@ static void test_getgenerictypographic(void) GdipGetStringFormatHotkeyPrefix(format, &n); GdipGetStringFormatTrimming(format, &trimming); GdipGetStringFormatDigitSubstitution(format, &digitlang, &digitsub); + GdipGetStringFormatTabStopCount(format, &tabcount);
expect((StringFormatFlagsNoFitBlackBox |StringFormatFlagsLineLimit | StringFormatFlagsNoClip), flags); @@ -163,6 +165,33 @@ static void test_getgenerictypographic(void) expect(StringTrimmingNone, trimming); expect(StringDigitSubstituteUser, digitsub); expect(LANG_NEUTRAL, digitlang); + expect(0, tabcount); + + stat = GdipDeleteStringFormat(format); + expect(Ok, stat); +} + +static void test_tabstops(void) +{ + GpStringFormat *format; + GpStatus stat; + INT count; + + stat = GdipCreateStringFormat(0, LANG_NEUTRAL, &format); + expect(Ok, stat); + + /* NULL */ + stat = GdipGetStringFormatTabStopCount(NULL, NULL); + expect(InvalidParameter, stat); + stat = GdipGetStringFormatTabStopCount(NULL, &count); + expect(InvalidParameter, stat); + stat = GdipGetStringFormatTabStopCount(format, NULL); + expect(InvalidParameter, stat); + + /* not NULL */ + stat = GdipGetStringFormatTabStopCount(format, &count); + expect(Ok, stat); + expect(0, count);
stat = GdipDeleteStringFormat(format); expect(Ok, stat); @@ -184,6 +213,7 @@ START_TEST(stringformat) test_characterrange(); test_digitsubstitution(); test_getgenerictypographic(); + test_tabstops();
GdiplusShutdown(gdiplusToken); } diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 963c9c6..9d1e9f1 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -444,6 +444,7 @@ GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,IN GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*); GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( GDIPCONST GpStringFormat*, INT*); +GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*); GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*); GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment); GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute);