newlib/winsup/w32api/include/gdiplus/gdiplusstringformat.h
Chris Sutcliffe cc077128d3 2010-07-08 Markus Koenig <basilo@users.sourceforge.net>
* include/gdiplus.h: New file.
        * include/gdiplus/gdiplus.h: New file.
        * include/gdiplus/gdiplusbase.h: New file.
        * include/gdiplus/gdiplusbrush.h: New file.
        * include/gdiplus/gdipluscolor.h: New file.
        * include/gdiplus/gdipluscolormatrix.h: New file.
        * include/gdiplus/gdipluseffects.h: New file.
        * include/gdiplus/gdiplusenums.h: New file.
        * include/gdiplus/gdiplusflat.h: New file.
        * include/gdiplus/gdiplusgpstubs.h: New file.
        * include/gdiplus/gdiplusgraphics.h: New file.
        * include/gdiplus/gdiplusheaders.h: New file.
        * include/gdiplus/gdiplusimageattributes.h: New file.
        * include/gdiplus/gdiplusimagecodec.h: New file.
        * include/gdiplus/gdiplusimaging.h: New file.
        * include/gdiplus/gdiplusimpl.h: New file.
        * include/gdiplus/gdiplusinit.h: New file.
        * include/gdiplus/gdipluslinecaps.h: New file.
        * include/gdiplus/gdiplusmatrix.h: New file.
        * include/gdiplus/gdiplusmem.h: New file.
        * include/gdiplus/gdiplusmetafile.h: New file.
        * include/gdiplus/gdiplusmetaheader.h: New file.
        * include/gdiplus/gdipluspath.h: New file.
        * include/gdiplus/gdipluspen.h: New file.
        * include/gdiplus/gdipluspixelformats.h: New file.
        * include/gdiplus/gdiplusstringformat.h: New file.
        * include/gdiplus/gdiplustypes.h: New file.
        * lib/gdiplus.c: New file containing GDI+ variable definitions
        and GUIDs.
        * lib/gdiplus.def: New file.
        * lib/Makefile.in: Add gdiplus.o to EXTRA_OBJS,
        add gdiplus.c to SOURCES.
        * lib/test.c: Include gdiplus.h.
2010-07-08 23:14:54 +00:00

252 lines
7.2 KiB
C++
Executable File

