| /**************************************************************************\ | |
| * | |
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |
| * | |
| * Module Name: | |
| * | |
| * GdiplusStringFormat.h | |
| * | |
| * Abstract: | |
| * | |
| * String format specification for DrawString and text APIs | |
| * | |
| \**************************************************************************/ | |
| #ifndef _GDIPLUSSTRINGFORMAT_H | |
| #define _GDIPLUSSTRINGFORMAT_H | |
| class StringFormat : public GdiplusBase | |
| { | |
| public: | |
| friend class Graphics; | |
| friend class GraphicsPath; | |
| StringFormat( | |
| IN INT formatFlags = 0, | |
| IN LANGID language = LANG_NEUTRAL | |
| ) | |
| { | |
| nativeFormat = NULL; | |
| lastError = DllExports::GdipCreateStringFormat( | |
| formatFlags, | |
| language, | |
| &nativeFormat | |
| ); | |
| } | |
| static const StringFormat *GenericDefault(); | |
| static const StringFormat *GenericTypographic(); | |
| // Constructor based on existing string format | |
| StringFormat( | |
| IN 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); | |
| else | |
| return NULL; | |
| } | |
| ~StringFormat() | |
| { | |
| DllExports::GdipDeleteStringFormat(nativeFormat); | |
| } | |
| Status SetFormatFlags(IN INT flags) | |
| { | |
| return SetStatus(DllExports::GdipSetStringFormatFlags( | |
| nativeFormat, | |
| flags | |
| )); | |
| } | |
| INT GetFormatFlags() const | |
| { | |
| INT flags; | |
| SetStatus(DllExports::GdipGetStringFormatFlags(nativeFormat, &flags)); | |
| return flags; | |
| } | |
| #ifndef DCR_USE_NEW_152154 | |
| Status SetLineSpacing( | |
| IN REAL amount = 1.0f, | |
| IN LineSpacing method = LineSpacingRecommended | |
| ) | |
| { | |
| return SetStatus(DllExports::GdipSetStringFormatLineSpacing( | |
| nativeFormat, | |
| amount, | |
| method | |
| )); | |
| } | |
| #endif | |
| Status SetAlignment(IN StringAlignment align) | |
| { | |
| return SetStatus(DllExports::GdipSetStringFormatAlign( | |
| nativeFormat, | |
| align | |
| )); | |
| } | |
| StringAlignment GetAlignment() const | |
| { | |
| StringAlignment alignment; | |
| SetStatus(DllExports::GdipGetStringFormatAlign( | |
| nativeFormat, | |
| &alignment | |
| )); | |
| return alignment; | |
| } | |
| Status SetLineAlignment(IN StringAlignment align) | |
| { | |
| return SetStatus(DllExports::GdipSetStringFormatLineAlign( | |
| nativeFormat, | |
| align | |
| )); | |
| } | |
| StringAlignment GetLineAlignment() const | |
| { | |
| StringAlignment alignment; | |
| SetStatus(DllExports::GdipGetStringFormatLineAlign( | |
| nativeFormat, | |
| &alignment | |
| )); | |
| return alignment; | |
| } | |
| Status SetHotkeyPrefix(IN HotkeyPrefix hotkeyPrefix) | |
| { | |
| return SetStatus(DllExports::GdipSetStringFormatHotkeyPrefix( | |
| nativeFormat, | |
| (INT)hotkeyPrefix | |
| )); | |
| } | |
| HotkeyPrefix GetHotkeyPrefix() const | |
| { | |
| HotkeyPrefix hotkeyPrefix; | |
| SetStatus(DllExports::GdipGetStringFormatHotkeyPrefix( | |
| nativeFormat, | |
| (INT*)&hotkeyPrefix | |
| )); | |
| return hotkeyPrefix; | |
| } | |
| Status SetTabStops( | |
| IN REAL firstTabOffset, | |
| IN INT count, | |
| IN 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( | |
| IN INT count, | |
| OUT REAL *firstTabOffset, | |
| OUT REAL *tabStops | |
| ) const | |
| { | |
| return SetStatus(DllExports::GdipGetStringFormatTabStops( | |
| nativeFormat, | |
| count, | |
| firstTabOffset, | |
| tabStops | |
| )); | |
| } | |
| #ifdef DCR_USE_NEW_146933 | |
| Status SetDigitSubstitution( | |
| IN LANGID language, | |
| IN 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; | |
| } | |
| #endif // DCR_USE_NEW_146933 | |
| // String trimming. How to handle more text than can be displayed | |
| // in the limits available. | |
| Status SetTrimming(IN StringTrimming trimming) | |
| { | |
| return SetStatus(DllExports::GdipSetStringFormatTrimming( | |
| nativeFormat, | |
| trimming | |
| )); | |
| } | |
| StringTrimming StringFormat::GetTrimming() const | |
| { | |
| StringTrimming trimming; | |
| SetStatus(DllExports::GdipGetStringFormatTrimming( | |
| nativeFormat, | |
| &trimming | |
| )); | |
| return trimming; | |
| } | |
| #ifdef DCR_USE_NEW_174340 | |
| Status SetMeasurableCharacterRanges( | |
| IN INT rangeCount, | |
| IN const CharacterRange *ranges | |
| ) | |
| { | |
| return SetStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges( | |
| nativeFormat, | |
| rangeCount, | |
| ranges | |
| )); | |
| } | |
| INT GetMeasurableCharacterRangeCount() | |
| { | |
| INT count; | |
| SetStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount( | |
| nativeFormat, | |
| &count | |
| )); | |
| return count; | |
| } | |
| #endif | |
| // GetLastStatus - return last error code and clear error code | |
| Status GetLastStatus() const | |
| { | |
| Status lastStatus = lastError; | |
| lastError = Ok; | |
| return lastStatus; | |
| } | |
| protected: | |
| Status SetStatus(GpStatus newStatus) const | |
| { | |
| if (newStatus == Ok) | |
| { | |
| return Ok; | |
| } | |
| else | |
| { | |
| return lastError = newStatus; | |
| } | |
| } | |
| // Not allowed and move to private | |
| 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; | |
| } | |
| // private constructor for copy | |
| StringFormat(GpStringFormat * clonedStringFormat, Status status) | |
| { | |
| lastError = status; | |
| nativeFormat = clonedStringFormat; | |
| } | |
| GpStringFormat *nativeFormat; | |
| mutable Status lastError; | |
| }; | |
| // Generic constant string formats. | |
| static BYTE GenericTypographicStringFormatBuffer[sizeof(StringFormat)] = {0}; | |
| static BYTE GenericDefaultStringFormatBuffer[sizeof(StringFormat)] = {0}; | |
| static StringFormat *GenericTypographicStringFormat = NULL; | |
| static StringFormat *GenericDefaultStringFormat = NULL; | |
| // Define the generic string formats | |
| inline const StringFormat *StringFormat::GenericDefault() | |
| { | |
| if (GenericDefaultStringFormat != NULL) | |
| { | |
| return GenericDefaultStringFormat; | |
| } | |
| GenericDefaultStringFormat = | |
| (StringFormat*)GenericDefaultStringFormatBuffer; | |
| GenericDefaultStringFormat->lastError = | |
| DllExports::GdipStringFormatGetGenericDefault( | |
| &(GenericDefaultStringFormat->nativeFormat) | |
| ); | |
| return GenericDefaultStringFormat; | |
| } | |
| inline const StringFormat *StringFormat::GenericTypographic() | |
| { | |
| if (GenericTypographicStringFormat != NULL) | |
| { | |
| return GenericTypographicStringFormat; | |
| } | |
| GenericTypographicStringFormat = | |
| (StringFormat*)GenericTypographicStringFormatBuffer; | |
| GenericTypographicStringFormat->lastError = | |
| DllExports::GdipStringFormatGetGenericTypographic( | |
| &GenericTypographicStringFormat->nativeFormat | |
| ); | |
| return GenericTypographicStringFormat; | |
| } | |
| #endif // !_GDIPLUSSTRINGFORMAT_H |