[Gdiplus 1/4] Implement GdipSetStringFormatMeasurableCharacterRanges
Adam Petaccia
adam at tpetaccia.com
Sat Aug 16 22:26:46 CDT 2008
Also, move a TRACE to the top.
---
dlls/gdiplus/gdiplus_private.h | 2 ++
dlls/gdiplus/stringformat.c | 28 +++++++++++++++++++++++++---
dlls/gdiplus/tests/stringformat.c | 4 ++--
3 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 3611239..7930be4 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -204,6 +204,8 @@ struct GpStringFormat{
INT tabcount;
REAL firsttab;
REAL *tabs;
+ CharacterRange *charranges;
+ INT charrangecount;
};
struct GpFontCollection{
diff --git a/dlls/gdiplus/stringformat.c b/dlls/gdiplus/stringformat.c
index 201201a..8a3e8cd 100644
--- a/dlls/gdiplus/stringformat.c
+++ b/dlls/gdiplus/stringformat.c
@@ -235,12 +235,19 @@ GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat *format,
GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(GpStringFormat*
format, INT rangeCount, GDIPCONST CharacterRange* ranges)
{
+ TRACE("%p, %d, %p\n", format, rangeCount, ranges);
+
if (!(format && rangeCount && ranges))
return InvalidParameter;
- FIXME("stub: %p, %d, %p\n", format, rangeCount, ranges);
+ format->charrangecount = rangeCount;
+ GdipFree(format->charranges);
+ format->charranges = GdipAlloc(sizeof(CharacterRange) * rangeCount);
+ if (format->charranges == NULL)
+ return OutOfMemory;
+ memcpy(format->charranges, ranges, sizeof(CharacterRange) * rangeCount);
- return NotImplemented;
+ return Ok;
}
GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat *format, REAL firsttab,
@@ -293,6 +300,8 @@ GpStatus WINGDIPAPI GdipSetStringFormatFlags(GDIPCONST GpStringFormat *format, I
GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat *format, GpStringFormat **newFormat)
{
+ TRACE("%p %p\n",format,newFormat);
+
if(!format || !newFormat)
return InvalidParameter;
@@ -312,7 +321,20 @@ GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat *format, GpSt
else
(*newFormat)->tabs = NULL;
- TRACE("%p %p\n",format,newFormat);
+ if(format->charrangecount > 0)
+ {
+ (*newFormat)->charranges = GdipAlloc(sizeof(CharacterRange) *
+ format->charrangecount);
+ if(!(*newFormat)->charranges)
+ {
+ GdipFree(*newFormat);
+ return OutOfMemory;
+ }
+ memcpy((*newFormat)->charranges, format->charranges,
+ sizeof(CharacterRange) * format->charrangecount);
+ }
+ else
+ (*newFormat)->charranges = NULL;
return Ok;
}
diff --git a/dlls/gdiplus/tests/stringformat.c b/dlls/gdiplus/tests/stringformat.c
index 9331912..ad52f4f 100644
--- a/dlls/gdiplus/tests/stringformat.c
+++ b/dlls/gdiplus/tests/stringformat.c
@@ -64,10 +64,10 @@ static void test_characterrange(void)
stat = GdipCreateStringFormat(0, LANG_NEUTRAL, &format);
expect(Ok, stat);
-todo_wine
-{
stat = GdipSetStringFormatMeasurableCharacterRanges(format, 3, ranges);
expect(Ok, stat);
+todo_wine
+{
stat = GdipGetStringFormatMeasurableCharacterRangeCount(format, &count);
expect(Ok, stat);
if (stat == Ok) expect(3, count);
--
1.5.4.3
More information about the wine-patches
mailing list