1 /* 2 * GdiPlusStringFormat.h 3 * 4 * Windows GDI+ 5 * 6 * This file is part of the w32api package. 7 * 8 * THIS SOFTWARE IS NOT COPYRIGHTED 9 * 10 * This source code is offered for use in the public domain. You may 11 * use, modify or distribute it freely. 12 * 13 * This code is distributed in the hope that it will be useful but 14 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 15 * DISCLAIMED. This includes but is not limited to warranties of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 */ 18 19 #ifndef _GDIPLUSSTRINGFORMAT_H 20 #define _GDIPLUSSTRINGFORMAT_H 21 22 class StringFormat : public GdiplusBase 23 { 24 public: nativeFormat(NULL)25 StringFormat(INT formatFlags = 0, LANGID language = LANG_NEUTRAL) : nativeFormat(NULL) 26 { 27 lastStatus = DllExports::GdipCreateStringFormat(formatFlags, language, &nativeFormat); 28 } 29 StringFormat(const StringFormat * format)30 StringFormat(const StringFormat *format) : nativeFormat(NULL) 31 { 32 lastStatus = DllExports::GdipCloneStringFormat(format ? format->nativeFormat : NULL, &nativeFormat); 33 } 34 35 StringFormat * Clone()36 Clone() const 37 { 38 GpStringFormat *cloneFormat = NULL; 39 40 lastStatus = DllExports::GdipCloneStringFormat(nativeFormat, &cloneFormat); 41 if (lastStatus != Ok) 42 return NULL; 43 44 StringFormat *newFormat = new StringFormat(cloneFormat, lastStatus); 45 if (!newFormat) 46 DllExports::GdipDeleteStringFormat(cloneFormat); 47 return newFormat; 48 } 49 ~StringFormat()50 ~StringFormat() 51 { 52 DllExports::GdipDeleteStringFormat(nativeFormat); 53 } 54 55 static const StringFormat * GenericDefault()56 GenericDefault() 57 { 58 return NULL; // FIXME 59 } 60 61 static const StringFormat * GenericTypographic()62 GenericTypographic() 63 { 64 return NULL; // FIXME 65 } 66 67 StringAlignment GetAlignment()68 GetAlignment() const 69 { 70 StringAlignment alignment; 71 SetStatus(DllExports::GdipGetStringFormatAlign(nativeFormat, &alignment)); 72 return alignment; 73 } 74 75 LANGID GetDigitSubstitutionLanguage()76 GetDigitSubstitutionLanguage() const 77 { 78 LANGID language; 79 SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(nativeFormat, &language, NULL)); 80 return language; 81 } 82 83 StringDigitSubstitute GetDigitSubstitutionMethod()84 GetDigitSubstitutionMethod() const 85 { 86 StringDigitSubstitute substitute; 87 SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(nativeFormat, NULL, &substitute)); 88 return substitute; 89 } 90 91 INT GetFormatFlags()92 GetFormatFlags() const 93 { 94 INT flags; 95 SetStatus(DllExports::GdipGetStringFormatFlags(nativeFormat, &flags)); 96 return flags; 97 } 98 99 HotkeyPrefix GetHotkeyPrefix()100 GetHotkeyPrefix() const 101 { 102 HotkeyPrefix hotkeyPrefix; 103 SetStatus(DllExports::GdipGetStringFormatHotkeyPrefix(nativeFormat, reinterpret_cast<INT *>(&hotkeyPrefix))); 104 return hotkeyPrefix; 105 } 106 107 Status GetLastStatus()108 GetLastStatus() const 109 { 110 return lastStatus; 111 } 112 113 StringAlignment GetLineAlignment()114 GetLineAlignment() const 115 { 116 StringAlignment alignment; 117 SetStatus(DllExports::GdipGetStringFormatLineAlign(nativeFormat, &alignment)); 118 return alignment; 119 } 120 121 INT GetMeasurableCharacterRangeCount()122 GetMeasurableCharacterRangeCount() const 123 { 124 INT count; 125 SetStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(nativeFormat, &count)); 126 return count; 127 } 128 129 INT GetTabStopCount()130 GetTabStopCount() const 131 { 132 INT count; 133 SetStatus(DllExports::GdipGetStringFormatTabStopCount(nativeFormat, &count)); 134 return count; 135 } 136 137 Status GetTabStops(INT count,REAL * firstTabOffset,REAL * tabStops)138 GetTabStops(INT count, REAL *firstTabOffset, REAL *tabStops) const 139 { 140 return SetStatus(DllExports::GdipGetStringFormatTabStops(nativeFormat, count, firstTabOffset, tabStops)); 141 } 142 143 StringTrimming GetTrimming()144 GetTrimming() const 145 { 146 StringTrimming trimming; 147 SetStatus(DllExports::GdipGetStringFormatTrimming(nativeFormat, &trimming)); 148 return trimming; 149 } 150 151 Status SetAlignment(StringAlignment align)152 SetAlignment(StringAlignment align) 153 { 154 return SetStatus(DllExports::GdipSetStringFormatAlign(nativeFormat, align)); 155 } 156 157 Status SetDigitSubstitution(LANGID language,StringDigitSubstitute substitute)158 SetDigitSubstitution(LANGID language, StringDigitSubstitute substitute) 159 { 160 return SetStatus(DllExports::GdipSetStringFormatDigitSubstitution(nativeFormat, language, substitute)); 161 } 162 163 Status SetFormatFlags(INT flags)164 SetFormatFlags(INT flags) 165 { 166 return SetStatus(DllExports::GdipSetStringFormatFlags(nativeFormat, flags)); 167 } 168 169 Status SetHotkeyPrefix(HotkeyPrefix hotkeyPrefix)170 SetHotkeyPrefix(HotkeyPrefix hotkeyPrefix) 171 { 172 return SetStatus(DllExports::GdipSetStringFormatHotkeyPrefix(nativeFormat, INT(hotkeyPrefix))); 173 } 174 175 Status SetLineAlignment(StringAlignment align)176 SetLineAlignment(StringAlignment align) 177 { 178 return SetStatus(DllExports::GdipSetStringFormatLineAlign(nativeFormat, align)); 179 } 180 181 Status SetMeasurableCharacterRanges(INT rangeCount,const CharacterRange * ranges)182 SetMeasurableCharacterRanges(INT rangeCount, const CharacterRange *ranges) 183 { 184 return SetStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(nativeFormat, rangeCount, ranges)); 185 } 186 187 Status SetTabStops(REAL firstTabOffset,INT count,const REAL * tabStops)188 SetTabStops(REAL firstTabOffset, INT count, const REAL *tabStops) 189 { 190 return SetStatus(DllExports::GdipSetStringFormatTabStops(nativeFormat, firstTabOffset, count, tabStops)); 191 } 192 193 Status SetTrimming(StringTrimming trimming)194 SetTrimming(StringTrimming trimming) 195 { 196 return SetStatus(DllExports::GdipSetStringFormatTrimming(nativeFormat, trimming)); 197 } 198 199 protected: 200 GpStringFormat *nativeFormat; 201 mutable Status lastStatus; 202 StringFormat(GpStringFormat * format,Status status)203 StringFormat(GpStringFormat *format, Status status) : nativeFormat(format), lastStatus(status) 204 { 205 } 206 207 Status SetStatus(Status status)208 SetStatus(Status status) const 209 { 210 if (status != Ok) 211 lastStatus = status; 212 return status; 213 } 214 215 // get native 216 friend inline GpStringFormat *& getNat(const StringFormat * sf)217 getNat(const StringFormat *sf) 218 { 219 return const_cast<StringFormat *>(sf)->nativeFormat; 220 } 221 }; 222 223 #endif /* _GDIPLUSSTRINGFORMAT_H */ 224