Nikolay Sivov : gdiplus: GdipGetStringFormatTabStopCount implementation with tests.
Alexandre Julliard
julliard at winehq.org
Wed Jul 30 08:36:02 CDT 2008
Module: wine
Branch: master
Commit: 4a08c13ba90441995991b9697e7b5cc77ad61d0d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4a08c13ba90441995991b9697e7b5cc77ad61d0d
Author: Nikolay Sivov <bunglehead at 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);
More information about the wine-cvs
mailing list