diff --git a/reactos/sdk/include/psdk/gdiplus.h b/reactos/sdk/include/psdk/gdiplus.h index f063b3e2a84..6e97881fa56 100644 --- a/reactos/sdk/include/psdk/gdiplus.h +++ b/reactos/sdk/include/psdk/gdiplus.h @@ -42,6 +42,18 @@ namespace Gdiplus { #include "gdiplusflat.h" }; + +#include "gdiplusbase.h" +#include "gdiplusmatrix.h" +#include "gdiplusimageattributes.h" +#include "gdiplusbrush.h" +#include "gdipluspen.h" +#include "gdiplusstringformat.h" +#include "gdipluspath.h" +#include "gdiplusgraphics.h" +#include "gdiplusheaders.h" +#include "gdiplusmetafile.h" +#include "gdipluslinecaps.h" }; #else /* end c++ includes */ diff --git a/reactos/sdk/include/psdk/gdiplusbrush.h b/reactos/sdk/include/psdk/gdiplusbrush.h index e5c796d7897..f29897790c4 100644 --- a/reactos/sdk/include/psdk/gdiplusbrush.h +++ b/reactos/sdk/include/psdk/gdiplusbrush.h @@ -19,6 +19,8 @@ #ifndef _GDIPLUSBRUSH_H #define _GDIPLUSBRUSH_H +class Image; + class Brush : public GdiplusBase { public: diff --git a/reactos/sdk/include/psdk/gdipluscolor.h b/reactos/sdk/include/psdk/gdipluscolor.h index 16417374a96..934351d097f 100644 --- a/reactos/sdk/include/psdk/gdipluscolor.h +++ b/reactos/sdk/include/psdk/gdipluscolor.h @@ -54,47 +54,47 @@ public: Argb = a << 24 | r << 16 | g << 8 | b; } - BYTE GetA(VOID) + BYTE GetA(VOID) const { return (Argb >> 24) & 0xff; } - BYTE GetAlpha(VOID) + BYTE GetAlpha(VOID) const { return (Argb >> 24) & 0xff; } - BYTE GetB(VOID) + BYTE GetB(VOID) const { return Argb & 0xff; } - BYTE GetBlue(VOID) + BYTE GetBlue(VOID) const { return Argb & 0xff; } - BYTE GetG(VOID) + BYTE GetG(VOID) const { return (Argb >> 8) & 0xff; } - BYTE GetGreen(VOID) + BYTE GetGreen(VOID) const { return (Argb >> 8) & 0xff; } - BYTE GetR(VOID) + BYTE GetR(VOID) const { return (Argb >> 16) & 0xff; } - BYTE GetRed(VOID) + BYTE GetRed(VOID) const { return (Argb >> 16) & 0xff; } - ARGB GetValue(VOID) + ARGB GetValue(VOID) const { return Argb; } @@ -114,7 +114,7 @@ public: Argb = argb; } - COLORREF ToCOLORREF(VOID) + COLORREF ToCOLORREF(VOID) const { return (Argb & 0x000000ff) << 16 | (Argb & 0x0000ff00) | (Argb & 0x00ff0000) >> 16; } diff --git a/reactos/sdk/include/psdk/gdiplusenums.h b/reactos/sdk/include/psdk/gdiplusenums.h index 3223d2b63b6..e30c3e74560 100644 --- a/reactos/sdk/include/psdk/gdiplusenums.h +++ b/reactos/sdk/include/psdk/gdiplusenums.h @@ -228,6 +228,14 @@ enum EmfType EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual }; +enum EmfToWmfBitsFlags +{ + EmfToWmfBitsFlagsDefault = 0, + EmfToWmfBitsFlagsEmbedEmf = 1, + EmfToWmfBitsFlagsIncludePlaceable = 2, + EmfToWmfBitsFlagsNoXORClip = 4 +}; + enum CompositingMode { CompositingModeSourceOver, diff --git a/reactos/sdk/include/psdk/gdiplusgraphics.h b/reactos/sdk/include/psdk/gdiplusgraphics.h index dd04e8d2801..27c580632c5 100644 --- a/reactos/sdk/include/psdk/gdiplusgraphics.h +++ b/reactos/sdk/include/psdk/gdiplusgraphics.h @@ -19,8 +19,21 @@ #ifndef _GDIPLUSGRAPHICS_H #define _GDIPLUSGRAPHICS_H +class Image; +class ImageAttributes; +class CachedBitmap; +class Region; +class Font; +class GraphicsPath; +class Metafile; + class Graphics : public GdiplusBase { + friend class Region; + friend class Font; + friend class Bitmap; + friend class CachedBitmap; + public: Graphics(Image *image) { diff --git a/reactos/sdk/include/psdk/gdiplusheaders.h b/reactos/sdk/include/psdk/gdiplusheaders.h index 4e705c2b02d..883c8c2bc1e 100644 --- a/reactos/sdk/include/psdk/gdiplusheaders.h +++ b/reactos/sdk/include/psdk/gdiplusheaders.h @@ -69,14 +69,15 @@ public: Status GetEncoderParameterList(const CLSID *clsidEncoder, UINT size, EncoderParameters *buffer) { - return SetStatus(DllExports::GdipGetEncoderParameterList(image, clsidEncoder, size, buffer)); + return NotImplemented; // FIXME: not available: SetStatus(DllExports::GdipGetEncoderParameterList(image, clsidEncoder, size, buffer)); } UINT GetEncoderParameterListSize(const CLSID *clsidEncoder) { - UINT size; - SetStatus(DllExports::GdipGetEncoderParameterListSize(image, clsidEncoder, &size)); - return size; + return 0; // FIXME: not available: +// UINT size; +// SetStatus(DllExports::GdipGetEncoderParameterListSize(image, clsidEncoder, &size)); +// return size; } UINT GetFlags(VOID) @@ -138,7 +139,7 @@ public: Status GetPhysicalDimension(SizeF *size) { - return SetStatus(DllExports::GdipGetImagePhysicalDimension(image, &(size->Width), &(size->Height))); + return SetStatus(DllExports::GdipGetImageDimension(image, &size->Width, &size->Height)); } PixelFormat GetPixelFormat(VOID) @@ -179,7 +180,7 @@ public: Status GetRawFormat(GUID *format) { - return SetStatus(DllExports::GdipGetRawFormat(image, format)); + return SetStatus(DllExports::GdipGetImageRawFormat(image, format)); } Image *GetThumbnailImage(UINT thumbWidth, UINT thumbHeight, GetThumbnailImageAbort callback, VOID *callbackData) @@ -232,12 +233,12 @@ public: Status SaveAdd(const EncoderParameters* encoderParams) { - return SetStatus(DllExports::GdipSaveAdd(image, encoderParams)); + return NotImplemented; // FIXME: not available: SetStatus(DllExports::GdipSaveAdd(image, encoderParams)); } Status SaveAdd(Image *newImage, const EncoderParameters *encoderParams) { - return SetStatus(DllExports::GdipSaveAddImage(image, newImage->image, encoderParams)); + return NotImplemented; // FIXME: not available: SetStatus(DllExports::GdipSaveAddImage(image, newImage->image, encoderParams)); } Status SelectActiveFrame(const GUID *dimensionID, UINT frameIndex) @@ -276,11 +277,13 @@ private: class Bitmap : public Image { + friend class CachedBitmap; + public: - Bitmap(IDirectDrawSurface7 *surface) - { - status = DllExports::GdipCreateBitmapFromDirectDrawSurface(surface, &bitmap); - } +// Bitmap(IDirectDrawSurface7 *surface) // <-- FIXME: compiler does not like this +// { +// status = DllExports::GdipCreateBitmapFromDirectDrawSurface(surface, &bitmap); +// } Bitmap(INT width, INT height, Graphics *target) { @@ -365,10 +368,10 @@ public: return new Bitmap(gdiBitmapInfo, gdiBitmapData); } - static Bitmap *FromDirectDrawSurface7(IDirectDrawSurface7 *surface) - { - return new Bitmap(surface); - } +// static Bitmap *FromDirectDrawSurface7(IDirectDrawSurface7 *surface) // <-- FIXME: compiler does not like this +// { +// return new Bitmap(surface); +// } static Bitmap *FromFile(const WCHAR *filename, BOOL useEmbeddedColorManagement) { @@ -402,7 +405,7 @@ public: Status GetHICON(HICON *hicon) { - return SetStatus(DllExports::GdipCreateHICONFromBitmap(bitmap, hbmReturn)); + return SetStatus(DllExports::GdipCreateHICONFromBitmap(bitmap, hicon)); } Status GetPixel(INT x, INT y, Color *color) @@ -458,7 +461,7 @@ class CachedBitmap : public GdiplusBase public: CachedBitmap(Bitmap *bitmap, Graphics *graphics) { - status = DllExports::GdipCreateCachedBitmap(bitmap, graphics, &cachedBitmap); + status = DllExports::GdipCreateCachedBitmap(bitmap->bitmap, graphics->graphics, &cachedBitmap); } Status GetLastStatus(VOID) @@ -472,124 +475,10 @@ private: }; -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(VOID) const - { - Font *cloneFont = new Font(); - cloneFont->status = DllExports::GdipCloneFont(font, &(cloneFont->font)); - return cloneFont; - } - - Status GetFamily(FontFamily* family) const - { - return SetStatus(DllExports::GdipGetFamily(font, &(family->fontFamily))); - } - - REAL GetHeight(const Graphics* graphics) const - { - REAL height; - SetStatus(DllExports::GdipGetFontHeight(font, graphics->graphics, &height)); - return height; - } - - REAL GetHeight(REAL dpi) const - { - REAL height; - SetStatus(DllExports::GdipGetFontHeightGivenDPI(font, dpi, &height)); - return height; - } - - Status GetLastStatus(VOID) const - { - return status; - } - - Status GetLogFontA(const Graphics *g, LOGFONTA *logfontA) const - { - return SetStatus(DllExports::GdipGetLogFontA(font, g->graphics, logfontA)); - } - - Status GetLogFontW(const Graphics *g, LOGFONTW *logfontW) const - { - return SetStatus(DllExports::GdipGetLogFontW(font, g->graphics, logfontW)); - } - - REAL GetSize(VOID) const - { - REAL size; - SetStatus(DllExports::GdipGetFontSize(font, &size)); - return size; - } - - INT GetStyle(VOID) const - { - INT style; - SetStatus(DllExports::GdipGetFontStyle(font, &style)); - return style; - } - - Unit GetUnit(VOID) const - { - Unit unit; - SetStatus(DllExports::GdipGetFontUnit(font, &unit); - return unit; - } - - BOOL IsAvailable(VOID) const - { - return FALSE; - } - -private: - mutable Status status; - GpFont *font; - - Status SetStatus(Status status) const - { - if (status == Ok) - return status; - this->status = status; - return status; - } -}; - - class FontCollection : public GdiplusBase { + friend class FontFamily; + public: FontCollection(VOID) { @@ -609,11 +498,16 @@ public: { return NotImplemented; } + +private: + GpFontCollection *fontCollection; }; class FontFamily : public GdiplusBase { + friend class Font; + public: FontFamily(VOID) { @@ -621,7 +515,7 @@ public: FontFamily(const WCHAR *name, const FontCollection *fontCollection) { - status = DllExports::GdipCreateFontFamilyFromName(name, fontCollection, &fontFamily); + status = DllExports::GdipCreateFontFamilyFromName(name, fontCollection->fontCollection, &fontFamily); } FontFamily *Clone(VOID) @@ -742,6 +636,127 @@ public: }; +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(VOID) const + { + Font *cloneFont = new Font(); + cloneFont->status = DllExports::GdipCloneFont(font, &(cloneFont->font)); + return cloneFont; + } + + Status GetFamily(FontFamily* family) const + { + return SetStatus(DllExports::GdipGetFamily(font, &(family->fontFamily))); + } + + REAL GetHeight(const Graphics* graphics) const + { + REAL height; + SetStatus(DllExports::GdipGetFontHeight(font, graphics->graphics, &height)); + return height; + } + + REAL GetHeight(REAL dpi) const + { + REAL height; + SetStatus(DllExports::GdipGetFontHeightGivenDPI(font, dpi, &height)); + return height; + } + + Status GetLastStatus(VOID) const + { + return status; + } + + Status GetLogFontA(const Graphics *g, LOGFONTA *logfontA) const + { + return SetStatus(DllExports::GdipGetLogFontA(font, g->graphics, logfontA)); + } + + Status GetLogFontW(const Graphics *g, LOGFONTW *logfontW) const + { + return SetStatus(DllExports::GdipGetLogFontW(font, g->graphics, logfontW)); + } + + REAL GetSize(VOID) const + { + REAL size; + SetStatus(DllExports::GdipGetFontSize(font, &size)); + return size; + } + + INT GetStyle(VOID) const + { + INT style; + SetStatus(DllExports::GdipGetFontStyle(font, &style)); + return style; + } + + Unit GetUnit(VOID) const + { + Unit unit; + SetStatus(DllExports::GdipGetFontUnit(font, &unit)); + return unit; + } + + BOOL IsAvailable(VOID) 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; + } +}; + + class Region : public GdiplusBase { public: @@ -776,13 +791,13 @@ public: Region(const RectF &rect) { - status = DllExports::GdipCreateRegionRectF(&rect, ®ion); + status = DllExports::GdipCreateRegionRect(&rect, ®ion); } Region *Clone(VOID) { - region *cloneRegion = new Region(); - cloneRegion->status = DllExports::GdipCloneRegion(region, &cloneRegion); + Region *cloneRegion = new Region(); + cloneRegion->status = DllExports::GdipCloneRegion(region, &cloneRegion->region); return cloneRegion; } @@ -850,7 +865,7 @@ public: Status GetData(BYTE *buffer, UINT bufferSize, UINT *sizeFilled) const { - return SetStatus(DllExports::GdipGetRegionData(region, budder, bufferSize, sizeFilled)); + return SetStatus(DllExports::GdipGetRegionData(region, buffer, bufferSize, sizeFilled)); } UINT GetDataSize(VOID) const @@ -926,21 +941,21 @@ public: BOOL IsVisible(const PointF &point, const Graphics *g) const { BOOL result; - SetStatus(DllExports::GdipIsVisibleRegionPoint(region, point.x, point.y, g->graphics, &result)); + SetStatus(DllExports::GdipIsVisibleRegionPoint(region, point.X, point.Y, g->graphics, &result)); return result; } BOOL IsVisible(const RectF &rect, const Graphics *g) const { BOOL result; - SetStatus(DllExports::GdipIsVisibleRegionRect(region, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, g->graphics, &result)); + SetStatus(DllExports::GdipIsVisibleRegionRect(region, rect.X, rect.Y, rect.Width, rect.Height, g->graphics, &result)); return result; } BOOL IsVisible(const Rect &rect, const Graphics *g) const { BOOL result; - SetStatus(DllExports::GdipIsVisibleRegionRectI(region, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, g->graphics, &result)); + SetStatus(DllExports::GdipIsVisibleRegionRectI(region, rect.X, rect.Y, rect.Width, rect.Height, g->graphics, &result)); return result; } @@ -968,7 +983,7 @@ public: BOOL IsVisible(const Point &point, const Graphics *g) const { BOOL result; - SetStatus(DllExports::GdipIsVisibleRegionPointI(region, point.x, point.y, g->graphics, &result)); + SetStatus(DllExports::GdipIsVisibleRegionPointI(region, point.X, point.Y, g->graphics, &result)); return result; } diff --git a/reactos/sdk/include/psdk/gdiplusmatrix.h b/reactos/sdk/include/psdk/gdiplusmatrix.h index ca785db1506..fb83af60a5b 100644 --- a/reactos/sdk/include/psdk/gdiplusmatrix.h +++ b/reactos/sdk/include/psdk/gdiplusmatrix.h @@ -21,6 +21,8 @@ class Matrix : public GdiplusBase { + friend class Region; + public: Matrix(const RectF &rect, const PointF *dstplg) { @@ -45,7 +47,7 @@ public: Matrix *Clone(VOID) { Matrix *cloneMatrix = new Matrix(); // FIXME: Matrix::matrix already initialized --> potential memory leak - cloneMatrix->status = DllExports::GdipCloneMatrix(matrix, &cloneMatrix); + cloneMatrix->status = DllExports::GdipCloneMatrix(matrix, &cloneMatrix->matrix); return cloneMatrix; } @@ -130,7 +132,7 @@ public: return SetStatus(DllExports::GdipSetMatrixElements(matrix, m11, m12, m21, m22, dx, dy)); } - Status Shear(REAL shearX, REAL shearY, REAL order) + Status Shear(REAL shearX, REAL shearY, MatrixOrder order) { return SetStatus(DllExports::GdipShearMatrix(matrix, shearX, shearY, order)); } @@ -155,7 +157,7 @@ public: return SetStatus(DllExports::GdipVectorTransformMatrixPoints(matrix, pts, count)); } - Status Translate(REAL offsetX, REAL offsetY, REAL order) + Status Translate(REAL offsetX, REAL offsetY, MatrixOrder order) { return SetStatus(DllExports::GdipTranslateMatrix(matrix, offsetX, offsetY, order)); } diff --git a/reactos/sdk/include/psdk/gdipluspath.h b/reactos/sdk/include/psdk/gdipluspath.h index 8d095b58361..e209dce7127 100644 --- a/reactos/sdk/include/psdk/gdipluspath.h +++ b/reactos/sdk/include/psdk/gdipluspath.h @@ -19,8 +19,13 @@ #ifndef _GDIPLUSPATH_H #define _GDIPLUSPATH_H +class FontFamily; +class Graphics; + class GraphicsPath : public GdiplusBase { + friend class Region; + public: GraphicsPath(const Point *points, const BYTE *types, INT count, FillMode fillMode) { @@ -418,6 +423,9 @@ public: { return NotImplemented; } + +private: + GpPath *path; }; diff --git a/reactos/sdk/include/psdk/gdipluspen.h b/reactos/sdk/include/psdk/gdipluspen.h index 480e50b0724..2001fe3e6f3 100644 --- a/reactos/sdk/include/psdk/gdipluspen.h +++ b/reactos/sdk/include/psdk/gdipluspen.h @@ -19,6 +19,8 @@ #ifndef _GDIPLUSPEN_H #define _GDIPLUSPEN_H +class CustomLineCap; + class Pen : public GdiplusBase { friend class Graphics; diff --git a/reactos/sdk/include/psdk/gdiplustypes.h b/reactos/sdk/include/psdk/gdiplustypes.h index 80d5955ffb2..23897345334 100644 --- a/reactos/sdk/include/psdk/gdiplustypes.h +++ b/reactos/sdk/include/psdk/gdiplustypes.h @@ -227,6 +227,14 @@ public: INT Length; }; +/* FIXME: missing the methods. */ +class SizeF +{ +public: + REAL Width; + REAL Height; +}; + #else /* end of c++ typedefs */ typedef struct Point