[2/4] gdiplus: GdipGetStringFormatDigitSubstitution implemented

Nikolay Sivov bunglehead at gmail.com
Mon Jul 28 16:12:49 CDT 2008


Changelog:
    - digit substitution data members added
    - GdipGetStringFormatDigitSubstitution implemented
    - existing constructor test slightly extended, separate test block for GdipGetStringFormatDigitSubstitution

---
 dlls/gdiplus/gdiplus.spec         |    2 +-
 dlls/gdiplus/gdiplus_private.h    |    2 +
 dlls/gdiplus/stringformat.c       |   14 +++++++++++
 dlls/gdiplus/tests/stringformat.c |   47 +++++++++++++++++++++++++++++++++++++
 include/gdiplusenums.h            |    9 +++++++
 include/gdiplusflat.h             |    2 +
 6 files changed, 75 insertions(+), 1 deletions(-)

diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 2b54ec1..b121959 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -387,7 +387,7 @@
 @ stdcall GdipGetSmoothingMode(ptr ptr)
 @ stdcall GdipGetSolidFillColor(ptr ptr)
 @ stdcall GdipGetStringFormatAlign(ptr ptr)
-@ stub GdipGetStringFormatDigitSubstitution
+@ stdcall GdipGetStringFormatDigitSubstitution(ptr ptr ptr)
 @ stdcall GdipGetStringFormatFlags(ptr ptr)
 @ stdcall GdipGetStringFormatHotkeyPrefix(ptr ptr)
 @ stdcall GdipGetStringFormatLineAlign(ptr ptr)
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 56df458..cb5f821 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -188,10 +188,12 @@ struct GpFont{
 struct GpStringFormat{
     INT attr;
     LANGID lang;
+    LANGID digitlang;
     StringAlignment align;
     StringTrimming trimming;
     HotkeyPrefix hkprefix;
     StringAlignment vertalign;
+    StringDigitSubstitute digitsub;
 };
 
 struct GpFontCollection{
diff --git a/dlls/gdiplus/stringformat.c b/dlls/gdiplus/stringformat.c
index c9361dc..1ce6d0e 100644
--- a/dlls/gdiplus/stringformat.c
+++ b/dlls/gdiplus/stringformat.c
@@ -43,7 +43,9 @@ GpStatus WINGDIPAPI GdipCreateStringFormat(INT attr, LANGID lang,
 
     (*format)->attr = attr;
     (*format)->lang = lang;
+    (*format)->digitlang = LANG_NEUTRAL;
     (*format)->trimming = StringTrimmingCharacter;
+    (*format)->digitsub = StringDigitSubstituteUser;
 
     return Ok;
 }
@@ -79,6 +81,18 @@ GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat *format,
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat *format,
+    LANGID *language, StringDigitSubstitute *substitute)
+{
+    if(!format)
+        return InvalidParameter;
+
+    if(language)    *language   = format->digitlang;
+    if(substitute)  *substitute = format->digitsub;
+
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat* format,
         INT* flags)
 {
diff --git a/dlls/gdiplus/tests/stringformat.c b/dlls/gdiplus/tests/stringformat.c
index 3f112e0..fdf4f34 100644
--- a/dlls/gdiplus/tests/stringformat.c
+++ b/dlls/gdiplus/tests/stringformat.c
@@ -31,6 +31,8 @@ static void test_constructor(void)
     INT n;
     StringAlignment align, valign;
     StringTrimming trimming;
+    StringDigitSubstitute digitsub;
+    LANGID digitlang;
 
     stat = GdipCreateStringFormat(0, 0, &format);
     expect(Ok, stat);
@@ -39,11 +41,14 @@ static void test_constructor(void)
     GdipGetStringFormatLineAlign(format, &valign);
     GdipGetStringFormatHotkeyPrefix(format, &n);
     GdipGetStringFormatTrimming(format, &trimming);
+    GdipGetStringFormatDigitSubstitution(format, &digitlang, &digitsub);
 
     expect(HotkeyPrefixNone, n);
     expect(StringAlignmentNear, align);
     expect(StringAlignmentNear, align);
     expect(StringTrimmingCharacter, trimming);
+    expect(StringDigitSubstituteUser, digitsub);
+    expect(LANG_NEUTRAL, digitlang);
 
     stat = GdipDeleteStringFormat(format);
     expect(Ok, stat);
@@ -70,6 +75,47 @@ todo_wine
     expect(Ok, stat);
 }
 
+static void test_digitsubstitution(void)
+{
+    GpStringFormat *format;
+    GpStatus stat;
+    StringDigitSubstitute digitsub;
+    LANGID digitlang;
+
+    stat = GdipCreateStringFormat(0, LANG_RUSSIAN, &format);
+    expect(Ok, stat);
+
+    /* NULL arguments */
+    stat = GdipGetStringFormatDigitSubstitution(NULL, NULL, NULL);
+    expect(InvalidParameter, stat);
+    stat = GdipGetStringFormatDigitSubstitution(format, NULL, NULL);
+    expect(Ok, stat);
+    stat = GdipGetStringFormatDigitSubstitution(NULL, &digitlang, NULL);
+    expect(InvalidParameter, stat);
+    stat = GdipGetStringFormatDigitSubstitution(NULL, NULL, &digitsub);
+    expect(InvalidParameter, stat);
+    stat = GdipGetStringFormatDigitSubstitution(NULL, &digitlang, &digitsub);
+    expect(InvalidParameter, stat);
+
+    /* try to get both and one by one */
+    stat = GdipGetStringFormatDigitSubstitution(format, &digitlang, &digitsub);
+    expect(Ok, stat);
+    expect(StringDigitSubstituteUser, digitsub);
+    expect(LANG_NEUTRAL, digitlang);
+    
+    digitsub  = StringDigitSubstituteNone;
+    stat = GdipGetStringFormatDigitSubstitution(format, NULL, &digitsub);
+    expect(Ok, stat);
+    expect(StringDigitSubstituteUser, digitsub);
+
+    digitlang = LANG_RUSSIAN;
+    stat = GdipGetStringFormatDigitSubstitution(format, &digitlang, NULL);
+    expect(Ok, stat);
+    expect(LANG_NEUTRAL, digitlang);
+
+    stat = GdipDeleteStringFormat(format);
+    expect(Ok, stat);
+}
 
 START_TEST(stringformat)
 {
@@ -85,6 +131,7 @@ START_TEST(stringformat)
 
     test_constructor();
     test_characterrange();
+    test_digitsubstitution();
 
     GdiplusShutdown(gdiplusToken);
 }
diff --git a/include/gdiplusenums.h b/include/gdiplusenums.h
index 53401bd..bc52bd5 100644
--- a/include/gdiplusenums.h
+++ b/include/gdiplusenums.h
@@ -227,6 +227,14 @@ enum StringAlignment
     StringAlignmentFar     = 2
 };
 
+enum  StringDigitSubstitute
+{
+    StringDigitSubstituteUser        = 0,
+    StringDigitSubstituteNone        = 1,
+    StringDigitSubstituteNational    = 2,
+    StringDigitSubstituteTraditional = 3
+};
+
 enum StringFormatFlags
 {
     StringFormatFlagsDirectionRightToLeft  = 0x00000001,
@@ -346,6 +354,7 @@ typedef enum EmfType EmfType;
 typedef enum CompositingMode CompositingMode;
 typedef enum TextRenderingHint TextRenderingHint;
 typedef enum StringAlignment StringAlignment;
+typedef enum StringDigitSubstitute StringDigitSubstitute;
 typedef enum StringTrimming StringTrimming;
 typedef enum FontStyle FontStyle;
 typedef enum StringFormatFlags StringFormatFlags;
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 8b83c8e..723ec1d 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -436,6 +436,8 @@ GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**);
 GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*);
 GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **);
 GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*,
+        StringDigitSubstitute*);
 GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*);
 GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*);
 GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*);
-- 
1.4.4.4






More information about the wine-patches mailing list