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.
This commit is contained in:
251
winsup/w32api/include/gdiplus/gdiplusstringformat.h
Executable file
251
winsup/w32api/include/gdiplus/gdiplusstringformat.h
Executable file
@ -0,0 +1,251 @@
|
||||
/*
|
||||
* 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 */
|
Reference in New Issue
Block a user