|
|
/**************************************************************************\
* * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. * * Abstract: * * String format specification for DrawString and text APIs * * Revision History: * * 08/05/1999 dbrown * Created it. * \**************************************************************************/
#ifndef _GDIPLUSSTRINGFORMAT_H
#define _GDIPLUSSTRINGFORMAT_H
class StringFormat : public GdiplusBase { public: friend class Graphics; friend class GraphicsPath;
StringFormat( IN INT formatFlags, 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 ) { lastError = DllExports::GdipCloneStringFormat( format->nativeFormat, &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; }
Status SetLineSpacing( IN REAL amount = 1.0f, IN LineSpacing method = LineSpacingRecommended ) { return SetStatus(DllExports::GdipSetStringFormatLineSpacing( nativeFormat, amount, method )); }
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 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( ) { LANGID language; SetStatus(DllExports::GdipGetStringFormatDigitSubstitution( nativeFormat, &language, NULL )); return language; } StringDigitSubstitute GetDigitSubstitutionMethod( ) { 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; }
// GetLastStatus - return last error code and clear error code
Status GetLastStatus() const { Status lastStatus = lastError; lastError = Ok;
return lastStatus; }
// Empty constructor used for static generic values
StringFormat() : nativeFormat (NULL), lastError (NotImplemented) {}
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
|