Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
gdiplusheaders.h
00001 /* 00002 * gdiplusheaders.h 00003 * 00004 * GDI+ Bitmap, CachedBitmap, CustomLineCap, Font, FontCollection, 00005 * FontFamily, Image, InstalledFontCollection, PrivateFontCollection, 00006 * Region class definitions. 00007 * Implementation of these classes is in gdiplusimpl.h. 00008 * 00009 * This file is part of the w32api package. 00010 * 00011 * Contributors: 00012 * Created by Markus Koenig <markus@stber-koenig.de> 00013 * 00014 * THIS SOFTWARE IS NOT COPYRIGHTED 00015 * 00016 * This source code is offered for use in the public domain. You may 00017 * use, modify or distribute it freely. 00018 * 00019 * This code is distributed in the hope that it will be useful but 00020 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00021 * DISCLAIMED. This includes but is not limited to warranties of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00023 * 00024 */ 00025 00026 #ifndef __GDIPLUS_HEADERS_H 00027 #define __GDIPLUS_HEADERS_H 00028 #if __GNUC__ >=3 00029 #pragma GCC system_header 00030 #endif 00031 00032 #ifndef __cplusplus 00033 #error "A C++ compiler is required to include gdiplusheaders.h." 00034 #endif 00035 00036 /* 00037 * Note: Virtual inline functions (dtors, Clone()) are implemented here: If 00038 * these were defined outside class scope, the compiler would always generate 00039 * code for them (and the vtable), even if these classes were never used. 00040 */ 00041 00042 class Bitmap; 00043 class Effect; 00044 class FontCollection; 00045 class FontFamily; 00046 class Graphics; 00047 class GraphicsPath; 00048 class Matrix; 00049 class Pen; 00050 00051 class Image: public GdiplusBase 00052 { 00053 friend class Bitmap; 00054 friend class Metafile; 00055 friend class CachedBitmap; 00056 friend class Graphics; 00057 friend class TextureBrush; 00058 00059 public: 00060 static Image* FromFile(const WCHAR *filename, 00061 BOOL useEmbeddedColorManagement = FALSE); 00062 static Image* FromStream(IStream *stream, 00063 BOOL useEmbeddedColorManagement = FALSE); 00064 00065 Image(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE); 00066 Image(IStream *stream, BOOL useEmbeddedColorManagement = FALSE); 00067 00068 virtual ~Image() 00069 { 00070 DllExports::GdipDisposeImage(nativeImage); 00071 } 00072 virtual Image* Clone() const 00073 { 00074 GpImage *cloneImage = NULL; 00075 Status status = updateStatus(DllExports::GdipCloneImage( 00076 nativeImage, &cloneImage)); 00077 if (status == Ok) { 00078 Image *result = new Image(cloneImage, lastStatus); 00079 if (!result) { 00080 DllExports::GdipDisposeImage(cloneImage); 00081 lastStatus = OutOfMemory; 00082 } 00083 return result; 00084 } else { 00085 return NULL; 00086 } 00087 } 00088 00089 Status FindFirstItem(ImageItemData *item); 00090 Status FindNextItem(ImageItemData *item); 00091 Status GetAllPropertyItems(UINT totalBufferSize, 00092 UINT numProperties, PropertyItem *allItems); 00093 Status GetBounds(RectF *srcRect, Unit *srcUnit); 00094 Status GetEncoderParameterList(const CLSID *clsidEncoder, 00095 UINT size, EncoderParameters *buffer); 00096 UINT GetEncoderParameterListSize(const CLSID *clsidEncoder); 00097 UINT GetFlags(); 00098 UINT GetFrameCount(const GUID *dimensionID); 00099 UINT GetFrameDimensionsCount(); 00100 Status GetFrameDimensionsList(GUID *dimensionIDs, UINT count); 00101 UINT GetHeight(); 00102 REAL GetHorizontalResolution(); 00103 Status GetItemData(ImageItemData *item); 00104 Status GetPalette(ColorPalette *palette, INT size); 00105 INT GetPaletteSize(); 00106 Status GetPhysicalDimension(SizeF *size); 00107 PixelFormat GetPixelFormat(); 00108 UINT GetPropertyCount(); 00109 Status GetPropertyIdList(UINT numOfProperty, PROPID *list); 00110 Status GetPropertyItem(PROPID propId, UINT propSize, 00111 PropertyItem *buffer); 00112 UINT GetPropertyItemSize(PROPID propId); 00113 Status GetPropertySize(UINT *totalBufferSize, UINT *numProperties); 00114 Status GetRawFormat(GUID *format); 00115 Image* GetThumbnailImage(UINT thumbWidth, UINT thumbHeight, 00116 GetThumbnailImageAbort callback, VOID *callbackData); 00117 ImageType GetType() const; 00118 REAL GetVerticalResolution(); 00119 UINT GetWidth(); 00120 Status RemovePropertyItem(PROPID propId); 00121 Status RotateFlip(RotateFlipType rotateFlipType); 00122 Status Save(IStream *stream, const CLSID *clsidEncoder, 00123 const EncoderParameters *encoderParams); 00124 Status Save(const WCHAR *filename, const CLSID *clsidEncoder, 00125 const EncoderParameters *encoderParams); 00126 Status SaveAdd(const EncoderParameters *encoderParams); 00127 Status SaveAdd(Image *newImage, const EncoderParameters *encoderParams); 00128 Status SelectActiveFrame(const GUID *dimensionID, UINT frameIndex); 00129 Status SetAbort(GdiplusAbort *pIAbort); 00130 Status SetPalette(const ColorPalette *palette); 00131 Status SetPropertyItem(const PropertyItem *item); 00132 00133 Status GetLastStatus() const 00134 { 00135 Status result = lastStatus; 00136 lastStatus = Ok; 00137 return result; 00138 } 00139 00140 private: 00141 Image(GpImage *image, Status status): 00142 nativeImage(image), lastStatus(status) {} 00143 Image(const Image&); 00144 Image& operator=(const Image&); 00145 00146 Status updateStatus(Status newStatus) const 00147 { 00148 if (newStatus != Ok) lastStatus = newStatus; 00149 return newStatus; 00150 } 00151 00152 GpImage *nativeImage; 00153 mutable Status lastStatus; 00154 }; 00155 00156 class Bitmap: public Image 00157 { 00158 public: 00159 static Bitmap* FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo, 00160 VOID *gdiBitmapData); 00161 static Bitmap* FromDirectDrawSurface7(IDirectDrawSurface7 *surface); 00162 static Bitmap* FromFile(const WCHAR *filename, 00163 BOOL useEmbeddedColorManagement = FALSE); 00164 static Bitmap* FromHBITMAP(HBITMAP hbm, HPALETTE hpal); 00165 static Bitmap* FromHICON(HICON icon); 00166 static Bitmap* FromResource(HINSTANCE hInstance, 00167 const WCHAR *bitmapName); 00168 static Bitmap* FromStream(IStream *stream, 00169 BOOL useEmbeddedColorManagement = FALSE); 00170 static Status ApplyEffect(Bitmap **inputs, INT numInputs, 00171 Effect *effect, RECT *ROI, 00172 RECT *outputRect, Bitmap **output); 00173 static Status InitializePalette(ColorPalette *palette, 00174 PaletteType paletteType, INT optimalColors, 00175 BOOL useTransparentColor, Bitmap *bitmap); 00176 00177 Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData); 00178 Bitmap(IDirectDrawSurface7 *surface); 00179 Bitmap(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE); 00180 Bitmap(HBITMAP hbm, HPALETTE hpal); 00181 Bitmap(HICON hicon); 00182 Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName); 00183 Bitmap(IStream *stream, BOOL useEmbeddedColorManagement = FALSE); 00184 Bitmap(INT width, INT height, Graphics *target); 00185 Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppARGB); 00186 Bitmap(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0); 00187 00188 virtual ~Bitmap() 00189 { 00190 } 00191 virtual Bitmap* Clone() const 00192 { 00193 GpImage *cloneImage = NULL; 00194 Status status = updateStatus(DllExports::GdipCloneImage( 00195 nativeImage, &cloneImage)); 00196 if (status == Ok) { 00197 Bitmap *result = new Bitmap(cloneImage, lastStatus); 00198 if (!result) { 00199 DllExports::GdipDisposeImage(cloneImage); 00200 lastStatus = OutOfMemory; 00201 } 00202 return result; 00203 } else { 00204 return NULL; 00205 } 00206 } 00207 00208 Bitmap* Clone(const RectF& rect, PixelFormat format) const; 00209 Bitmap* Clone(const Rect& rect, PixelFormat format) const; 00210 Bitmap* Clone(REAL x, REAL y, REAL width, REAL height, 00211 PixelFormat format) const; 00212 Bitmap* Clone(INT x, INT y, INT width, INT height, 00213 PixelFormat format) const; 00214 00215 Status ApplyEffect(Effect *effect, RECT *ROI); 00216 Status ConvertFormat(PixelFormat format, DitherType ditherType, 00217 PaletteType paletteType, ColorPalette *palette, 00218 REAL alphaThresholdPercent); 00219 Status GetHBITMAP(const Color& colorBackground, HBITMAP *hbmReturn) const; 00220 Status GetHICON(HICON *icon) const; 00221 Status GetHistogram(HistogramFormat format, UINT numberOfEntries, 00222 UINT *channel0, UINT *channel1, 00223 UINT *channel2, UINT *channel3) const; 00224 Status GetHistogramSize(HistogramFormat format, 00225 UINT *numberOfEntries) const; 00226 Status GetPixel(INT x, INT y, Color *color) const; 00227 Status LockBits(const Rect *rect, UINT flags, PixelFormat format, 00228 BitmapData *lockedBitmapData); 00229 Status SetPixel(INT x, INT y, const Color& color); 00230 Status SetResolution(REAL xdpi, REAL ydpi); 00231 Status UnlockBits(BitmapData *lcokedBitmapData); 00232 00233 private: 00234 Bitmap(GpImage *image, Status status): Image(image, status) {} 00235 Bitmap(const Bitmap&); 00236 Bitmap& operator=(const Bitmap&); 00237 }; 00238 00239 class CachedBitmap: public GdiplusBase 00240 { 00241 friend class Graphics; 00242 00243 public: 00244 CachedBitmap(Bitmap *bitmap, Graphics *graphics); 00245 ~CachedBitmap(); 00246 00247 Status GetLastStatus() const 00248 { 00249 return lastStatus; 00250 } 00251 00252 private: 00253 CachedBitmap(const CachedBitmap&); 00254 CachedBitmap& operator=(const CachedBitmap&); 00255 00256 GpCachedBitmap *nativeCachedBitmap; 00257 Status lastStatus; 00258 }; 00259 00260 class CustomLineCap: public GdiplusBase 00261 { 00262 friend class AdjustableArrowCap; 00263 friend class Pen; 00264 00265 public: 00266 CustomLineCap(const GraphicsPath *fillPath, 00267 const GraphicsPath *strokePath, 00268 LineCap baseCap = LineCapFlat, 00269 REAL baseInset = 0.0f); 00270 00271 virtual ~CustomLineCap() 00272 { 00273 DllExports::GdipDeleteCustomLineCap(nativeCustomLineCap); 00274 } 00275 virtual CustomLineCap* Clone() const 00276 { 00277 GpCustomLineCap *cloneCustomLineCap = NULL; 00278 Status status = updateStatus(DllExports::GdipCloneCustomLineCap( 00279 nativeCustomLineCap, &cloneCustomLineCap)); 00280 if (status == Ok) { 00281 CustomLineCap *result = new CustomLineCap( 00282 cloneCustomLineCap, lastStatus); 00283 if (!result) { 00284 DllExports::GdipDeleteCustomLineCap(cloneCustomLineCap); 00285 lastStatus = OutOfMemory; 00286 } 00287 return result; 00288 } else { 00289 return NULL; 00290 } 00291 } 00292 00293 LineCap GetBaseCap() const; 00294 REAL GetBaseInset() const; 00295 Status GetStrokeCaps(LineCap *startCap, LineCap *endCap) const; 00296 LineJoin GetStrokeJoin() const; 00297 REAL GetWidthScale() const; 00298 Status SetBaseCap(LineCap baseCap); 00299 Status SetBaseInset(REAL inset); 00300 Status SetStrokeCap(LineCap strokeCap); 00301 Status SetStrokeCaps(LineCap startCap, LineCap endCap); 00302 Status SetStrokeJoin(LineJoin lineJoin); 00303 Status SetWidthScale(REAL widthScale); 00304 00305 Status GetLastStatus() const 00306 { 00307 Status result = lastStatus; 00308 lastStatus = Ok; 00309 return result; 00310 } 00311 00312 private: 00313 CustomLineCap(GpCustomLineCap *customLineCap, Status status): 00314 nativeCustomLineCap(customLineCap), lastStatus(status) {} 00315 CustomLineCap(const CustomLineCap&); 00316 CustomLineCap& operator=(const CustomLineCap&); 00317 00318 Status updateStatus(Status newStatus) const 00319 { 00320 if (newStatus != Ok) lastStatus = newStatus; 00321 return newStatus; 00322 } 00323 00324 GpCustomLineCap *nativeCustomLineCap; 00325 mutable Status lastStatus; 00326 }; 00327 00328 class Font: public GdiplusBase 00329 { 00330 friend class Graphics; 00331 00332 public: 00333 Font(const FontFamily *family, REAL emSize, 00334 INT style = FontStyleRegular, 00335 Unit unit = UnitPoint); 00336 Font(HDC hdc, HFONT hfont); 00337 Font(HDC hdc, const LOGFONTA *logfont); 00338 Font(HDC hdc, const LOGFONTW *logfont); 00339 Font(HDC hdc); 00340 Font(const WCHAR *familyName, REAL emSize, 00341 INT style = FontStyleRegular, 00342 Unit unit = UnitPoint, 00343 const FontCollection *fontCollection = NULL); 00344 ~Font(); 00345 Font* Clone() const; 00346 00347 Status GetFamily(FontFamily *family) const; 00348 REAL GetHeight(const Graphics *graphics) const; 00349 REAL GetHeight(REAL dpi) const; 00350 Status GetLogFontA(const Graphics *graphics, LOGFONTA *logfontA) const; 00351 Status GetLogFontW(const Graphics *graphics, LOGFONTW *logfontW) const; 00352 REAL GetSize() const; 00353 INT GetStyle() const; 00354 Unit GetUnit() const; 00355 00356 Status GetLastStatus() const 00357 { 00358 return lastStatus; 00359 } 00360 BOOL IsAvailable() const 00361 { 00362 return nativeFont != NULL; 00363 } 00364 00365 private: 00366 Font(GpFont *font, Status status): 00367 nativeFont(font), lastStatus(status) {} 00368 Font(const Font&); 00369 Font& operator=(const Font&); 00370 00371 Status updateStatus(Status newStatus) const 00372 { 00373 if (newStatus != Ok) lastStatus = newStatus; 00374 return newStatus; 00375 } 00376 00377 GpFont *nativeFont; 00378 mutable Status lastStatus; 00379 }; 00380 00381 class FontCollection: public GdiplusBase 00382 { 00383 friend class InstalledFontCollection; 00384 friend class PrivateFontCollection; 00385 friend class Font; 00386 friend class FontFamily; 00387 00388 public: 00389 FontCollection(); 00390 virtual ~FontCollection() {} 00391 00392 Status GetFamilies(INT numSought, FontFamily *families, 00393 INT *numFound) const; 00394 INT GetFamilyCount() const; 00395 00396 Status GetLastStatus() const 00397 { 00398 return lastStatus; 00399 } 00400 00401 private: 00402 FontCollection(const FontCollection&); 00403 FontCollection& operator=(const FontCollection&); 00404 00405 Status updateStatus(Status newStatus) const 00406 { 00407 return lastStatus = newStatus; 00408 } 00409 00410 GpFontCollection *nativeFontCollection; 00411 mutable Status lastStatus; 00412 }; 00413 00414 class FontFamily: public GdiplusBase 00415 { 00416 friend class Font; 00417 friend class FontCollection; 00418 friend class GraphicsPath; 00419 00420 public: 00421 static const FontFamily* GenericMonospace(); 00422 static const FontFamily* GenericSansSerif(); 00423 static const FontFamily* GenericSerif(); 00424 00425 FontFamily(); 00426 FontFamily(const WCHAR *name, 00427 const FontCollection *fontCollection = NULL); 00428 ~FontFamily(); 00429 FontFamily* Clone() const; 00430 00431 UINT16 GetCellAscent(INT style) const; 00432 UINT16 GetCellDescent(INT style) const; 00433 UINT16 GetEmHeight(INT style) const; 00434 Status GetFamilyName(WCHAR name[LF_FACESIZE], 00435 LANGID language = LANG_NEUTRAL) const; 00436 UINT16 GetLineSpacing(INT style) const; 00437 BOOL IsStyleAvailable(INT style) const; 00438 00439 Status GetLastStatus() const 00440 { 00441 Status result = lastStatus; 00442 lastStatus = Ok; 00443 return result; 00444 } 00445 BOOL IsAvailable() const 00446 { 00447 return nativeFontFamily != NULL; 00448 } 00449 00450 private: 00451 FontFamily(GpFontFamily *fontFamily, Status status): 00452 nativeFontFamily(fontFamily), lastStatus(status) {} 00453 FontFamily(const FontFamily&); 00454 FontFamily& operator=(const FontFamily&); 00455 00456 Status updateStatus(Status newStatus) const 00457 { 00458 if (newStatus != Ok) lastStatus = newStatus; 00459 return newStatus; 00460 } 00461 00462 GpFontFamily *nativeFontFamily; 00463 mutable Status lastStatus; 00464 }; 00465 00466 class InstalledFontCollection: public FontCollection 00467 { 00468 public: 00469 InstalledFontCollection(); 00470 virtual ~InstalledFontCollection() {} 00471 }; 00472 00473 class PrivateFontCollection: public FontCollection 00474 { 00475 public: 00476 PrivateFontCollection(); 00477 00478 virtual ~PrivateFontCollection() 00479 { 00480 DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection); 00481 } 00482 00483 Status AddFontFile(const WCHAR *filename); 00484 Status AddMemoryFont(const VOID *memory, INT length); 00485 }; 00486 00487 class Region: public GdiplusBase 00488 { 00489 friend class Graphics; 00490 00491 public: 00492 static Region* FromHRGN(HRGN hrgn); 00493 00494 Region(); 00495 Region(const RectF& rect); 00496 Region(const Rect& rect); 00497 Region(const GraphicsPath *path); 00498 Region(const BYTE *regionData, INT size); 00499 Region(HRGN hrgn); 00500 ~Region(); 00501 Region* Clone() const; 00502 00503 Status Complement(const RectF& rect); 00504 Status Complement(const Rect& rect); 00505 Status Complement(const Region *region); 00506 Status Complement(const GraphicsPath *path); 00507 BOOL Equals(const Region *region, const Graphics *graphics) const; 00508 Status Exclude(const RectF& rect); 00509 Status Exclude(const Rect& rect); 00510 Status Exclude(const Region *region); 00511 Status Exclude(const GraphicsPath *path); 00512 Status GetBounds(RectF *rect, const Graphics *graphics) const; 00513 Status GetBounds(Rect *rect, const Graphics *graphics) const; 00514 Status GetData(BYTE *buffer, UINT bufferSize, UINT *sizeFilled) const; 00515 UINT GetDataSize() const; 00516 HRGN GetHRGN(const Graphics *graphics) const; 00517 Status GetRegionScans(const Matrix *matrix, 00518 RectF *rects, INT *count) const; 00519 Status GetRegionScans(const Matrix *matrix, 00520 Rect *rects, INT *count) const; 00521 UINT GetRegionScansCount(const Matrix *matrix) const; 00522 Status Intersect(const RectF& rect); 00523 Status Intersect(const Rect& rect); 00524 Status Intersect(const Region *region); 00525 Status Intersect(const GraphicsPath *path); 00526 BOOL IsEmpty(const Graphics *graphics) const; 00527 BOOL IsInfinite(const Graphics *graphics) const; 00528 BOOL IsVisible(REAL x, REAL y, 00529 const Graphics *graphics = NULL) const; 00530 BOOL IsVisible(INT x, INT y, 00531 const Graphics *graphics = NULL) const; 00532 BOOL IsVisible(const PointF& point, 00533 const Graphics *graphics = NULL) const; 00534 BOOL IsVisible(const Point& point, 00535 const Graphics *graphics = NULL) const; 00536 BOOL IsVisible(REAL x, REAL y, REAL width, REAL height, 00537 const Graphics *graphics = NULL) const; 00538 BOOL IsVisible(INT x, INT y, INT width, INT height, 00539 const Graphics *graphics = NULL) const; 00540 BOOL IsVisible(const RectF& rect, 00541 const Graphics *graphics = NULL) const; 00542 BOOL IsVisible(const Rect& rect, 00543 const Graphics *graphics = NULL) const; 00544 Status MakeEmpty(); 00545 Status MakeInfinite(); 00546 Status Transform(const Matrix *matrix); 00547 Status Translate(REAL dx, REAL dy); 00548 Status Translate(INT dx, INT dy); 00549 Status Union(const RectF& rect); 00550 Status Union(const Rect& rect); 00551 Status Union(const Region *region); 00552 Status Union(const GraphicsPath *path); 00553 Status Xor(const RectF& rect); 00554 Status Xor(const Rect& rect); 00555 Status Xor(const Region *region); 00556 Status Xor(const GraphicsPath *path); 00557 00558 Status GetLastStatus() const 00559 { 00560 Status result = lastStatus; 00561 lastStatus = Ok; 00562 return result; 00563 } 00564 00565 private: 00566 Region(GpRegion *region, Status status): 00567 nativeRegion(region), lastStatus(status) {} 00568 Region(const Region&); 00569 Region& operator=(const Region&); 00570 00571 Status updateStatus(Status newStatus) const 00572 { 00573 if (newStatus != Ok) lastStatus = newStatus; 00574 return newStatus; 00575 } 00576 00577 GpRegion *nativeRegion; 00578 mutable Status lastStatus; 00579 }; 00580 00581 #endif /* __GDIPLUS_HEADERS_H */
Generated on Tue Jul 12 2022 19:59:54 by
