Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497/* * GdiPlusHeaders.h * * Windows GDI+ * * This file is part of the w32api package. * * 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 _GDIPLUSHEADERS_H#define _GDIPLUSHEADERS_H
class Image : public GdiplusBase{ public: friend class Graphics; friend class TextureBrush;
Image(IStream *stream, BOOL useEmbeddedColorManagement = FALSE) : nativeImage(NULL) { if (useEmbeddedColorManagement) lastStatus = DllExports::GdipLoadImageFromStreamICM(stream, &nativeImage); else lastStatus = DllExports::GdipLoadImageFromStream(stream, &nativeImage); }
Image(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE) : nativeImage(NULL) { if (useEmbeddedColorManagement) lastStatus = DllExports::GdipLoadImageFromFileICM(filename, &nativeImage); else lastStatus = DllExports::GdipLoadImageFromFile(filename, &nativeImage); }
Image * Clone() { GpImage *cloneimage = NULL; SetStatus(DllExports::GdipCloneImage(nativeImage, &cloneimage)); return new Image(cloneimage, lastStatus); }
virtual ~Image() { DllExports::GdipDisposeImage(nativeImage); }
static Image * FromFile(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE) { return new Image(filename, useEmbeddedColorManagement); }
static Image * FromStream(IStream *stream, BOOL useEmbeddedColorManagement = FALSE) { return new Image(stream, useEmbeddedColorManagement); }
Status GetAllPropertyItems(UINT totalBufferSize, UINT numProperties, PropertyItem *allItems) { if (allItems == NULL) return SetStatus(InvalidParameter); return SetStatus(DllExports::GdipGetAllPropertyItems(nativeImage, totalBufferSize, numProperties, allItems)); }
Status GetBounds(RectF *srcRect, Unit *srcUnit) { return SetStatus(DllExports::GdipGetImageBounds(nativeImage, srcRect, srcUnit)); }
Status GetEncoderParameterList(const CLSID *clsidEncoder, UINT size, EncoderParameters *buffer) {#if 1 return SetStatus(NotImplemented);#else return SetStatus(DllExports::GdipGetEncoderParameterList(nativeImage, clsidEncoder, size, buffer));#endif }
UINT GetEncoderParameterListSize(const CLSID *clsidEncoder) { UINT size = 0; SetStatus(DllExports::GdipGetEncoderParameterListSize(nativeImage, clsidEncoder, &size)); return size; }
UINT GetFlags() { UINT flags = 0; SetStatus(DllExports::GdipGetImageFlags(nativeImage, &flags)); return flags; }
UINT GetFrameCount(const GUID *dimensionID) { UINT count = 0; SetStatus(DllExports::GdipImageGetFrameCount(nativeImage, dimensionID, &count)); return count; }
UINT GetFrameDimensionsCount() { UINT count = 0; SetStatus(DllExports::GdipImageGetFrameDimensionsCount(nativeImage, &count)); return count; }
Status GetFrameDimensionsList(GUID *dimensionIDs, UINT count) { return SetStatus(DllExports::GdipImageGetFrameDimensionsList(nativeImage, dimensionIDs, count)); }
UINT GetHeight() { UINT height = 0; SetStatus(DllExports::GdipGetImageHeight(nativeImage, &height)); return height; }
REAL GetHorizontalResolution() { REAL resolution = 0.0f; SetStatus(DllExports::GdipGetImageHorizontalResolution(nativeImage, &resolution)); return resolution; }
Status GetLastStatus() { return lastStatus; }
Status GetPalette(ColorPalette *palette, INT size) { return SetStatus(DllExports::GdipGetImagePalette(nativeImage, palette, size)); }
INT GetPaletteSize() { INT size = 0; SetStatus(DllExports::GdipGetImagePaletteSize(nativeImage, &size)); return size; }
Status GetPhysicalDimension(SizeF *size) { if (size == NULL) return SetStatus(InvalidParameter);
return SetStatus(DllExports::GdipGetImageDimension(nativeImage, &size->Width, &size->Height)); }
PixelFormat GetPixelFormat() { PixelFormat format; SetStatus(DllExports::GdipGetImagePixelFormat(nativeImage, &format)); return format; }
UINT GetPropertyCount() { UINT numOfProperty = 0; SetStatus(DllExports::GdipGetPropertyCount(nativeImage, &numOfProperty)); return numOfProperty; }
Status GetPropertyIdList(UINT numOfProperty, PROPID *list) { return SetStatus(DllExports::GdipGetPropertyIdList(nativeImage, numOfProperty, list)); }
Status GetPropertyItem(PROPID propId, UINT propSize, PropertyItem *buffer) { return SetStatus(DllExports::GdipGetPropertyItem(nativeImage, propId, propSize, buffer)); }
UINT GetPropertyItemSize(PROPID propId) { UINT size = 0; SetStatus(DllExports::GdipGetPropertyItemSize(nativeImage, propId, &size)); return size; }
Status GetPropertySize(UINT *totalBufferSize, UINT *numProperties) { return SetStatus(DllExports::GdipGetPropertySize(nativeImage, totalBufferSize, numProperties)); }
Status GetRawFormat(GUID *format) { return SetStatus(DllExports::GdipGetImageRawFormat(nativeImage, format)); }
Image * GetThumbnailImage(UINT thumbWidth, UINT thumbHeight, GetThumbnailImageAbort callback, VOID *callbackData) { GpImage *thumbImage = NULL; SetStatus(DllExports::GdipGetImageThumbnail( nativeImage, thumbWidth, thumbHeight, &thumbImage, callback, callbackData)); Image *newImage = new Image(thumbImage, lastStatus); if (newImage == NULL) { DllExports::GdipDisposeImage(thumbImage); } return newImage; }
ImageType GetType() { ImageType type; SetStatus(DllExports::GdipGetImageType(nativeImage, &type)); return type; }
REAL GetVerticalResolution() { REAL resolution = 0.0f; SetStatus(DllExports::GdipGetImageVerticalResolution(nativeImage, &resolution)); return resolution; }
UINT GetWidth() { UINT width = 0; SetStatus(DllExports::GdipGetImageWidth(nativeImage, &width)); return width; }
Status RemovePropertyItem(PROPID propId) { return SetStatus(DllExports::GdipRemovePropertyItem(nativeImage, propId)); }
Status RotateFlip(RotateFlipType rotateFlipType) { return SetStatus(DllExports::GdipImageRotateFlip(nativeImage, rotateFlipType)); }
Status Save(IStream *stream, const CLSID *clsidEncoder, const EncoderParameters *encoderParams) { return SetStatus(DllExports::GdipSaveImageToStream(nativeImage, stream, clsidEncoder, encoderParams)); }
Status Save(const WCHAR *filename, const CLSID *clsidEncoder, const EncoderParameters *encoderParams) { return SetStatus(DllExports::GdipSaveImageToFile(nativeImage, filename, clsidEncoder, encoderParams)); }
Status SaveAdd(const EncoderParameters *encoderParams) { return SetStatus(DllExports::GdipSaveAdd(nativeImage, encoderParams)); }
Status SaveAdd(Image *newImage, const EncoderParameters *encoderParams) {#if 1 // FIXME: Not available yet return SetStatus(NotImplemented);#else if (!newImage) return SetStatus(InvalidParameter);
return SetStatus(DllExports::GdipSaveAddImage(nativeImage, getNat(newImage), encoderParams));#endif }
Status SelectActiveFrame(const GUID *dimensionID, UINT frameIndex) { return SetStatus(DllExports::GdipImageSelectActiveFrame(nativeImage, dimensionID, frameIndex)); }
Status SetPalette(const ColorPalette *palette) { return SetStatus(DllExports::GdipSetImagePalette(nativeImage, palette)); }
Status SetPropertyItem(const PropertyItem *item) { return SetStatus(DllExports::GdipSetPropertyItem(nativeImage, item)); }
#if 0 ImageLayout GetLayout() const { return SetStatus(NotImplemented); }
Status SetLayout(const ImageLayout layout) { return SetStatus(NotImplemented); }#endif
protected: GpImage *nativeImage; mutable Status lastStatus;
Image() { }
Image(GpImage *image, Status status) : nativeImage(image), lastStatus(status) { }
Status SetStatus(Status status) const { if (status != Ok) lastStatus = status; return status; }
void SetNativeImage(GpImage *image) { nativeImage = image; }
private: // Image is not copyable Image(const Image &); Image & operator=(const Image &);
// get native friend inline GpImage *& getNat(const Image *image) { return const_cast<Image *>(image)->nativeImage; }};
class Bitmap : public Image{ friend class CachedBitmap;
public: // Bitmap(IDirectDrawSurface7 *surface) // <-- FIXME: compiler does not like this // { // lastStatus = DllExports::GdipCreateBitmapFromDirectDrawSurface(surface, &bitmap); // }
Bitmap(INT width, INT height, Graphics *target) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCreateBitmapFromGraphics(width, height, target ? getNat(target) : NULL, &bitmap); SetNativeImage(bitmap); }
Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCreateBitmapFromGdiDib(gdiBitmapInfo, gdiBitmapData, &bitmap); SetNativeImage(bitmap); }
Bitmap(INT width, INT height, PixelFormat format) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCreateBitmapFromScan0(width, height, 0, format, NULL, &bitmap); SetNativeImage(bitmap); }
Bitmap(HBITMAP hbm, HPALETTE hpal) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCreateBitmapFromHBITMAP(hbm, hpal, &bitmap); SetNativeImage(bitmap); }
Bitmap(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCreateBitmapFromScan0(width, height, stride, format, scan0, &bitmap); SetNativeImage(bitmap); }
Bitmap(const WCHAR *filename, BOOL useIcm) { GpBitmap *bitmap = NULL;
if (useIcm) lastStatus = DllExports::GdipCreateBitmapFromFileICM(filename, &bitmap); else lastStatus = DllExports::GdipCreateBitmapFromFile(filename, &bitmap);
SetNativeImage(bitmap); }
Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCreateBitmapFromResource(hInstance, bitmapName, &bitmap); SetNativeImage(bitmap); }
Bitmap(HICON hicon) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCreateBitmapFromHICON(hicon, &bitmap); SetNativeImage(bitmap); }
Bitmap(IStream *stream, BOOL useIcm) { GpBitmap *bitmap = NULL; if (useIcm) lastStatus = DllExports::GdipCreateBitmapFromStreamICM(stream, &bitmap); else lastStatus = DllExports::GdipCreateBitmapFromStream(stream, &bitmap); SetNativeImage(bitmap); }
Bitmap * Clone(const Rect &rect, PixelFormat format) { return Clone(rect.X, rect.Y, rect.Width, rect.Height, format); }
Bitmap * Clone(const RectF &rect, PixelFormat format) { return Clone(rect.X, rect.Y, rect.Width, rect.Height, format); }
Bitmap * Clone(REAL x, REAL y, REAL width, REAL height, PixelFormat format) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCloneBitmapArea(x, y, width, height, format, GetNativeBitmap(), &bitmap);
if (lastStatus != Ok) return NULL;
Bitmap *newBitmap = new Bitmap(bitmap); if (newBitmap == NULL) { DllExports::GdipDisposeImage(bitmap); }
return newBitmap; }
Bitmap * Clone(INT x, INT y, INT width, INT height, PixelFormat format) { GpBitmap *bitmap = NULL; lastStatus = DllExports::GdipCloneBitmapAreaI(x, y, width, height, format, GetNativeBitmap(), &bitmap);
if (lastStatus != Ok) return NULL;
Bitmap *newBitmap = new Bitmap(bitmap); if (newBitmap == NULL) { DllExports::GdipDisposeImage(bitmap); }
return newBitmap; }
static Bitmap * FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData) { return new Bitmap(gdiBitmapInfo, gdiBitmapData); }
// static Bitmap *FromDirectDrawSurface7(IDirectDrawSurface7 *surface) // <-- FIXME: compiler does not like this // { // return new Bitmap(surface); // }
static Bitmap * FromFile(const WCHAR *filename, BOOL useEmbeddedColorManagement) { return new Bitmap(filename, useEmbeddedColorManagement); }
static Bitmap * FromHBITMAP(HBITMAP hbm, HPALETTE hpal) { return new Bitmap(hbm, hpal); }
static Bitmap * FromHICON(HICON hicon) { return new Bitmap(hicon); }
static Bitmap * FromResource(HINSTANCE hInstance, const WCHAR *bitmapName) { return new Bitmap(hInstance, bitmapName); }
static Bitmap * FromStream(IStream *stream, BOOL useEmbeddedColorManagement) { return new Bitmap(stream, useEmbeddedColorManagement); }
Status GetHBITMAP(const Color &colorBackground, HBITMAP *hbmReturn) { return SetStatus( DllExports::GdipCreateHBITMAPFromBitmap(GetNativeBitmap(), hbmReturn, colorBackground.GetValue())); }
Status GetHICON(HICON *hicon) { return SetStatus(DllExports::GdipCreateHICONFromBitmap(GetNativeBitmap(), hicon)); }
Status GetPixel(INT x, INT y, Color *color) { ARGB argb; Status s = SetStatus(DllExports::GdipBitmapGetPixel(GetNativeBitmap(), x, y, &argb)); if (color) color->SetValue(argb); return s; }
Status LockBits(const Rect *rect, UINT flags, PixelFormat format, BitmapData *lockedBitmapData) { return SetStatus(DllExports::GdipBitmapLockBits(GetNativeBitmap(), rect, flags, format, lockedBitmapData)); }
Status SetPixel(INT x, INT y, const Color &color) { return SetStatus(DllExports::GdipBitmapSetPixel(GetNativeBitmap(), x, y, color.GetValue())); }
Status SetResolution(REAL xdpi, REAL ydpi) { return SetStatus(DllExports::GdipBitmapSetResolution(GetNativeBitmap(), xdpi, ydpi)); }
Status UnlockBits(BitmapData *lockedBitmapData) { return SetStatus(DllExports::GdipBitmapUnlockBits(GetNativeBitmap(), lockedBitmapData)); }
protected: Bitmap() { }
Bitmap(GpBitmap *nativeBitmap) { lastStatus = Ok; SetNativeImage(nativeBitmap); }
GpBitmap * GetNativeBitmap() const { return static_cast<GpBitmap *>(nativeImage); }};
class CachedBitmap : public GdiplusBase{ public: CachedBitmap(Bitmap *bitmap, Graphics *graphics) { nativeCachedBitmap = NULL; lastStatus = DllExports::GdipCreateCachedBitmap( bitmap->GetNativeBitmap(), graphics ? getNat(graphics) : NULL, &nativeCachedBitmap); }
~CachedBitmap() { DllExports::GdipDeleteCachedBitmap(nativeCachedBitmap); }
Status GetLastStatus() { return lastStatus; }
protected: mutable Status lastStatus; GpCachedBitmap *nativeCachedBitmap;
private: // CachedBitmap is not copyable CachedBitmap(const CachedBitmap &); CachedBitmap & operator=(const CachedBitmap &);
// get native friend inline GpCachedBitmap *& getNat(const CachedBitmap *cb) { return const_cast<CachedBitmap *>(cb)->nativeCachedBitmap; }};
class FontCollection : public GdiplusBase{ friend class FontFamily;
public: FontCollection() : nativeFontCollection(NULL), lastStatus(Ok) { }
virtual ~FontCollection() { }
Status GetFamilies(INT numSought, FontFamily *gpfamilies, INT *numFound) const { return SetStatus(NotImplemented); }
INT GetFamilyCount() const { INT numFound = 0; lastStatus = DllExports::GdipGetFontCollectionFamilyCount(nativeFontCollection, &numFound); return numFound; }
Status GetLastStatus() const { return lastStatus; }
protected: GpFontCollection *nativeFontCollection; mutable Status lastStatus;
Status SetStatus(Status status) const { if (status != Ok) lastStatus = status; return status; }
private: // FontCollection is not copyable FontCollection(const FontCollection &); FontCollection & operator=(const FontCollection &);
// get native friend inline GpFontCollection *& getNat(const FontCollection *fc) { return const_cast<FontCollection *>(fc)->nativeFontCollection; }};
class FontFamily : public GdiplusBase{ friend class Font;
public: FontFamily() { }
FontFamily(const WCHAR *name, const FontCollection *fontCollection) { GpFontCollection *theCollection = fontCollection ? getNat(fontCollection) : NULL; status = DllExports::GdipCreateFontFamilyFromName(name, theCollection, &fontFamily); }
FontFamily * Clone() { return NULL; }
static const FontFamily * GenericMonospace() { FontFamily *genericMonospace = new FontFamily(); genericMonospace->status = DllExports::GdipGetGenericFontFamilyMonospace(genericMonospace ? &genericMonospace->fontFamily : NULL); return genericMonospace; }
static const FontFamily * GenericSansSerif() { FontFamily *genericSansSerif = new FontFamily(); genericSansSerif->status = DllExports::GdipGetGenericFontFamilySansSerif(genericSansSerif ? &genericSansSerif->fontFamily : NULL); return genericSansSerif; }
static const FontFamily * GenericSerif() { FontFamily *genericSerif = new FontFamily(); genericSerif->status = DllExports::GdipGetGenericFontFamilyMonospace(genericSerif ? &genericSerif->fontFamily : NULL); return genericSerif; }
UINT16 GetCellAscent(INT style) const { UINT16 CellAscent; SetStatus(DllExports::GdipGetCellAscent(fontFamily, style, &CellAscent)); return CellAscent; }
UINT16 GetCellDescent(INT style) const { UINT16 CellDescent; SetStatus(DllExports::GdipGetCellDescent(fontFamily, style, &CellDescent)); return CellDescent; }
UINT16 GetEmHeight(INT style) { UINT16 EmHeight; SetStatus(DllExports::GdipGetEmHeight(fontFamily, style, &EmHeight)); return EmHeight; }
Status GetFamilyName(WCHAR name[LF_FACESIZE], WCHAR language) const { return SetStatus(DllExports::GdipGetFamilyName(fontFamily, name, language)); }
Status GetLastStatus() const { return status; }
UINT16 GetLineSpacing(INT style) const { UINT16 LineSpacing; SetStatus(DllExports::GdipGetLineSpacing(fontFamily, style, &LineSpacing)); return LineSpacing; }
BOOL IsAvailable() const { return FALSE; }
BOOL IsStyleAvailable(INT style) const { BOOL StyleAvailable; SetStatus(DllExports::GdipIsStyleAvailable(fontFamily, style, &StyleAvailable)); return StyleAvailable; }
private: mutable Status status; GpFontFamily *fontFamily;
Status SetStatus(Status status) const { if (status == Ok) return status; this->status = status; return status; }
// get native friend inline GpFontFamily *& getNat(const FontFamily *ff) { return const_cast<FontFamily *>(ff)->fontFamily; }};
class InstalledFontFamily : public FontFamily{ public: InstalledFontFamily() { }};
class PrivateFontCollection : public FontCollection{ public: PrivateFontCollection() { nativeFontCollection = NULL; lastStatus = DllExports::GdipNewPrivateFontCollection(&nativeFontCollection); }
virtual ~PrivateFontCollection() { DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection); }
Status AddFontFile(const WCHAR *filename) { return SetStatus(DllExports::GdipPrivateAddFontFile(nativeFontCollection, filename)); }
Status AddMemoryFont(const VOID *memory, INT length) { return SetStatus(DllExports::GdipPrivateAddMemoryFont(nativeFontCollection, memory, length)); }};
class Font : public GdiplusBase{ public: friend class FontFamily; friend class FontCollection; friend class Graphics;
Font(const FontFamily *family, REAL emSize, INT style, Unit unit) { status = DllExports::GdipCreateFont(family->fontFamily, emSize, style, unit, &font); }
Font(HDC hdc, const HFONT hfont) { }
Font(HDC hdc, const LOGFONTA *logfont) { status = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font); }
Font(HDC hdc, const LOGFONTW *logfont) { status = DllExports::GdipCreateFontFromLogfontW(hdc, logfont, &font); }
Font(const WCHAR *familyName, REAL emSize, INT style, Unit unit, const FontCollection *fontCollection) { }
Font(HDC hdc) { status = DllExports::GdipCreateFontFromDC(hdc, &font); }
Font * Clone() const { Font *cloneFont = new Font(); cloneFont->status = DllExports::GdipCloneFont(font, cloneFont ? &cloneFont->font : NULL); return cloneFont; }
Status GetFamily(FontFamily *family) const { return SetStatus(DllExports::GdipGetFamily(font, family ? &family->fontFamily : NULL)); }
REAL GetHeight(const Graphics *graphics) const { REAL height; SetStatus(DllExports::GdipGetFontHeight(font, graphics ? getNat(graphics) : NULL, &height)); return height; }
REAL GetHeight(REAL dpi) const { REAL height; SetStatus(DllExports::GdipGetFontHeightGivenDPI(font, dpi, &height)); return height; }
Status GetLastStatus() const { return status; }
Status GetLogFontA(const Graphics *g, LOGFONTA *logfontA) const { return SetStatus(DllExports::GdipGetLogFontA(font, g ? getNat(g) : NULL, logfontA)); }
Status GetLogFontW(const Graphics *g, LOGFONTW *logfontW) const { return SetStatus(DllExports::GdipGetLogFontW(font, g ? getNat(g) : NULL, logfontW)); }
REAL GetSize() const { REAL size; SetStatus(DllExports::GdipGetFontSize(font, &size)); return size; }
INT GetStyle() const { INT style; SetStatus(DllExports::GdipGetFontStyle(font, &style)); return style; }
Unit GetUnit() const { Unit unit; SetStatus(DllExports::GdipGetFontUnit(font, &unit)); return unit; }
BOOL IsAvailable() const { return FALSE; }
protected: Font() { }
private: mutable Status status; GpFont *font;
Status SetStatus(Status status) const { if (status == Ok) return status; this->status = status; return status; }
// get native friend inline GpFont *& getNat(const Font *font) { return const_cast<Font *>(font)->font; }};
class Region : public GdiplusBase{ public: friend class Graphics; friend class GraphicsPath; friend class Matrix;
Region(const Rect &rect) { lastStatus = DllExports::GdipCreateRegionRectI(&rect, &nativeRegion); }
Region() { lastStatus = DllExports::GdipCreateRegion(&nativeRegion); }
Region(const BYTE *regionData, INT size) { lastStatus = DllExports::GdipCreateRegionRgnData(regionData, size, &nativeRegion); }
Region(const GraphicsPath *path) { lastStatus = DllExports::GdipCreateRegionPath(getNat(path), &nativeRegion); }
Region(HRGN hRgn) { lastStatus = DllExports::GdipCreateRegionHrgn(hRgn, &nativeRegion); }
Region(const RectF &rect) { lastStatus = DllExports::GdipCreateRegionRect(&rect, &nativeRegion); }
Region * Clone() { Region *cloneRegion = new Region(); cloneRegion->lastStatus = DllExports::GdipCloneRegion(nativeRegion, cloneRegion ? &cloneRegion->nativeRegion : NULL); return cloneRegion; }
Status Complement(const GraphicsPath *path) { GpPath *thePath = path ? getNat(path) : NULL; return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, thePath, CombineModeComplement)); }
Status Complement(const Region *region) { GpRegion *theRegion = region ? getNat(region) : NULL; return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, theRegion, CombineModeComplement)); }
Status Complement(const Rect &rect) { return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeComplement)); }
Status Complement(const RectF &rect) { return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeComplement)); }
BOOL Equals(const Region *region, const Graphics *g) const { BOOL result; SetStatus( DllExports::GdipIsEqualRegion(nativeRegion, region ? getNat(region) : NULL, g ? getNat(g) : NULL, &result)); return result; }
Status Exclude(const GraphicsPath *path) { return SetStatus( DllExports::GdipCombineRegionPath(nativeRegion, path ? getNat(path) : NULL, CombineModeExclude)); }
Status Exclude(const RectF &rect) { return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeExclude)); }
Status Exclude(const Rect &rect) { return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeExclude)); }
Status Exclude(const Region *region) { return SetStatus( DllExports::GdipCombineRegionRegion(nativeRegion, region ? getNat(region) : NULL, CombineModeExclude)); }
static Region * FromHRGN(HRGN hRgn) { return new Region(hRgn); }
Status GetBounds(Rect *rect, const Graphics *g) const { return SetStatus(DllExports::GdipGetRegionBoundsI(nativeRegion, g ? getNat(g) : NULL, rect)); }
Status GetBounds(RectF *rect, const Graphics *g) const { return SetStatus(DllExports::GdipGetRegionBounds(nativeRegion, g ? getNat(g) : NULL, rect)); }
Status GetData(BYTE *buffer, UINT bufferSize, UINT *sizeFilled) const { return SetStatus(DllExports::GdipGetRegionData(nativeRegion, buffer, bufferSize, sizeFilled)); }
UINT GetDataSize() const { UINT bufferSize; SetStatus(DllExports::GdipGetRegionDataSize(nativeRegion, &bufferSize)); return bufferSize; }
HRGN GetHRGN(const Graphics *g) const { HRGN hRgn; SetStatus(DllExports::GdipGetRegionHRgn(nativeRegion, g ? getNat(g) : NULL, &hRgn)); return hRgn; }
Status GetLastStatus() { return lastStatus; }
Status GetRegionScans(const Matrix *matrix, Rect *rects, INT *count) const { return SetStatus(DllExports::GdipGetRegionScansI(nativeRegion, rects, count, matrix ? getNat(matrix) : NULL)); }
Status GetRegionScans(const Matrix *matrix, RectF *rects, INT *count) const { return SetStatus(DllExports::GdipGetRegionScans(nativeRegion, rects, count, matrix ? getNat(matrix) : NULL)); }
UINT GetRegionScansCount(const Matrix *matrix) const { UINT count; SetStatus(DllExports::GdipGetRegionScansCount(nativeRegion, &count, matrix ? getNat(matrix) : NULL)); return count; }
Status Intersect(const Rect &rect) { return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeIntersect)); }
Status Intersect(const GraphicsPath *path) { GpPath *thePath = path ? getNat(path) : NULL; return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, thePath, CombineModeIntersect)); }
Status Intersect(const RectF &rect) { return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeIntersect)); }
Status Intersect(const Region *region) { return SetStatus( DllExports::GdipCombineRegionRegion(nativeRegion, region ? getNat(region) : NULL, CombineModeIntersect)); }
BOOL IsEmpty(const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsEmptyRegion(nativeRegion, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsInfinite(const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsInfiniteRegion(nativeRegion, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(const PointF &point, const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsVisibleRegionPoint(nativeRegion, point.X, point.Y, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(const RectF &rect, const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsVisibleRegionRect( nativeRegion, rect.X, rect.Y, rect.Width, rect.Height, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(const Rect &rect, const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsVisibleRegionRectI( nativeRegion, rect.X, rect.Y, rect.Width, rect.Height, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(INT x, INT y, const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsVisibleRegionPointI(nativeRegion, x, y, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(REAL x, REAL y, const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsVisibleRegionPoint(nativeRegion, x, y, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(INT x, INT y, INT width, INT height, const Graphics *g) const { BOOL result; SetStatus( DllExports::GdipIsVisibleRegionRectI(nativeRegion, x, y, width, height, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(const Point &point, const Graphics *g) const { BOOL result; SetStatus(DllExports::GdipIsVisibleRegionPointI(nativeRegion, point.X, point.Y, g ? getNat(g) : NULL, &result)); return result; }
BOOL IsVisible(REAL x, REAL y, REAL width, REAL height, const Graphics *g) const { BOOL result; SetStatus( DllExports::GdipIsVisibleRegionRect(nativeRegion, x, y, width, height, g ? getNat(g) : NULL, &result)); return result; }
Status MakeEmpty() { return SetStatus(DllExports::GdipSetEmpty(nativeRegion)); }
Status MakeInfinite() { return SetStatus(DllExports::GdipSetInfinite(nativeRegion)); }
Status Transform(const Matrix *matrix) { return SetStatus(DllExports::GdipTransformRegion(nativeRegion, matrix ? getNat(matrix) : NULL)); }
Status Translate(REAL dx, REAL dy) { return SetStatus(DllExports::GdipTranslateRegion(nativeRegion, dx, dy)); }
Status Translate(INT dx, INT dy) { return SetStatus(DllExports::GdipTranslateRegionI(nativeRegion, dx, dy)); }
Status Union(const Rect &rect) { return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeUnion)); }
Status Union(const Region *region) { return SetStatus( DllExports::GdipCombineRegionRegion(nativeRegion, region ? getNat(region) : NULL, CombineModeUnion)); }
Status Union(const RectF &rect) { return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeUnion)); }
Status Union(const GraphicsPath *path) { return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path ? getNat(path) : NULL, CombineModeUnion)); }
Status Xor(const GraphicsPath *path) { return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path ? getNat(path) : NULL, CombineModeXor)); }
Status Xor(const RectF &rect) { return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeXor)); }
Status Xor(const Rect &rect) { return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeXor)); }
Status Xor(const Region *region) { return SetStatus( DllExports::GdipCombineRegionRegion(nativeRegion, region ? getNat(region) : NULL, CombineModeXor)); }
private: GpRegion *nativeRegion; mutable Status lastStatus;
Status SetStatus(Status status) const { if (status != Ok) lastStatus = status; return status; }
// get native friend inline GpRegion *& getNat(const Region *region) { return const_cast<Region *>(region)->nativeRegion; }};
class CustomLineCap : public GdiplusBase{ public: CustomLineCap(const GraphicsPath *fillPath, const GraphicsPath *strokePath, LineCap baseCap, REAL baseInset = 0);
~CustomLineCap();
CustomLineCap * Clone();
LineCap GetBaseCap();
REAL GetBaseInset();
Status GetLastStatus();
Status GetStrokeCaps(LineCap *startCap, LineCap *endCap);
LineJoin GetStrokeJoin();
REAL GetWidthScale();
Status SetBaseCap(LineCap baseCap);
Status SetBaseInset(REAL inset);
Status SetStrokeCap(LineCap strokeCap);
Status SetStrokeCaps(LineCap startCap, LineCap endCap);
Status SetStrokeJoin(LineJoin lineJoin);
Status SetWidthScale(IN REAL widthScale);
protected: GpCustomLineCap *nativeCap; mutable Status lastStatus;
CustomLineCap() : nativeCap(NULL), lastStatus(Ok) { }
CustomLineCap(GpCustomLineCap *cap, Status status) : nativeCap(cap), lastStatus(status) { }
void SetNativeCap(GpCustomLineCap *cap) { nativeCap = cap; }
Status SetStatus(Status status) const { if (status == Ok) lastStatus = status; return status; }
private: // CustomLineCap is not copyable CustomLineCap(const CustomLineCap &); CustomLineCap & operator=(const CustomLineCap &);
// get native friend inline GpCustomLineCap *& getNat(const CustomLineCap *cap) { return const_cast<CustomLineCap *>(cap)->nativeCap; }};
inline Image *TextureBrush::GetImage() const{ GpImage *image = NULL; GpTexture *texture = GetNativeTexture(); SetStatus(DllExports::GdipGetTextureImage(texture, &image)); if (lastStatus != Ok) return NULL;
Image *newImage = new Image(image, lastStatus); if (!newImage) DllExports::GdipDisposeImage(image); return newImage;}
#endif /* _GDIPLUSHEADERS_H */