| /** |
| * This file has no copyright assigned and is placed in the Public Domain. |
| * This file is part of the w64 mingw-runtime package. |
| * No warranty is given; refer to the file DISCLAIMER within this package. |
| */ |
| #ifndef _GDIPLUSSTRINGFORMAT_H |
| #define _GDIPLUSSTRINGFORMAT_H |
| |
| class StringFormat : public GdiplusBase { |
| public: |
| friend class Graphics; |
| friend class GraphicsPath; |
| StringFormat(INT formatFlags = 0,LANGID language = LANG_NEUTRAL) { |
| nativeFormat = NULL; |
| lastError = DllExports::GdipCreateStringFormat(formatFlags,language,&nativeFormat); |
| } |
| static const StringFormat *GenericDefault(); |
| static const StringFormat *GenericTypographic(); |
| StringFormat(const StringFormat *format) { |
| nativeFormat = NULL; |
| lastError = DllExports::GdipCloneStringFormat(format ? format->nativeFormat : NULL,&nativeFormat); |
| } |
| StringFormat *Clone() const { |
| GpStringFormat *clonedStringFormat = NULL; |
| lastError = DllExports::GdipCloneStringFormat(nativeFormat,&clonedStringFormat); |
| if(lastError==Ok) return new StringFormat(clonedStringFormat,lastError); |
| return NULL; |
| } |
| ~StringFormat() { DllExports::GdipDeleteStringFormat(nativeFormat); } |
| Status SetFormatFlags(INT flags) { return SetStatus(DllExports::GdipSetStringFormatFlags(nativeFormat,flags)); } |
| INT GetFormatFlags() const { |
| INT flags; |
| SetStatus(DllExports::GdipGetStringFormatFlags(nativeFormat,&flags)); |
| return flags; |
| } |
| Status SetAlignment(StringAlignment align) { return SetStatus(DllExports::GdipSetStringFormatAlign(nativeFormat,align)); } |
| StringAlignment GetAlignment() const { |
| StringAlignment alignment; |
| SetStatus(DllExports::GdipGetStringFormatAlign(nativeFormat,&alignment)); |
| return alignment; |
| } |
| Status SetLineAlignment(StringAlignment align) { return SetStatus(DllExports::GdipSetStringFormatLineAlign(nativeFormat,align)); } |
| StringAlignment GetLineAlignment() const { |
| StringAlignment alignment; |
| SetStatus(DllExports::GdipGetStringFormatLineAlign(nativeFormat,&alignment)); |
| return alignment; |
| } |
| Status SetHotkeyPrefix(HotkeyPrefix hotkeyPrefix) { return SetStatus(DllExports::GdipSetStringFormatHotkeyPrefix(nativeFormat,(INT)hotkeyPrefix)); } |
| HotkeyPrefix GetHotkeyPrefix() const { |
| HotkeyPrefix hotkeyPrefix; |
| SetStatus(DllExports::GdipGetStringFormatHotkeyPrefix(nativeFormat,(INT*)&hotkeyPrefix)); |
| return hotkeyPrefix; |
| } |
| Status SetTabStops(REAL firstTabOffset,INT count,const REAL *tabStops) { return SetStatus(DllExports::GdipSetStringFormatTabStops(nativeFormat,firstTabOffset,count,tabStops)); } |
| INT GetTabStopCount() const { |
| INT count; |
| SetStatus(DllExports::GdipGetStringFormatTabStopCount(nativeFormat,&count)); |
| return count; |
| } |
| Status GetTabStops(INT count,REAL *firstTabOffset,REAL *tabStops) const { return SetStatus(DllExports::GdipGetStringFormatTabStops(nativeFormat,count,firstTabOffset,tabStops)); } |
| Status SetDigitSubstitution(LANGID language,StringDigitSubstitute substitute) { return SetStatus(DllExports::GdipSetStringFormatDigitSubstitution(nativeFormat,language,substitute)); } |
| LANGID GetDigitSubstitutionLanguage() const { |
| LANGID language; |
| SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(nativeFormat,&language,NULL)); |
| return language; |
| } |
| StringDigitSubstitute GetDigitSubstitutionMethod() const { |
| StringDigitSubstitute substitute; |
| SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(nativeFormat,NULL,&substitute)); |
| return substitute; |
| } |
| Status SetTrimming(StringTrimming trimming) { return SetStatus(DllExports::GdipSetStringFormatTrimming(nativeFormat,trimming)); } |
| StringTrimming StringFormat::GetTrimming() const { |
| StringTrimming trimming; |
| SetStatus(DllExports::GdipGetStringFormatTrimming(nativeFormat,&trimming)); |
| return trimming; |
| } |
| Status SetMeasurableCharacterRanges(INT rangeCount,const CharacterRange *ranges) { return SetStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(nativeFormat,rangeCount,ranges)); } |
| INT GetMeasurableCharacterRangeCount() { |
| INT count; |
| SetStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(nativeFormat,&count)); |
| return count; |
| } |
| Status GetLastStatus() const { |
| Status lastStatus = lastError; |
| lastError = Ok; |
| return lastStatus; |
| } |
| protected: |
| Status SetStatus(GpStatus newStatus) const { |
| if(newStatus==Ok) return Ok; |
| return lastError = newStatus; |
| } |
| StringFormat(const StringFormat &source) { |
| nativeFormat = NULL; |
| lastError = DllExports::GdipCloneStringFormat(source.nativeFormat,&nativeFormat); |
| } |
| StringFormat &operator=(const StringFormat &source) { |
| DllExports::GdipDeleteStringFormat(nativeFormat); |
| lastError = DllExports::GdipCloneStringFormat(source.nativeFormat,&nativeFormat); |
| return *this; |
| } |
| StringFormat(GpStringFormat *clonedStringFormat,Status status) { |
| lastError = status; |
| nativeFormat = clonedStringFormat; |
| } |
| GpStringFormat *nativeFormat; |
| mutable Status lastError; |
| }; |
| |
| static BYTE GenericTypographicStringFormatBuffer[sizeof(StringFormat)] = {0}; |
| static BYTE GenericDefaultStringFormatBuffer[sizeof(StringFormat)] = {0}; |
| |
| inline const StringFormat *StringFormat::GenericDefault() { |
| StringFormat *genericDefaultStringFormat = (StringFormat*)GenericDefaultStringFormatBuffer; |
| genericDefaultStringFormat->lastError = DllExports::GdipStringFormatGetGenericDefault(&(genericDefaultStringFormat->nativeFormat)); |
| return genericDefaultStringFormat; |
| } |
| |
| inline const StringFormat *StringFormat::GenericTypographic() { |
| StringFormat *genericTypographicStringFormat = (StringFormat*)GenericTypographicStringFormatBuffer; |
| genericTypographicStringFormat->lastError = DllExports::GdipStringFormatGetGenericTypographic(&genericTypographicStringFormat->nativeFormat); |
| return genericTypographicStringFormat; |
| } |
| |
| #endif |