/*
* gdiplusstringformat.h
*
* GDI+ StringFormat class
*
* This file is part of the w32api package.
*
* Contributors:
* Created by Markus Koenig <markus@stber-koenig.de>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __GDIPLUS_STRINGFORMAT_H
#define __GDIPLUS_STRINGFORMAT_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifndef __cplusplus
#error "A C++ compiler is required to include gdiplusstringformat.h."
#endif
class StringFormat: public GdiplusBase
{
friend class Graphics;
friend class GraphicsPath;
public:
static const StringFormat* GenericDefault();
static const StringFormat* GenericTypographic();
StringFormat(INT formatFlags = 0, LANGID language = LANG_NEUTRAL):
nativeStringFormat(NULL), lastStatus(Ok)
{
lastStatus = DllExports::GdipCreateStringFormat(
formatFlags, language, &nativeStringFormat);
}
StringFormat(const StringFormat *format):
nativeStringFormat(NULL), lastStatus(Ok)
{
lastStatus = DllExports::GdipCloneStringFormat(
format ? format->nativeStringFormat : NULL,
&nativeStringFormat);
}
~StringFormat()
{
DllExports::GdipDeleteStringFormat(nativeStringFormat);
}
StringFormat* Clone() const
{
GpStringFormat *cloneStringFormat = NULL;
Status status = updateStatus(DllExports::GdipCloneStringFormat(
nativeStringFormat, &cloneStringFormat));
if (status == Ok) {
StringFormat *result = new StringFormat(
cloneStringFormat, lastStatus);
if (!result) {
DllExports::GdipDeleteStringFormat(cloneStringFormat);
lastStatus = OutOfMemory;
}
return result;
} else {
return NULL;
}
}
StringAlignment GetAlignment() const
{
StringAlignment result = StringAlignmentNear;
updateStatus(DllExports::GdipGetStringFormatAlign(
nativeStringFormat, &result));
return result;
}
LANGID GetDigitSubstitutionLanguage() const
{
LANGID result = 0;
StringDigitSubstitute method;
updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
nativeStringFormat, &result, &method));
return result;
}
StringDigitSubstitute GetDigitSubstitutionMethod() const
{
LANGID language;
StringDigitSubstitute result = StringDigitSubstituteUser;
updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
nativeStringFormat, &language, &result));
return result;
}
INT GetFormatFlags() const
{
INT result = 0;
updateStatus(DllExports::GdipGetStringFormatFlags(
nativeStringFormat, &result));
return result;
}
HotkeyPrefix GetHotkeyPrefix() const
{
HotkeyPrefix result = HotkeyPrefixNone;
updateStatus(DllExports::GdipGetStringFormatHotkeyPrefix(
nativeStringFormat, (INT*) &result));
return result;
}
Status GetLastStatus() const
{
Status result = lastStatus;
lastStatus = Ok;
return result;
}
StringAlignment GetLineAlignment() const
{
StringAlignment result = StringAlignmentNear;
updateStatus(DllExports::GdipGetStringFormatLineAlign(
nativeStringFormat, &result));
return result;
}
INT GetMeasurableCharacterRangeCount() const
{
INT result = 0;
updateStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(
nativeStringFormat, &result));
return result;
}
INT GetTabStopCount() const
{
INT result = 0;
updateStatus(DllExports::GdipGetStringFormatTabStopCount(
nativeStringFormat, &result));
return result;
}
Status GetTabStops(INT count, REAL *firstTabOffset, REAL *tabStops)
{
return updateStatus(DllExports::GdipGetStringFormatTabStops(
nativeStringFormat, count,
firstTabOffset, tabStops));
}
StringTrimming GetTrimming() const
{
StringTrimming result = StringTrimmingNone;
updateStatus(DllExports::GdipGetStringFormatTrimming(
nativeStringFormat, &result));
return result;
}
Status SetAlignment(StringAlignment align)
{
return updateStatus(DllExports::GdipSetStringFormatAlign(
nativeStringFormat, align));
}
Status SetDigitSubstitution(LANGID language,
StringDigitSubstitute substitute)
{
return updateStatus(DllExports::GdipSetStringFormatDigitSubstitution(
nativeStringFormat, language, substitute));
}
Status SetFormatFlags(INT flags)
{
return updateStatus(DllExports::GdipSetStringFormatFlags(
nativeStringFormat, flags));
}
Status SetHotkeyPrefix(HotkeyPrefix hotkeyPrefix)
{
return updateStatus(DllExports::GdipSetStringFormatHotkeyPrefix(
nativeStringFormat, (INT) hotkeyPrefix));
}
Status SetLineAlignment(StringAlignment align)
{
return updateStatus(DllExports::GdipSetStringFormatLineAlign(
nativeStringFormat, align));
}
Status SetMeasurableCharacterRanges(INT rangeCount,
const CharacterRange *ranges)
{
return updateStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(
nativeStringFormat, rangeCount, ranges));
}
Status SetTabStops(REAL firstTabOffset, INT count, const REAL *tabStops)
{
return updateStatus(DllExports::GdipSetStringFormatTabStops(
nativeStringFormat, firstTabOffset,
count, tabStops));
}
Status SetTrimming(StringTrimming trimming)
{
return updateStatus(DllExports::GdipSetStringFormatTrimming(
nativeStringFormat, trimming));
}
private:
StringFormat(GpStringFormat *stringFormat, Status status):
nativeStringFormat(stringFormat), lastStatus(status) {}
StringFormat(const StringFormat&);
StringFormat& operator=(const StringFormat&);
Status updateStatus(Status newStatus) const
{
if (newStatus != Ok) lastStatus = newStatus;
return newStatus;
}
GpStringFormat *nativeStringFormat;
mutable Status lastStatus;
};
// FIXME: do StringFormat::GenericDefault() et al. need to be thread safe?
// FIXME: maybe put this in gdiplus.c?
extern "C" void *_GdipStringFormatCachedGenericDefault;
extern "C" void *_GdipStringFormatCachedGenericTypographic;
__inline__ const StringFormat* StringFormat::GenericDefault()
{
if (!_GdipStringFormatCachedGenericDefault) {
GpStringFormat *nativeStringFormat = 0;
Status status = DllExports::GdipStringFormatGetGenericDefault(
&nativeStringFormat);
if (status == Ok && nativeStringFormat) {
_GdipStringFormatCachedGenericDefault = (void*)
new StringFormat(nativeStringFormat, Ok);
}
}
return (StringFormat*) _GdipStringFormatCachedGenericDefault;
}
__inline__ const StringFormat* StringFormat::GenericTypographic()
{
if (!_GdipStringFormatCachedGenericTypographic) {
GpStringFormat *nativeStringFormat = 0;
Status status = DllExports::GdipStringFormatGetGenericTypographic(
&nativeStringFormat);
if (status == Ok && nativeStringFormat) {
_GdipStringFormatCachedGenericTypographic = (void*)
new StringFormat(nativeStringFormat, Ok);
}
}
return (StringFormat*) _GdipStringFormatCachedGenericTypographic;
}
#endif /* __GDIPLUS_STRINGFORMAT_H */