Embed:
(wiki syntax)
Show/hide line numbers
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
1.7.2