diff --git a/reactos/dll/win32/gdiplus/brush.c b/reactos/dll/win32/gdiplus/brush.c index 067fdde75c5..a24f54ebe2f 100644 --- a/reactos/dll/win32/gdiplus/brush.c +++ b/reactos/dll/win32/gdiplus/brush.c @@ -34,6 +34,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); +/****************************************************************************** + * GdipCloneBrush [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone) { TRACE("(%p, %p)\n", brush, clone); @@ -121,6 +124,9 @@ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone) return Ok; } +/****************************************************************************** + * GdipCreateLineBrush [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF* startpoint, GDIPCONST GpPointF* endpoint, ARGB startcolor, ARGB endcolor, GpWrapMode wrap, GpLineGradient **line) @@ -212,9 +218,13 @@ GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect* rect, return GdipCreateLineBrushFromRect(&rectF, startcolor, endcolor, mode, wrap, line); } -/* FIXME: angle value completely ignored. Don't know how to use it since native - always set Brush rectangle to rect (independetly of this angle). - Maybe it's used only on drawing. */ +/****************************************************************************** + * GdipCreateLineBrushFromRectWithAngle [GDIPLUS.@] + * + * FIXME: angle value completely ignored. Don't know how to use it since native + * always set Brush rectangle to rect (independetly of this angle). + * Maybe it's used only on drawing. + */ GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF* rect, ARGB startcolor, ARGB endcolor, REAL angle, BOOL isAngleScalable, GpWrapMode wrap, GpLineGradient **line) @@ -323,7 +333,11 @@ GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint* points, return ret; } -/* FIXME: path gradient brushes not truly supported (drawn as solid brushes) */ +/****************************************************************************** + * GdipCreatePathGradientFromPath [GDIPLUS.@] + * + * FIXME: path gradient brushes not truly supported (drawn as solid brushes) + */ GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath* path, GpPathGradient **grad) { @@ -379,6 +393,9 @@ GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath* path, return Ok; } +/****************************************************************************** + * GdipCreateSolidFill [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf) { COLORREF col = ARGB2COLORREF(color); @@ -401,7 +418,7 @@ GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf) return Ok; } -/******************************************************************************* +/****************************************************************************** * GdipCreateTexture [GDIPLUS.@] * * PARAMS @@ -435,6 +452,9 @@ GpStatus WINGDIPAPI GdipCreateTexture(GpImage *image, GpWrapMode wrapmode, texture); } +/****************************************************************************** + * GdipCreateTexture2 [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateTexture2(GpImage *image, GpWrapMode wrapmode, REAL x, REAL y, REAL width, REAL height, GpTexture **texture) { @@ -448,19 +468,23 @@ GpStatus WINGDIPAPI GdipCreateTexture2(GpImage *image, GpWrapMode wrapmode, texture); } -/* FIXME: imageattr ignored */ +/****************************************************************************** + * GdipCreateTextureIA [GDIPLUS.@] + * + * FIXME: imageattr ignored + */ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image, GDIPCONST GpImageAttributes *imageattr, REAL x, REAL y, REAL width, REAL height, GpTexture **texture) { HDC hdc; - OLE_HANDLE hbm; - HBITMAP old = NULL; - BITMAPINFO bmi; + HBITMAP hbm, old = NULL; + BITMAPINFO *pbmi; BITMAPINFOHEADER *bmih; INT n_x, n_y, n_width, n_height, abs_height, stride, image_stride, i, bytespp; BOOL bm_is_selected; BYTE *dibits, *buff, *textbits; + GpStatus status; TRACE("(%p, %p, %.2f, %.2f, %.2f, %.2f, %p)\n", image, imageattr, x, y, width, height, texture); @@ -482,46 +506,54 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image, n_y + n_height > ((GpBitmap*)image)->height) return InvalidParameter; - IPicture_get_Handle(image->picture, &hbm); + IPicture_get_Handle(image->picture, (OLE_HANDLE*)&hbm); if(!hbm) return GenericError; IPicture_get_CurDC(image->picture, &hdc); bm_is_selected = (hdc != 0); - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biBitCount = 0; + pbmi = GdipAlloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + if (!pbmi) + return OutOfMemory; + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biBitCount = 0; if(!bm_is_selected){ hdc = CreateCompatibleDC(0); - old = SelectObject(hdc, (HBITMAP)hbm); + old = SelectObject(hdc, hbm); } /* fill out bmi */ - GetDIBits(hdc, (HBITMAP)hbm, 0, 0, NULL, &bmi, DIB_RGB_COLORS); + GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); - bytespp = bmi.bmiHeader.biBitCount / 8; - abs_height = abs(bmi.bmiHeader.biHeight); + bytespp = pbmi->bmiHeader.biBitCount / 8; + abs_height = abs(pbmi->bmiHeader.biHeight); - if(n_x > bmi.bmiHeader.biWidth || n_x + n_width > bmi.bmiHeader.biWidth || - n_y > abs_height || n_y + n_height > abs_height) + if(n_x > pbmi->bmiHeader.biWidth || n_x + n_width > pbmi->bmiHeader.biWidth || + n_y > abs_height || n_y + n_height > abs_height){ + GdipFree(pbmi); return InvalidParameter; + } - dibits = GdipAlloc(bmi.bmiHeader.biSizeImage); + dibits = GdipAlloc(pbmi->bmiHeader.biSizeImage); if(dibits) /* this is not a good place to error out */ - GetDIBits(hdc, (HBITMAP)hbm, 0, abs_height, dibits, &bmi, DIB_RGB_COLORS); + GetDIBits(hdc, hbm, 0, abs_height, dibits, pbmi, DIB_RGB_COLORS); if(!bm_is_selected){ SelectObject(hdc, old); DeleteDC(hdc); } - if(!dibits) + if(!dibits){ + GdipFree(pbmi); return OutOfMemory; + } - image_stride = (bmi.bmiHeader.biWidth * bytespp + 3) & ~3; + image_stride = (pbmi->bmiHeader.biWidth * bytespp + 3) & ~3; stride = (n_width * bytespp + 3) & ~3; buff = GdipAlloc(sizeof(BITMAPINFOHEADER) + stride * n_height); if(!buff){ + GdipFree(pbmi); GdipFree(dibits); return OutOfMemory; } @@ -533,25 +565,38 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image, bmih->biHeight = n_height; bmih->biCompression = BI_RGB; bmih->biSizeImage = stride * n_height; - bmih->biBitCount = bmi.bmiHeader.biBitCount; + bmih->biBitCount = pbmi->bmiHeader.biBitCount; bmih->biClrUsed = 0; bmih->biPlanes = 1; /* image is flipped */ - if(bmi.bmiHeader.biHeight > 0){ - dibits += bmi.bmiHeader.biSizeImage; + if(pbmi->bmiHeader.biHeight > 0){ + dibits += pbmi->bmiHeader.biSizeImage; image_stride *= -1; textbits += stride * (n_height - 1); stride *= -1; } + GdipFree(pbmi); + for(i = 0; i < n_height; i++) memcpy(&textbits[i * stride], &dibits[n_x * bytespp + (n_y + i) * image_stride], abs(stride)); *texture = GdipAlloc(sizeof(GpTexture)); - if (!*texture) return OutOfMemory; + if (!*texture){ + GdipFree(dibits); + GdipFree(buff); + return OutOfMemory; + } + + if((status = GdipCreateMatrix(&(*texture)->transform)) != Ok){ + GdipFree(*texture); + GdipFree(dibits); + GdipFree(buff); + return status; + } (*texture)->brush.lb.lbStyle = BS_DIBPATTERNPT; (*texture)->brush.lb.lbColor = DIB_RGB_COLORS; @@ -559,6 +604,7 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image, (*texture)->brush.gdibrush = CreateBrushIndirect(&(*texture)->brush.lb); (*texture)->brush.bt = BrushTypeTextureFill; + (*texture)->wrap = imageattr->wrap; GdipFree(dibits); GdipFree(buff); @@ -566,6 +612,9 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image, return Ok; } +/****************************************************************************** + * GdipCreateTextureIAI [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage *image, GDIPCONST GpImageAttributes *imageattr, INT x, INT y, INT width, INT height, GpTexture **texture) { @@ -615,7 +664,10 @@ GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush) break; case BrushTypeSolidColor: case BrushTypeLinearGradient: + break; case BrushTypeTextureFill: + GdipDeleteMatrix(((GpTexture*)brush)->transform); + break; default: break; } @@ -845,6 +897,77 @@ GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb) return Ok; } +/****************************************************************************** + * GdipGetTextureTransform [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture *brush, GpMatrix *matrix) +{ + TRACE("(%p, %p)\n", brush, matrix); + + if(!brush || !matrix) + return InvalidParameter; + + memcpy(matrix, brush->transform, sizeof(GpMatrix)); + + return Ok; +} + +/****************************************************************************** + * GdipGetTextureWrapMode [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture *brush, GpWrapMode *wrapmode) +{ + TRACE("(%p, %p)\n", brush, wrapmode); + + if(!brush || !wrapmode) + return InvalidParameter; + + *wrapmode = brush->wrap; + + return Ok; +} + +/****************************************************************************** + * GdipMultiplyTextureTransform [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture* brush, + GDIPCONST GpMatrix *matrix, GpMatrixOrder order) +{ + TRACE("(%p, %p, %d)\n", brush, matrix, order); + + if(!brush || !matrix) + return InvalidParameter; + + return GdipMultiplyMatrix(brush->transform, matrix, order); +} + +/****************************************************************************** + * GdipResetTextureTransform [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture* brush) +{ + TRACE("(%p)\n", brush); + + if(!brush) + return InvalidParameter; + + return GdipSetMatrixElements(brush->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0); +} + +/****************************************************************************** + * GdipScaleTextureTransform [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture* brush, + REAL sx, REAL sy, GpMatrixOrder order) +{ + TRACE("(%p, %.2f, %.2f, %d)\n", brush, sx, sy, order); + + if(!brush) + return InvalidParameter; + + return GdipScaleMatrix(brush->transform, sx, sy, order); +} + GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient *brush, GDIPCONST REAL *blend, GDIPCONST REAL* positions, INT count) { @@ -899,6 +1022,17 @@ GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient *line, return Ok; } +GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient *brush, GDIPCONST REAL *blend, + GDIPCONST REAL *pos, INT count) +{ + static int calls; + + if(!(calls++)) + FIXME("not implemented\n"); + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient *grad, ARGB argb) { @@ -1031,16 +1165,35 @@ GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill *sf, ARGB argb) return Ok; } +/****************************************************************************** + * GdipSetTextureTransform [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *texture, GDIPCONST GpMatrix *matrix) { - static int calls; + TRACE("(%p, %p)\n", texture, matrix); if(!texture || !matrix) return InvalidParameter; - if(!(calls++)) - FIXME("not implemented\n"); + memcpy(texture->transform, matrix, sizeof(GpMatrix)); + + return Ok; +} + +/****************************************************************************** + * GdipSetTextureWrapMode [GDIPLUS.@] + * + * WrapMode not used, only stored + */ +GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture *brush, GpWrapMode wrapmode) +{ + TRACE("(%p, %d)\n", brush, wrapmode); + + if(!brush) + return InvalidParameter; + + brush->wrap = wrapmode; return Ok; } @@ -1072,6 +1225,20 @@ GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient *brush, ARGB *colors) return Ok; } +/****************************************************************************** + * GdipRotateTextureTransform [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture* brush, REAL angle, + GpMatrixOrder order) +{ + TRACE("(%p, %.2f, %d)\n", brush, angle, order); + + if(!brush) + return InvalidParameter; + + return GdipRotateMatrix(brush->transform, angle, order); +} + GpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient *brush, REAL focus, REAL scale) { @@ -1113,6 +1280,20 @@ GpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient* brush, return NotImplemented; } +/****************************************************************************** + * GdipTranslateTextureTransform [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture* brush, REAL dx, REAL dy, + GpMatrixOrder order) +{ + TRACE("(%p, %.2f, %.2f, %d)\n", brush, dx, dy, order); + + if(!brush) + return InvalidParameter; + + return GdipTranslateMatrix(brush->transform, dx, dy, order); +} + GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient *brush, GpRectF *rect) { TRACE("(%p, %p)\n", brush, rect); diff --git a/reactos/dll/win32/gdiplus/font.c b/reactos/dll/win32/gdiplus/font.c index 210ebfff3c7..220409b7a05 100644 --- a/reactos/dll/win32/gdiplus/font.c +++ b/reactos/dll/win32/gdiplus/font.c @@ -153,6 +153,8 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, (*font)->unit = unit; (*font)->emSize = emSize; + (*font)->height = tmw->ntmSizeEM; + (*font)->line_spacing = tmw->tmAscent + tmw->tmDescent + tmw->tmExternalLeading; return Ok; } @@ -194,6 +196,9 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, (*font)->lfw.lfHeight = -textmet.tmHeight; (*font)->lfw.lfWeight = textmet.tmWeight; + (*font)->height = 1; /* FIXME: need NEWTEXTMETRIC.ntmSizeEM here */ + (*font)->line_spacing = textmet.tmAscent + textmet.tmDescent + textmet.tmExternalLeading; + SelectObject(hdc, oldfont); DeleteObject(hfont); @@ -251,7 +256,7 @@ GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC hdc, GpFont **font) if(!font) return InvalidParameter; - hfont = (HFONT)GetCurrentObject(hdc, OBJ_FONT); + hfont = GetCurrentObject(hdc, OBJ_FONT); if(!hfont) return GenericError; @@ -444,15 +449,31 @@ GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont *font, */ GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont *font, REAL dpi, REAL *height) { + REAL font_height; + TRACE("%p (%s), %f, %p\n", font, debugstr_w(font->lfw.lfFaceName), dpi, height); if (!(font && height)) return InvalidParameter; + font_height = font->line_spacing * (font->emSize / font->height); + switch (font->unit) { case UnitPixel: - *height = font->emSize; + *height = font_height; + break; + case UnitPoint: + *height = font_height * dpi * inch_per_point; + break; + case UnitInch: + *height = font_height * dpi; + break; + case UnitDocument: + *height = font_height * (dpi / 300.0); + break; + case UnitMillimeter: + *height = font_height * (dpi / mm_per_inch); break; default: FIXME("Unhandled unit type: %d\n", font->unit); @@ -667,8 +688,7 @@ GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily *family, INT style, U { if (!(family && EmHeight)) return InvalidParameter; - TRACE("%p (%s), %d, %p, stub!\n", family, - debugstr_w(family->FamilyName), style, EmHeight); + TRACE("%p (%s), %d, %p\n", family, debugstr_w(family->FamilyName), style, EmHeight); *EmHeight = family->tmw.ntmSizeEM; @@ -693,11 +713,16 @@ GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily *family, INT style, U GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily *family, INT style, UINT16* LineSpacing) { - if (!(family && LineSpacing)) return InvalidParameter; + TRACE("%p, %d, %p\n", family, style, LineSpacing); - FIXME("stub!\n"); + if (!(family && LineSpacing)) + return InvalidParameter; - return NotImplemented; + if (style) FIXME("ignoring style\n"); + + *LineSpacing = family->tmw.tmAscent + family->tmw.tmDescent + family->tmw.tmExternalLeading; + + return Ok; } GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily* family, @@ -785,12 +810,17 @@ GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily **nativeFamil */ GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection** fontCollection) { - FIXME("stub %p\n", fontCollection); + TRACE("%p\n", fontCollection); if (!fontCollection) return InvalidParameter; - return NotImplemented; + *fontCollection = GdipAlloc(sizeof(GpFontCollection)); + if (!*fontCollection) return OutOfMemory; + + (*fontCollection)->FontFamilies = NULL; + (*fontCollection)->count = 0; + return Ok; } /***************************************************************************** @@ -798,12 +828,17 @@ GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection** fontCollecti */ GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection **fontCollection) { - FIXME("stub %p\n", fontCollection); + INT i; + + TRACE("%p\n", fontCollection); if (!fontCollection) return InvalidParameter; - return NotImplemented; + for (i = 0; i < (*fontCollection)->count; i++) GdipFree((*fontCollection)->FontFamilies[i]); + GdipFree(*fontCollection); + + return Ok; } /***************************************************************************** @@ -820,18 +855,33 @@ GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection* fontCollection, return NotImplemented; } +/***************************************************************************** + * GdipPrivateAddMemoryFont [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection* fontCollection, + GDIPCONST void* memory, INT length) +{ + FIXME("%p, %p, %d\n", fontCollection, memory, length); + + if (!(fontCollection && memory && length)) + return InvalidParameter; + + return Ok; +} + /***************************************************************************** * GdipGetFontCollectionFamilyCount [GDIPLUS.@] */ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount( GpFontCollection* fontCollection, INT* numFound) { - FIXME("stub: %p, %p\n", fontCollection, numFound); + TRACE("%p, %p\n", fontCollection, numFound); if (!(fontCollection && numFound)) return InvalidParameter; - return NotImplemented; + *numFound = fontCollection->count; + return Ok; } /***************************************************************************** @@ -841,11 +891,28 @@ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList( GpFontCollection* fontCollection, INT numSought, GpFontFamily* gpfamilies[], INT* numFound) { - FIXME("stub: %p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, - numFound); + INT i; + + TRACE("%p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, numFound); if (!(fontCollection && gpfamilies && numFound)) return InvalidParameter; + for (i = 0; i < numSought && i < fontCollection->count; i++) + { + gpfamilies[i] = fontCollection->FontFamilies[i]; + } + *numFound = i; + return Ok; +} + +GpStatus WINGDIPAPI GdipNewInstalledFontCollection( + GpFontCollection** fontCollection) +{ + FIXME("stub: %p\n",fontCollection); + + if (!fontCollection) + return InvalidParameter; + return NotImplemented; } diff --git a/reactos/dll/win32/gdiplus/gdiplus.c b/reactos/dll/win32/gdiplus/gdiplus.c index 046ee14a381..a11ad5833bc 100644 --- a/reactos/dll/win32/gdiplus/gdiplus.c +++ b/reactos/dll/win32/gdiplus/gdiplus.c @@ -93,11 +93,25 @@ Status WINAPI GdiplusStartup(ULONG_PTR *token, const struct GdiplusStartupInput output->NotificationUnhook = NotificationUnhook; } + *token = 0xdeadbeef; + /* FIXME: DebugEventCallback ignored */ return Ok; } +GpStatus WINAPI GdiplusNotificationHook(ULONG_PTR *token) +{ + FIXME("%p\n", token); + return NotificationHook(token); +} + +void WINAPI GdiplusNotificationUnhook(ULONG_PTR token) +{ + FIXME("%ld\n", token); + NotificationUnhook(token); +} + /***************************************************** * GdiplusShutdown [GDIPLUS.@] */ diff --git a/reactos/dll/win32/gdiplus/gdiplus.spec b/reactos/dll/win32/gdiplus/gdiplus.spec index f7b1d5d3e57..b3d21039ea5 100644 --- a/reactos/dll/win32/gdiplus/gdiplus.spec +++ b/reactos/dll/win32/gdiplus/gdiplus.spec @@ -32,7 +32,7 @@ @ stub GdipAddPathString @ stub GdipAddPathStringI @ stdcall GdipAlloc(long) -@ stub GdipBeginContainer2 +@ stdcall GdipBeginContainer2(ptr ptr) @ stub GdipBeginContainer @ stub GdipBeginContainerI @ stub GdipBitmapApplyEffect @@ -81,7 +81,7 @@ @ stdcall GdipCreateBitmapFromScan0(long long long long ptr ptr) @ stdcall GdipCreateBitmapFromStream(ptr ptr) @ stdcall GdipCreateBitmapFromStreamICM(ptr ptr) -@ stub GdipCreateCachedBitmap +@ stdcall GdipCreateCachedBitmap(ptr ptr ptr) @ stdcall GdipCreateCustomLineCap(ptr ptr long long ptr) @ stub GdipCreateEffect @ stdcall GdipCreateFont(ptr long long long ptr) @@ -95,7 +95,7 @@ @ stdcall GdipCreateFromHWNDICM(long ptr) @ stdcall GdipCreateHBITMAPFromBitmap(ptr ptr long) @ stub GdipCreateHICONFromBitmap -@ stub GdipCreateHalftonePalette +@ stdcall GdipCreateHalftonePalette() @ stub GdipCreateHatchBrush @ stdcall GdipCreateImageAttributes(ptr) @ stdcall GdipCreateLineBrush(ptr ptr long long long ptr) @@ -137,7 +137,7 @@ @ stdcall GdipCreateTextureIA(ptr ptr long long long long ptr) @ stdcall GdipCreateTextureIAI(ptr ptr long long long long ptr) @ stdcall GdipDeleteBrush(ptr) -@ stub GdipDeleteCachedBitmap +@ stdcall GdipDeleteCachedBitmap(ptr) @ stdcall GdipDeleteCustomLineCap(ptr) @ stub GdipDeleteEffect @ stdcall GdipDeleteFont(ptr) @@ -158,7 +158,7 @@ @ stdcall GdipDrawBezierI(ptr ptr long long long long long long long long) @ stdcall GdipDrawBeziers(ptr ptr ptr long) @ stdcall GdipDrawBeziersI(ptr ptr ptr long) -@ stub GdipDrawCachedBitmap +@ stdcall GdipDrawCachedBitmap(ptr ptr long long) @ stdcall GdipDrawClosedCurve2(ptr ptr ptr long long) @ stdcall GdipDrawClosedCurve2I(ptr ptr ptr long long) @ stdcall GdipDrawClosedCurve(ptr ptr ptr long) @@ -200,7 +200,7 @@ @ stdcall GdipDrawRectanglesI(ptr ptr ptr long) @ stdcall GdipDrawString(ptr ptr long ptr ptr ptr ptr) @ stub GdipEmfToWmfBits -@ stub GdipEndContainer +@ stdcall GdipEndContainer(ptr ptr) @ stub GdipEnumerateMetafileDestPoint @ stub GdipEnumerateMetafileDestPointI @ stub GdipEnumerateMetafileDestPoints @@ -240,7 +240,7 @@ @ stdcall GdipGetAdjustableArrowCapHeight(ptr ptr) @ stdcall GdipGetAdjustableArrowCapMiddleInset(ptr ptr) @ stdcall GdipGetAdjustableArrowCapWidth(ptr ptr) -@ stub GdipGetAllPropertyItems +@ stdcall GdipGetAllPropertyItems(ptr long long ptr) @ stdcall GdipGetBrushType(ptr ptr) @ stdcall GdipGetCellAscent(ptr long ptr) @ stdcall GdipGetCellDescent(ptr long ptr) @@ -281,8 +281,8 @@ @ stub GdipGetHemfFromMetafile @ stub GdipGetImageAttributesAdjustedPalette @ stdcall GdipGetImageBounds(ptr ptr ptr) -@ stub GdipGetImageDecoders -@ stub GdipGetImageDecodersSize +@ stdcall GdipGetImageDecoders(long long ptr) +@ stdcall GdipGetImageDecodersSize(ptr ptr) @ stdcall GdipGetImageDimension(ptr ptr ptr) @ stdcall GdipGetImageEncoders(long long ptr) @ stdcall GdipGetImageEncodersSize(ptr ptr) @@ -292,7 +292,7 @@ @ stdcall GdipGetImageHorizontalResolution(ptr ptr) @ stub GdipGetImageItemData @ stub GdipGetImagePalette -@ stub GdipGetImagePaletteSize +@ stdcall GdipGetImagePaletteSize(ptr ptr) @ stdcall GdipGetImagePixelFormat(ptr ptr) @ stdcall GdipGetImageRawFormat(ptr ptr) @ stub GdipGetImageThumbnail @@ -360,7 +360,7 @@ @ stdcall GdipGetPenDashOffset(ptr ptr) @ stdcall GdipGetPenDashStyle(ptr ptr) @ stdcall GdipGetPenEndCap(ptr ptr) -@ stub GdipGetPenFillType +@ stdcall GdipGetPenFillType(ptr ptr) @ stdcall GdipGetPenLineJoin(ptr ptr) @ stdcall GdipGetPenMiterLimit(ptr ptr) @ stdcall GdipGetPenMode(ptr ptr) @@ -370,11 +370,11 @@ @ stdcall GdipGetPenWidth(ptr ptr) @ stdcall GdipGetPixelOffsetMode(ptr ptr) @ stdcall GdipGetPointCount(ptr ptr) -@ stub GdipGetPropertyCount -@ stub GdipGetPropertyIdList -@ stub GdipGetPropertyItem +@ stdcall GdipGetPropertyCount(ptr ptr) +@ stdcall GdipGetPropertyIdList(ptr long ptr) +@ stdcall GdipGetPropertyItem(ptr long long ptr) @ stdcall GdipGetPropertyItemSize(ptr long ptr) -@ stub GdipGetPropertySize +@ stdcall GdipGetPropertySize(ptr ptr ptr) @ stdcall GdipGetRegionBounds(ptr ptr ptr) @ stdcall GdipGetRegionBoundsI(ptr ptr ptr) @ stdcall GdipGetRegionData(ptr ptr long ptr) @@ -395,17 +395,17 @@ @ stdcall GdipGetStringFormatTabStopCount(ptr ptr) @ stdcall GdipGetStringFormatTabStops(ptr long ptr ptr) @ stdcall GdipGetStringFormatTrimming(ptr ptr) -@ stub GdipGetTextContrast +@ stdcall GdipGetTextContrast(ptr ptr) @ stdcall GdipGetTextRenderingHint(ptr ptr) @ stub GdipGetTextureImage -@ stub GdipGetTextureTransform -@ stub GdipGetTextureWrapMode +@ stdcall GdipGetTextureTransform(ptr ptr) +@ stdcall GdipGetTextureWrapMode(ptr ptr) @ stub GdipGetVisibleClipBounds @ stub GdipGetVisibleClipBoundsI @ stdcall GdipGetWorldTransform(ptr ptr) @ stdcall GdipGraphicsClear(ptr long) @ stub GdipGraphicsSetAbort -@ stub GdipImageForceValidation +@ stdcall GdipImageForceValidation(ptr) @ stdcall GdipImageGetFrameCount(ptr ptr ptr) @ stdcall GdipImageGetFrameDimensionsCount(ptr ptr) @ stdcall GdipImageGetFrameDimensionsList(ptr ptr long) @@ -427,8 +427,8 @@ @ stub GdipIsVisibleClipEmpty @ stdcall GdipIsVisiblePathPoint(ptr long long ptr ptr) @ stdcall GdipIsVisiblePathPointI(ptr long long ptr ptr) -@ stub GdipIsVisiblePoint -@ stub GdipIsVisiblePointI +@ stdcall GdipIsVisiblePoint(ptr long long ptr) +@ stdcall GdipIsVisiblePointI(ptr long long ptr) @ stub GdipIsVisibleRect @ stub GdipIsVisibleRectI @ stub GdipIsVisibleRegionPoint @@ -446,9 +446,9 @@ @ stdcall GdipMultiplyMatrix(ptr ptr long) @ stub GdipMultiplyPathGradientTransform @ stub GdipMultiplyPenTransform -@ stub GdipMultiplyTextureTransform +@ stdcall GdipMultiplyTextureTransform(ptr ptr long) @ stdcall GdipMultiplyWorldTransform(ptr ptr long) -@ stub GdipNewInstalledFontCollection +@ stdcall GdipNewInstalledFontCollection(ptr) @ stdcall GdipNewPrivateFontCollection(ptr) @ stdcall GdipPathIterCopyData(ptr ptr ptr ptr long long) @ stdcall GdipPathIterEnumerate(ptr ptr ptr ptr long) @@ -465,10 +465,10 @@ @ stub GdipPlayMetafileRecord @ stub GdipPlayTSClientRecord @ stdcall GdipPrivateAddFontFile(ptr wstr) -@ stub GdipPrivateAddMemoryFont +@ stdcall GdipPrivateAddMemoryFont(ptr ptr long) @ stub GdipRecordMetafile -@ stub GdipRecordMetafileFileName -@ stub GdipRecordMetafileFileNameI +@ stdcall GdipRecordMetafileFileName(wstr long long ptr long wstr ptr) +@ stdcall GdipRecordMetafileFileNameI(wstr long long ptr long wstr ptr) @ stub GdipRecordMetafileI @ stub GdipRecordMetafileStream @ stub GdipRecordMetafileStreamI @@ -481,7 +481,7 @@ @ stdcall GdipResetPath(ptr) @ stub GdipResetPathGradientTransform @ stub GdipResetPenTransform -@ stub GdipResetTextureTransform +@ stdcall GdipResetTextureTransform(ptr) @ stdcall GdipResetWorldTransform(ptr) @ stdcall GdipRestoreGraphics(ptr long) @ stdcall GdipReversePath(ptr) @@ -489,7 +489,7 @@ @ stdcall GdipRotateMatrix(ptr long long) @ stub GdipRotatePathGradientTransform @ stub GdipRotatePenTransform -@ stub GdipRotateTextureTransform +@ stdcall GdipRotateTextureTransform(ptr long long) @ stdcall GdipRotateWorldTransform(ptr long long) @ stub GdipSaveAdd @ stub GdipSaveAddImage @@ -500,16 +500,16 @@ @ stdcall GdipScaleMatrix(ptr long long long) @ stub GdipScalePathGradientTransform @ stub GdipScalePenTransform -@ stub GdipScaleTextureTransform +@ stdcall GdipScaleTextureTransform(ptr long long long) @ stdcall GdipScaleWorldTransform(ptr long long long) @ stdcall GdipSetAdjustableArrowCapFillState(ptr long) @ stdcall GdipSetAdjustableArrowCapHeight(ptr long) @ stdcall GdipSetAdjustableArrowCapMiddleInset(ptr long) @ stdcall GdipSetAdjustableArrowCapWidth(ptr long) -@ stub GdipSetClipGraphics +@ stdcall GdipSetClipGraphics(ptr ptr long) @ stub GdipSetClipHrgn -@ stub GdipSetClipPath -@ stub GdipSetClipRect +@ stdcall GdipSetClipPath(ptr ptr long) +@ stdcall GdipSetClipRect(ptr long long long long long) @ stdcall GdipSetClipRectI(ptr long long long long long) @ stdcall GdipSetClipRegion(ptr ptr long) @ stdcall GdipSetCompositingMode(ptr long) @@ -548,7 +548,7 @@ @ stdcall GdipSetPageScale(ptr long) @ stdcall GdipSetPageUnit(ptr long) @ stdcall GdipSetPathFillMode(ptr long) -@ stub GdipSetPathGradientBlend +@ stdcall GdipSetPathGradientBlend(ptr ptr ptr long) @ stdcall GdipSetPathGradientCenterColor(ptr long) @ stdcall GdipSetPathGradientCenterPoint(ptr ptr) @ stdcall GdipSetPathGradientCenterPointI(ptr ptr) @@ -564,7 +564,7 @@ @ stdcall GdipSetPathMarker(ptr) @ stdcall GdipSetPenBrushFill(ptr ptr) @ stdcall GdipSetPenColor(ptr long) -@ stub GdipSetPenCompoundArray +@ stdcall GdipSetPenCompoundArray(ptr ptr long) @ stdcall GdipSetPenCustomEndCap(ptr ptr) @ stdcall GdipSetPenCustomStartCap(ptr ptr) @ stdcall GdipSetPenDashArray(ptr ptr long) @@ -581,7 +581,7 @@ @ stub GdipSetPenUnit @ stdcall GdipSetPenWidth(ptr long) @ stdcall GdipSetPixelOffsetMode(ptr long) -@ stub GdipSetPropertyItem +@ stdcall GdipSetPropertyItem(ptr ptr) @ stub GdipSetRenderingOrigin @ stdcall GdipSetSmoothingMode(ptr long) @ stdcall GdipSetSolidFillColor(ptr ptr) @@ -593,16 +593,16 @@ @ stdcall GdipSetStringFormatMeasurableCharacterRanges(ptr long ptr) @ stdcall GdipSetStringFormatTabStops(ptr long long ptr) @ stdcall GdipSetStringFormatTrimming(ptr long) -@ stub GdipSetTextContrast +@ stdcall GdipSetTextContrast(ptr long) @ stdcall GdipSetTextRenderingHint(ptr long) @ stdcall GdipSetTextureTransform(ptr ptr) -@ stub GdipSetTextureWrapMode +@ stdcall GdipSetTextureWrapMode(ptr long) @ stdcall GdipSetWorldTransform(ptr ptr) @ stdcall GdipShearMatrix(ptr long long long) @ stdcall GdipStartPathFigure(ptr) @ stdcall GdipStringFormatGetGenericDefault(ptr) @ stdcall GdipStringFormatGetGenericTypographic(ptr) -@ stub GdipTestControl +@ stdcall GdipTestControl(long ptr) @ stdcall GdipTransformMatrixPoints(ptr ptr long) @ stdcall GdipTransformMatrixPointsI(ptr ptr long) @ stdcall GdipTransformPath(ptr ptr) @@ -617,14 +617,14 @@ @ stub GdipTranslatePenTransform @ stdcall GdipTranslateRegion(ptr long long) @ stdcall GdipTranslateRegionI(ptr long long) -@ stub GdipTranslateTextureTransform +@ stdcall GdipTranslateTextureTransform(ptr long long long) @ stdcall GdipTranslateWorldTransform(ptr long long long) @ stdcall GdipVectorTransformMatrixPoints(ptr ptr long) @ stdcall GdipVectorTransformMatrixPointsI(ptr ptr long) @ stub GdipWarpPath @ stub GdipWidenPath @ stub GdipWindingModeOutline -@ stub GdiplusNotificationHook -@ stub GdiplusNotificationUnhook +@ stdcall GdiplusNotificationHook(ptr) +@ stdcall GdiplusNotificationUnhook(ptr) @ stdcall GdiplusShutdown(ptr) @ stdcall GdiplusStartup(ptr ptr ptr) diff --git a/reactos/dll/win32/gdiplus/gdiplus_private.h b/reactos/dll/win32/gdiplus/gdiplus_private.h index 230eb8f5548..965265fb47e 100644 --- a/reactos/dll/win32/gdiplus/gdiplus_private.h +++ b/reactos/dll/win32/gdiplus/gdiplus_private.h @@ -54,6 +54,8 @@ extern void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, extern BOOL lengthen_path(GpPath *path, INT len); +extern GpStatus trace_path(GpGraphics *graphics, GpPath *path); + typedef struct region_element region_element; extern inline void delete_element(region_element *element); @@ -100,6 +102,7 @@ struct GpGraphics{ GpMatrix * worldtrans; /* world transform */ BOOL busy; /* hdc handle obtained by GdipGetDC */ GpRegion *clip; + UINT textcontrast; /* not used yet. get/set only */ }; struct GpBrush{ @@ -138,6 +141,8 @@ struct GpLineGradient{ struct GpTexture{ GpBrush brush; + GpMatrix *transform; + WrapMode wrap; /* not used yet */ }; struct GpPath{ @@ -193,6 +198,10 @@ struct GpBitmap{ BYTE *bitmapbits; /* pointer to the buffer we passed in BitmapLockBits */ }; +struct GpCachedBitmap{ + GpImage *image; +}; + struct GpImageAttributes{ WrapMode wrap; }; @@ -200,6 +209,8 @@ struct GpImageAttributes{ struct GpFont{ LOGFONTW lfw; REAL emSize; + UINT height; + LONG line_spacing; Unit unit; }; @@ -218,7 +229,8 @@ struct GpStringFormat{ }; struct GpFontCollection{ - GpFontFamily* FontFamilies; + GpFontFamily **FontFamilies; + INT count; }; struct GpFontFamily{ diff --git a/reactos/dll/win32/gdiplus/graphics.c b/reactos/dll/win32/gdiplus/graphics.c index 8e88ad89b28..786af958ea5 100644 --- a/reactos/dll/win32/gdiplus/graphics.c +++ b/reactos/dll/win32/gdiplus/graphics.c @@ -715,6 +715,17 @@ end: return status; } +GpStatus trace_path(GpGraphics *graphics, GpPath *path) +{ + GpStatus result; + + BeginPath(graphics->hdc); + result = draw_poly(graphics, NULL, path->pathdata.Points, + path->pathdata.Types, path->pathdata.Count, FALSE); + EndPath(graphics->hdc); + return result; +} + GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics) { TRACE("(%p, %p)\n", hdc, graphics); @@ -763,6 +774,7 @@ GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC hdc, HANDLE hDevice, GpGraphics **gra (*graphics)->unit = UnitDisplay; (*graphics)->scale = 1.0; (*graphics)->busy = FALSE; + (*graphics)->textcontrast = 4; return Ok; } @@ -2507,6 +2519,18 @@ GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics *graphics, SmoothingMode *mo return Ok; } +GpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics *graphics, UINT *contrast) +{ + TRACE("(%p, %p)\n", graphics, contrast); + + if(!graphics || !contrast) + return InvalidParameter; + + *contrast = graphics->textcontrast; + + return Ok; +} + /* FIXME: Text rendering hint is not used anywhere except the getter/setter. */ GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics *graphics, TextRenderingHint *hint) @@ -2583,6 +2607,32 @@ GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics *graphics, BOOL *res) return GdipIsEmptyRegion(graphics->clip, graphics, res); } +GpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics *graphics, REAL x, REAL y, BOOL *result) +{ + FIXME("(%p, %.2f, %.2f, %p) stub\n", graphics, x, y, result); + + if(!graphics || !result) + return InvalidParameter; + + if(graphics->busy) + return ObjectBusy; + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics *graphics, INT x, INT y, BOOL *result) +{ + FIXME("(%p, %d, %d, %p) stub\n", graphics, x, y, result); + + if(!graphics || !result) + return InvalidParameter; + + if(graphics->busy) + return ObjectBusy; + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, GDIPCONST WCHAR* string, INT length, GDIPCONST GpFont* font, GDIPCONST RectF* layoutRect, GDIPCONST GpStringFormat *stringFormat, @@ -2615,17 +2665,15 @@ GpStatus WINGDIPAPI GdipMeasureString(GpGraphics *graphics, if(!graphics || !string || !font || !rect) return InvalidParameter; - if(codepointsfitted || linesfilled){ - FIXME("not implemented for given parameters\n"); - return NotImplemented; - } + if(linesfilled) *linesfilled = 0; + if(codepointsfitted) *codepointsfitted = 0; if(format) TRACE("may be ignoring some format flags: attr %x\n", format->attr); if(length == -1) length = lstrlenW(string); - stringdup = GdipAlloc(length * sizeof(WCHAR)); + stringdup = GdipAlloc((length + 1) * sizeof(WCHAR)); if(!stringdup) return OutOfMemory; oldfont = SelectObject(graphics->hdc, CreateFontIndirectW(&font->lfw)); @@ -2683,7 +2731,10 @@ GpStatus WINGDIPAPI GdipMeasureString(GpGraphics *graphics, nwidth, &j, NULL, &size); sum += fit + (lret < fitcpy ? 1 : 0); + if(codepointsfitted) *codepointsfitted = sum; + height += size.cy; + if(linesfilled) *linesfilled += size.cy; max_width = max(max_width, size.cx); if(height > nheight) @@ -2748,7 +2799,7 @@ GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics *graphics, GraphicsState stat if(!(calls++)) FIXME("graphics state not implemented\n"); - return NotImplemented; + return Ok; } GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics *graphics, REAL angle, @@ -2775,7 +2826,29 @@ GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics *graphics, GraphicsState *state) if(!(calls++)) FIXME("graphics state not implemented\n"); - return NotImplemented; + *state = 0xdeadbeef; + return Ok; +} + +GpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics *graphics, GraphicsContainer *state) +{ + FIXME("(%p, %p)\n", graphics, state); + + if(!graphics || !state) + return InvalidParameter; + + *state = 0xdeadbeef; + return Ok; +} + +GpStatus WINGDIPAPI GdipEndContainer(GpGraphics *graphics, GraphicsState state) +{ + FIXME("(%p, 0x%x)\n", graphics, state); + + if(!graphics || !state) + return InvalidParameter; + + return Ok; } GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics *graphics, REAL sx, @@ -2792,6 +2865,17 @@ GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics *graphics, REAL sx, return GdipScaleMatrix(graphics->worldtrans, sx, sy, order); } +GpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics *graphics, GpGraphics *srcgraphics, + CombineMode mode) +{ + TRACE("(%p, %p, %d)\n", graphics, srcgraphics, mode); + + if(!graphics || !srcgraphics) + return InvalidParameter; + + return GdipCombineRegionRegion(graphics->clip, srcgraphics->clip, mode); +} + GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics *graphics, CompositingMode mode) { @@ -2904,6 +2988,18 @@ GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics *graphics, SmoothingMode mod return Ok; } +GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics *graphics, UINT contrast) +{ + TRACE("(%p, %d)\n", graphics, contrast); + + if(!graphics) + return InvalidParameter; + + graphics->textcontrast = contrast; + + return Ok; +} + GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics *graphics, TextRenderingHint hint) { @@ -2948,11 +3044,9 @@ GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics *graphics, REAL dx, return GdipTranslateMatrix(graphics->worldtrans, dx, dy, order); } -GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics *graphics, INT x, INT y, - INT width, INT height, - CombineMode combineMode) +GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics *graphics, GpPath *path, CombineMode mode) { - static int calls; + TRACE("(%p, %p, %d)\n", graphics, path, mode); if(!graphics) return InvalidParameter; @@ -2960,10 +3054,44 @@ GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics *graphics, INT x, INT y, if(graphics->busy) return ObjectBusy; - if(!(calls++)) - FIXME("not implemented\n"); + return GdipCombineRegionPath(graphics->clip, path, mode); +} - return NotImplemented; +GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics *graphics, REAL x, REAL y, + REAL width, REAL height, + CombineMode mode) +{ + GpRectF rect; + + TRACE("(%p, %.2f, %.2f, %.2f, %.2f, %d)\n", graphics, x, y, width, height, mode); + + if(!graphics) + return InvalidParameter; + + if(graphics->busy) + return ObjectBusy; + + rect.X = x; + rect.Y = y; + rect.Width = width; + rect.Height = height; + + return GdipCombineRegionRect(graphics->clip, &rect, mode); +} + +GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics *graphics, INT x, INT y, + INT width, INT height, + CombineMode mode) +{ + TRACE("(%p, %d, %d, %d, %d, %d)\n", graphics, x, y, width, height, mode); + + if(!graphics) + return InvalidParameter; + + if(graphics->busy) + return ObjectBusy; + + return GdipSetClipRect(graphics, (REAL)x, (REAL)y, (REAL)width, (REAL)height, mode); } GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics *graphics, GpRegion *region, @@ -3170,3 +3298,10 @@ GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics *graphics, GpCoordinateSpace return NotImplemented; } + +HPALETTE WINGDIPAPI GdipCreateHalftonePalette(void) +{ + FIXME("\n"); + + return NULL; +} diff --git a/reactos/dll/win32/gdiplus/graphicspath.c b/reactos/dll/win32/gdiplus/graphicspath.c index 68606a623e7..e8f8fb98fa7 100644 --- a/reactos/dll/win32/gdiplus/graphicspath.c +++ b/reactos/dll/win32/gdiplus/graphicspath.c @@ -984,17 +984,17 @@ GpStatus WINGDIPAPI GdipFlattenPath(GpPath *path, GpMatrix* matrix, REAL flatnes /* always add line points and start points */ if((type == PathPointTypeStart) || (type == PathPointTypeLine)){ - type = (path->pathdata.Types[i] & ~PathPointTypeBezier) | PathPointTypeLine; - if(!add_path_list_node(node, pt.X, pt.Y, type)) + if(!add_path_list_node(node, pt.X, pt.Y, path->pathdata.Types[i])) goto memout; node = node->next; + ++i; continue; } /* Bezier curve always stored as 4 points */ if((path->pathdata.Types[i-1] & PathPointTypePathTypeMask) != PathPointTypeStart){ - type = (path->pathdata.Types[i] & ~PathPointTypeBezier) | PathPointTypeLine; + type = (path->pathdata.Types[i] & ~PathPointTypePathTypeMask) | PathPointTypeLine; if(!add_path_list_node(node, pt.X, pt.Y, type)) goto memout; @@ -1014,7 +1014,7 @@ GpStatus WINGDIPAPI GdipFlattenPath(GpPath *path, GpMatrix* matrix, REAL flatnes start = node; /* add Bezier end point */ - type = (path->pathdata.Types[i] & ~PathPointTypeBezier) | PathPointTypeLine; + type = (path->pathdata.Types[i] & ~PathPointTypePathTypeMask) | PathPointTypeLine; if(!add_path_list_node(node, pt.X, pt.Y, type)) goto memout; node = node->next; diff --git a/reactos/dll/win32/gdiplus/image.c b/reactos/dll/win32/gdiplus/image.c index bcdc64f7738..0c610560e27 100644 --- a/reactos/dll/win32/gdiplus/image.c +++ b/reactos/dll/win32/gdiplus/image.c @@ -28,6 +28,7 @@ #include "olectl.h" #include "ole2.h" +#include "initguid.h" #include "gdiplus.h" #include "gdiplus_private.h" #include "wine/debug.h" @@ -95,10 +96,9 @@ GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap* bitmap, GDIPCONST GpRect* rect, { BOOL bm_is_selected; INT stride, bitspp = PIXELFORMATBPP(format); - OLE_HANDLE hbm; HDC hdc; - HBITMAP old = NULL; - BITMAPINFO bmi; + HBITMAP hbm, old = NULL; + BITMAPINFO *pbmi; BYTE *buff = NULL; UINT abs_height; GpRect act_rect; /* actual rect to be used */ @@ -127,46 +127,51 @@ GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap* bitmap, GDIPCONST GpRect* rect, if(bitmap->lockmode) return WrongState; - IPicture_get_Handle(bitmap->image.picture, &hbm); + IPicture_get_Handle(bitmap->image.picture, (OLE_HANDLE*)&hbm); IPicture_get_CurDC(bitmap->image.picture, &hdc); bm_is_selected = (hdc != 0); - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biBitCount = 0; + pbmi = GdipAlloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + if (!pbmi) + return OutOfMemory; + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biBitCount = 0; if(!bm_is_selected){ hdc = CreateCompatibleDC(0); - old = SelectObject(hdc, (HBITMAP)hbm); + old = SelectObject(hdc, hbm); } /* fill out bmi */ - GetDIBits(hdc, (HBITMAP)hbm, 0, 0, NULL, &bmi, DIB_RGB_COLORS); + GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); - abs_height = abs(bmi.bmiHeader.biHeight); - stride = bmi.bmiHeader.biWidth * bitspp / 8; + abs_height = abs(pbmi->bmiHeader.biHeight); + stride = pbmi->bmiHeader.biWidth * bitspp / 8; stride = (stride + 3) & ~3; buff = GdipAlloc(stride * abs_height); - bmi.bmiHeader.biBitCount = bitspp; + pbmi->bmiHeader.biBitCount = bitspp; if(buff) - GetDIBits(hdc, (HBITMAP)hbm, 0, abs_height, buff, &bmi, DIB_RGB_COLORS); + GetDIBits(hdc, hbm, 0, abs_height, buff, pbmi, DIB_RGB_COLORS); if(!bm_is_selected){ SelectObject(hdc, old); DeleteDC(hdc); } - if(!buff) + if(!buff){ + GdipFree(pbmi); return OutOfMemory; + } lockeddata->Width = act_rect.Width; lockeddata->Height = act_rect.Height; lockeddata->PixelFormat = format; lockeddata->Reserved = flags; - if(bmi.bmiHeader.biHeight > 0){ + if(pbmi->bmiHeader.biHeight > 0){ lockeddata->Stride = -stride; lockeddata->Scan0 = buff + (bitspp / 8) * act_rect.X + stride * (abs_height - 1 - act_rect.Y); @@ -181,17 +186,17 @@ GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap* bitmap, GDIPCONST GpRect* rect, bitmap->bitmapbits = buff; + GdipFree(pbmi); return Ok; } GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap* bitmap, BitmapData* lockeddata) { - OLE_HANDLE hbm; HDC hdc; - HBITMAP old = NULL; + HBITMAP hbm, old = NULL; BOOL bm_is_selected; - BITMAPINFO bmi; + BITMAPINFO *pbmi; if(!bitmap || !lockeddata) return InvalidParameter; @@ -211,28 +216,30 @@ GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap* bitmap, return Ok; } - IPicture_get_Handle(bitmap->image.picture, &hbm); + IPicture_get_Handle(bitmap->image.picture, (OLE_HANDLE*)&hbm); IPicture_get_CurDC(bitmap->image.picture, &hdc); bm_is_selected = (hdc != 0); - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biBitCount = 0; + pbmi = GdipAlloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biBitCount = 0; if(!bm_is_selected){ hdc = CreateCompatibleDC(0); - old = SelectObject(hdc, (HBITMAP)hbm); + old = SelectObject(hdc, hbm); } - GetDIBits(hdc, (HBITMAP)hbm, 0, 0, NULL, &bmi, DIB_RGB_COLORS); - bmi.bmiHeader.biBitCount = PIXELFORMATBPP(lockeddata->PixelFormat); - SetDIBits(hdc, (HBITMAP)hbm, 0, abs(bmi.bmiHeader.biHeight), - bitmap->bitmapbits, &bmi, DIB_RGB_COLORS); + GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); + pbmi->bmiHeader.biBitCount = PIXELFORMATBPP(lockeddata->PixelFormat); + SetDIBits(hdc, hbm, 0, abs(pbmi->bmiHeader.biHeight), + bitmap->bitmapbits, pbmi, DIB_RGB_COLORS); if(!bm_is_selected){ SelectObject(hdc, old); DeleteDC(hdc); } + GdipFree(pbmi); GdipFree(bitmap->bitmapbits); bitmap->bitmapbits = NULL; bitmap->lockmode = 0; @@ -245,6 +252,8 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) IStream* stream; HRESULT hr; INT size; + LARGE_INTEGER move; + GpStatus stat = GenericError; TRACE("%p, %p\n", image, cloneImage); @@ -255,15 +264,6 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) if (FAILED(hr)) return GenericError; - *cloneImage = GdipAlloc(sizeof(GpImage)); - if (!*cloneImage) - { - IStream_Release(stream); - return OutOfMemory; - } - (*cloneImage)->type = image->type; - (*cloneImage)->flags = image->flags; - hr = IPicture_SaveAsFile(image->picture, stream, FALSE, &size); if(FAILED(hr)) { @@ -271,21 +271,18 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) goto out; } - hr = OleLoadPicture(stream, size, FALSE, &IID_IPicture, - (LPVOID*) &(*cloneImage)->picture); + /* Set seek pointer back to the beginning of the picture */ + move.QuadPart = 0; + hr = IStream_Seek(stream, move, STREAM_SEEK_SET, NULL); if (FAILED(hr)) - { - WARN("Failed to load image from stream\n"); goto out; - } - IStream_Release(stream); - return Ok; + stat = GdipLoadImageFromStream(stream, cloneImage); + if (stat != Ok) WARN("Failed to load image from stream\n"); + out: IStream_Release(stream); - GdipFree(*cloneImage); - *cloneImage = NULL; - return GenericError; + return stat; } GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, @@ -294,6 +291,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, GpStatus stat; IStream *stream; + TRACE("(%s) %p\n", debugstr_w(filename), bitmap); + if(!filename || !bitmap) return InvalidParameter; @@ -354,6 +353,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO* info, GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR* filename, GpBitmap **bitmap) { + TRACE("(%s) %p\n", debugstr_w(filename), bitmap); + return GdipCreateBitmapFromFile(filename, bitmap); } @@ -363,11 +364,14 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE hInstance, HBITMAP hbm; GpStatus stat = InvalidParameter; + TRACE("%p (%s) %p\n", hInstance, debugstr_w(lpBitmapName), bitmap); + if(!lpBitmapName || !bitmap) return InvalidParameter; /* load DIB */ - hbm = (HBITMAP)LoadImageW(hInstance,lpBitmapName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); + hbm = LoadImageW(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, + LR_CREATEDIBSECTION); if(hbm){ stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, bitmap); @@ -436,7 +440,9 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride, TRACE("%d %d %d %d %p %p\n", width, height, stride, format, scan0, bitmap); - if(!bitmap || width <= 0 || height <= 0 || (scan0 && (stride % 4))){ + if (!bitmap) return InvalidParameter; + + if(width <= 0 || height <= 0 || (scan0 && (stride % 4))){ *bitmap = NULL; return InvalidParameter; } @@ -516,6 +522,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream* stream, { GpStatus stat; + TRACE("%p %p\n", stream, bitmap); + stat = GdipLoadImageFromStream(stream, (GpImage**) bitmap); if(stat != Ok) @@ -534,13 +542,64 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream* stream, GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream* stream, GpBitmap **bitmap) { + TRACE("%p %p\n", stream, bitmap); + return GdipCreateBitmapFromStream(stream, bitmap); } +GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap *bitmap, GpGraphics *graphics, + GpCachedBitmap **cachedbmp) +{ + GpStatus stat; + + TRACE("%p %p %p\n", bitmap, graphics, cachedbmp); + + if(!bitmap || !graphics || !cachedbmp) + return InvalidParameter; + + *cachedbmp = GdipAlloc(sizeof(GpCachedBitmap)); + if(!*cachedbmp) + return OutOfMemory; + + stat = GdipCloneImage(&(bitmap->image), &(*cachedbmp)->image); + if(stat != Ok){ + GdipFree(*cachedbmp); + return stat; + } + + return Ok; +} + +GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap *cachedbmp) +{ + TRACE("%p\n", cachedbmp); + + if(!cachedbmp) + return InvalidParameter; + + GdipDisposeImage(cachedbmp->image); + GdipFree(cachedbmp); + + return Ok; +} + +GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics *graphics, + GpCachedBitmap *cachedbmp, INT x, INT y) +{ + TRACE("%p %p %d %d\n", graphics, cachedbmp, x, y); + + if(!graphics || !cachedbmp) + return InvalidParameter; + + return GdipDrawImage(graphics, cachedbmp->image, (REAL)x, (REAL)y); +} + GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image) { HDC hdc; + TRACE("%p\n", image); + if(!image) return InvalidParameter; @@ -565,6 +624,8 @@ GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage *image, ImageItemData* item) GpStatus WINGDIPAPI GdipGetImageBounds(GpImage *image, GpRectF *srcRect, GpUnit *srcUnit) { + TRACE("%p %p %p\n", image, srcRect, srcUnit); + if(!image || !srcRect || !srcUnit) return InvalidParameter; if(image->type == ImageTypeMetafile){ @@ -593,6 +654,8 @@ GpStatus WINGDIPAPI GdipGetImageBounds(GpImage *image, GpRectF *srcRect, GpStatus WINGDIPAPI GdipGetImageDimension(GpImage *image, REAL *width, REAL *height) { + TRACE("%p %p %p\n", image, width, height); + if(!image || !height || !width) return InvalidParameter; @@ -626,6 +689,8 @@ GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage *image, { HDC hdc; + TRACE("%p %p\n", image, graphics); + if(!image || !graphics) return InvalidParameter; @@ -646,6 +711,8 @@ GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage *image, GpStatus WINGDIPAPI GdipGetImageHeight(GpImage *image, UINT *height) { + TRACE("%p %p\n", image, height); + if(!image || !height) return InvalidParameter; @@ -680,9 +747,21 @@ GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage *image, REAL *res) return NotImplemented; } +GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage *image, INT *size) +{ + FIXME("%p %p\n", image, size); + + if(!image || !size) + return InvalidParameter; + + return NotImplemented; +} + /* FIXME: test this function for non-bitmap types */ GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage *image, PixelFormat *format) { + TRACE("%p %p\n", image, format); + if(!image || !format) return InvalidParameter; @@ -702,13 +781,24 @@ GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage *image, GUID *format) return InvalidParameter; if(!(calls++)) - FIXME("not implemented\n"); + FIXME("stub\n"); - return NotImplemented; + /* FIXME: should be detected from embedded picture or stored separately */ + switch (image->type) + { + case ImageTypeBitmap: *format = ImageFormatBMP; break; + case ImageTypeMetafile: *format = ImageFormatEMF; break; + default: + WARN("unknown type %u\n", image->type); + *format = ImageFormatUndefined; + } + return Ok; } GpStatus WINGDIPAPI GdipGetImageType(GpImage *image, ImageType *type) { + TRACE("%p %p\n", image, type); + if(!image || !type) return InvalidParameter; @@ -732,6 +822,8 @@ GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage *image, REAL *res) GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width) { + TRACE("%p %p\n", image, width); + if(!image || !width) return InvalidParameter; @@ -767,6 +859,48 @@ GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile * metafile, return Ok; } +GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage *image, UINT size, + UINT num, PropertyItem* items) +{ + static int calls; + + if(!(calls++)) + FIXME("not implemented\n"); + + return InvalidParameter; +} + +GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage *image, UINT* num) +{ + static int calls; + + if(!(calls++)) + FIXME("not implemented\n"); + + return InvalidParameter; +} + +GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage *image, UINT num, PROPID* list) +{ + static int calls; + + if(!(calls++)) + FIXME("not implemented\n"); + + return InvalidParameter; +} + +GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage *image, PROPID id, UINT size, + PropertyItem* buffer) +{ + static int calls; + + if(!(calls++)) + FIXME("not implemented\n"); + + return InvalidParameter; +} + GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage *image, PROPID pid, UINT* size) { @@ -783,6 +917,16 @@ GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage *image, PROPID pid, return NotImplemented; } +GpStatus WINGDIPAPI GdipGetPropertySize(GpImage *image, UINT* size, UINT* num) +{ + static int calls; + + if(!(calls++)) + FIXME("not implemented\n"); + + return InvalidParameter; +} + GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage *image, GDIPCONST GUID* dimensionID, UINT* count) { @@ -844,6 +988,8 @@ GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR* filename, GpStatus stat; IStream *stream; + TRACE("(%s) %p\n", debugstr_w(filename), image); + if (!filename || !image) return InvalidParameter; @@ -862,6 +1008,8 @@ GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR* filename, /* FIXME: no icm handling */ GpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR* filename,GpImage **image) { + TRACE("(%s) %p\n", debugstr_w(filename), image); + return GdipLoadImageFromFile(filename, image); } @@ -870,6 +1018,8 @@ GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream* stream, GpImage **image) IPicture *pic; short type; + TRACE("%p %p\n", stream, image); + if(!stream || !image) return InvalidParameter; @@ -882,38 +1032,44 @@ GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream* stream, GpImage **image) IPicture_get_Type(pic, &type); if(type == PICTYPE_BITMAP){ - BITMAPINFO bmi; + BITMAPINFO *pbmi; BITMAPCOREHEADER* bmch; - OLE_HANDLE hbm; + HBITMAP hbm; HDC hdc; + pbmi = GdipAlloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + if (!pbmi) + return OutOfMemory; *image = GdipAlloc(sizeof(GpBitmap)); - if(!*image) return OutOfMemory; + if(!*image){ + GdipFree(pbmi); + return OutOfMemory; + } (*image)->type = ImageTypeBitmap; (*((GpBitmap**) image))->width = ipicture_pixel_width(pic); (*((GpBitmap**) image))->height = ipicture_pixel_height(pic); /* get the pixel format */ - IPicture_get_Handle(pic, &hbm); + IPicture_get_Handle(pic, (OLE_HANDLE*)&hbm); IPicture_get_CurDC(pic, &hdc); - ZeroMemory(&bmi, sizeof(bmi)); - bmch = (BITMAPCOREHEADER*) (&bmi.bmiHeader); + bmch = (BITMAPCOREHEADER*) (&pbmi->bmiHeader); bmch->bcSize = sizeof(BITMAPCOREHEADER); if(!hdc){ HBITMAP old; hdc = CreateCompatibleDC(0); - old = SelectObject(hdc, (HBITMAP)hbm); - GetDIBits(hdc, (HBITMAP)hbm, 0, 0, NULL, &bmi, DIB_RGB_COLORS); + old = SelectObject(hdc, hbm); + GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); SelectObject(hdc, old); DeleteDC(hdc); } else - GetDIBits(hdc, (HBITMAP)hbm, 0, 0, NULL, &bmi, DIB_RGB_COLORS); + GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS); (*((GpBitmap**) image))->format = (bmch->bcBitCount << 8) | PixelFormatGDI; + GdipFree(pbmi); } else if(type == PICTYPE_METAFILE || type == PICTYPE_ENHMETAFILE){ /* FIXME: missing initialization code */ @@ -936,6 +1092,8 @@ GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream* stream, GpImage **image) /* FIXME: no ICM */ GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream* stream, GpImage **image) { + TRACE("%p %p\n", stream, image); + return GdipLoadImageFromStream(stream, image); } @@ -952,6 +1110,16 @@ GpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage *image, PROPID propId) return NotImplemented; } +GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage *image, GDIPCONST PropertyItem* item) +{ + static int calls; + + if(!(calls++)) + FIXME("not implemented\n"); + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage *image, GDIPCONST WCHAR* filename, GDIPCONST CLSID *clsidEncoder, GDIPCONST EncoderParameters *encoderParams) @@ -959,6 +1127,8 @@ GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage *image, GDIPCONST WCHAR* filenam GpStatus stat; IStream *stream; + TRACE("%p (%s) %p %p\n", image, debugstr_w(filename), clsidEncoder, encoderParams); + if (!image || !filename|| !clsidEncoder) return InvalidParameter; @@ -1067,6 +1237,8 @@ GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage *image, IStream* stream, output = NULL; output_size = 0; + TRACE("%p %p %p %p\n", image, stream, clsid, params); + if(!image || !stream) return InvalidParameter; @@ -1176,11 +1348,42 @@ static const ImageCodecInfo codecs[NUM_ENCODERS_SUPPORTED] = }, }; +/***************************************************************************** + * GdipGetImageDecodersSize [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT *numDecoders, UINT *size) +{ + FIXME("%p %p stub!\n", numDecoders, size); + + if (!numDecoders || !size) + return InvalidParameter; + + *numDecoders = 0; + *size = 0; + + return Ok; +} + +/***************************************************************************** + * GdipGetImageDecoders [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetImageDecoders(UINT numDecoders, UINT size, ImageCodecInfo *decoders) +{ + FIXME("%u %u %p stub!\n", numDecoders, size, decoders); + + if (!decoders) + return GenericError; + + return NotImplemented; +} + /***************************************************************************** * GdipGetImageEncodersSize [GDIPLUS.@] */ GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size) { + TRACE("%p %p\n", numEncoders, size); + if (!numEncoders || !size) return InvalidParameter; @@ -1195,6 +1398,8 @@ GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size) */ GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders) { + TRACE("%u %u %p\n", numEncoders, size, encoders); + if (!encoders || (numEncoders != NUM_ENCODERS_SUPPORTED) || (size != sizeof (codecs))) @@ -1214,6 +1419,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi GpStatus retval; PixelFormat format; + TRACE("%p %p %p\n", hbm, hpal, bitmap); + if(!hbm || !bitmap) return InvalidParameter; @@ -1240,6 +1447,9 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi case 24: format = PixelFormat24bppRGB; break; + case 32: + format = PixelFormat32bppRGB; + break; case 48: format = PixelFormat48bppRGB; break; @@ -1273,6 +1483,8 @@ GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect *effect, */ GpStatus WINGDIPAPI GdipGetImageFlags(GpImage *image, UINT *flags) { + TRACE("%p %p\n", image, flags); + if(!image || !flags) return InvalidParameter; @@ -1280,3 +1492,52 @@ GpStatus WINGDIPAPI GdipGetImageFlags(GpImage *image, UINT *flags) return Ok; } + +GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum control, void *param) +{ + TRACE("(%d, %p)\n", control, param); + + switch(control){ + case TestControlForceBilinear: + if(param) + FIXME("TestControlForceBilinear not handled\n"); + break; + case TestControlNoICM: + if(param) + FIXME("TestControlNoICM not handled\n"); + break; + case TestControlGetBuildNumber: + *((DWORD*)param) = 3102; + break; + } + + return Ok; +} + +GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR* fileName, + HDC hdc, EmfType type, GDIPCONST GpRectF *pFrameRect, + MetafileFrameUnit frameUnit, GDIPCONST WCHAR *desc, + GpMetafile **metafile) +{ + FIXME("%s %p %d %p %d %s %p stub!\n", debugstr_w(fileName), hdc, type, pFrameRect, + frameUnit, debugstr_w(desc), metafile); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR* fileName, HDC hdc, EmfType type, + GDIPCONST GpRect *pFrameRect, MetafileFrameUnit frameUnit, + GDIPCONST WCHAR *desc, GpMetafile **metafile) +{ + FIXME("%s %p %d %p %d %s %p stub!\n", debugstr_w(fileName), hdc, type, pFrameRect, + frameUnit, debugstr_w(desc), metafile); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipImageForceValidation(GpImage *image) +{ + FIXME("%p\n", image); + + return Ok; +} diff --git a/reactos/dll/win32/gdiplus/matrix.c b/reactos/dll/win32/gdiplus/matrix.c index d2e15116d6c..2176da6cbfe 100644 --- a/reactos/dll/win32/gdiplus/matrix.c +++ b/reactos/dll/win32/gdiplus/matrix.c @@ -221,7 +221,7 @@ GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix *matrix, BOOL *res return Ok; } -GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix *matrix, GpMatrix* matrix2, +GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix *matrix, GDIPCONST GpMatrix* matrix2, GpMatrixOrder order) { TRACE("(%p, %p, %d)\n", matrix, matrix2, order); diff --git a/reactos/dll/win32/gdiplus/pen.c b/reactos/dll/win32/gdiplus/pen.c index 104d9de6485..f41185a6887 100644 --- a/reactos/dll/win32/gdiplus/pen.c +++ b/reactos/dll/win32/gdiplus/pen.c @@ -67,8 +67,28 @@ static DWORD gdip_to_gdi_join(GpLineJoin join) } } +static GpPenType bt_to_pt(GpBrushType bt) +{ + switch(bt){ + case BrushTypeSolidColor: + return PenTypeSolidColor; + case BrushTypeHatchFill: + return PenTypeHatchFill; + case BrushTypeTextureFill: + return PenTypeTextureFill; + case BrushTypePathGradient: + return PenTypePathGradient; + case BrushTypeLinearGradient: + return PenTypeLinearGradient; + default: + return PenTypeUnknown; + } +} + GpStatus WINGDIPAPI GdipClonePen(GpPen *pen, GpPen **clonepen) { + TRACE("(%p, %p)\n", pen, clonepen); + if(!pen || !clonepen) return InvalidParameter; @@ -90,6 +110,8 @@ GpStatus WINGDIPAPI GdipCreatePen1(ARGB color, REAL width, GpUnit unit, GpBrush *brush; GpStatus status; + TRACE("(%x, %.2f, %d, %p)\n", color, width, unit, pen); + GdipCreateSolidFill(color, (GpSolidFill **)(&brush)); status = GdipCreatePen2(brush, width, unit, pen); GdipDeleteBrush(brush); @@ -102,6 +124,8 @@ GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpPen *gp_pen; GpBrush *clone_brush; + TRACE("(%p, %.2f, %d, %p)\n", brush, width, unit, pen); + if(!pen || !brush) return InvalidParameter; @@ -135,6 +159,8 @@ GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen) { + TRACE("(%p)\n", pen); + if(!pen) return InvalidParameter; GdipDeleteBrush(pen->brush); @@ -148,6 +174,8 @@ GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen) GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen *pen, GpBrush **brush) { + TRACE("(%p, %p)\n", pen, brush); + if(!pen || !brush) return InvalidParameter; @@ -156,6 +184,8 @@ GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen *pen, GpBrush **brush) GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb) { + TRACE("(%p, %p)\n", pen, argb); + if(!pen || !argb) return InvalidParameter; @@ -167,6 +197,8 @@ GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb) GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap** customCap) { + TRACE("(%p, %p)\n", pen, customCap); + if(!pen || !customCap) return InvalidParameter; @@ -180,6 +212,8 @@ GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap** customC GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap** customCap) { + TRACE("(%p, %p)\n", pen, customCap); + if(!pen || !customCap) return InvalidParameter; @@ -193,6 +227,8 @@ GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap** custo GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count) { + TRACE("(%p, %p, %d)\n", pen, dash, count); + if(!pen || !dash || count > pen->numdashes) return InvalidParameter; @@ -207,6 +243,8 @@ GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count) GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen *pen, GpDashCap *dashCap) { + TRACE("(%p, %p)\n", pen, dashCap); + if(!pen || !dashCap) return InvalidParameter; @@ -217,6 +255,8 @@ GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen *pen, GpDashCap *dashCap) GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen *pen, INT *count) { + TRACE("(%p, %p)\n", pen, count); + if(!pen || !count) return InvalidParameter; @@ -227,6 +267,8 @@ GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen *pen, INT *count) GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen *pen, REAL *offset) { + TRACE("(%p, %p)\n", pen, offset); + if(!pen || !offset) return InvalidParameter; @@ -237,6 +279,8 @@ GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen *pen, REAL *offset) GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dash) { + TRACE("(%p, %p)\n", pen, dash); + if(!pen || !dash) return InvalidParameter; @@ -247,6 +291,8 @@ GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dash) GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen *pen, GpLineCap *endCap) { + TRACE("(%p, %p)\n", pen, endCap); + if(!pen || !endCap) return InvalidParameter; @@ -255,8 +301,22 @@ GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen *pen, GpLineCap *endCap) return Ok; } +GpStatus WINGDIPAPI GdipGetPenFillType(GpPen *pen, GpPenType* type) +{ + TRACE("(%p, %p)\n", pen, type); + + if(!pen || !type) + return InvalidParameter; + + *type = bt_to_pt(pen->brush->bt); + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin) { + TRACE("(%p, %p)\n", pen, lineJoin); + if(!pen || !lineJoin) return InvalidParameter; @@ -267,6 +327,8 @@ GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin) GpStatus WINGDIPAPI GdipGetPenMode(GpPen *pen, GpPenAlignment *mode) { + TRACE("(%p, %p)\n", pen, mode); + if(!pen || !mode) return InvalidParameter; @@ -277,6 +339,8 @@ GpStatus WINGDIPAPI GdipGetPenMode(GpPen *pen, GpPenAlignment *mode) GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen *pen, REAL *miterLimit) { + TRACE("(%p, %p)\n", pen, miterLimit); + if(!pen || !miterLimit) return InvalidParameter; @@ -287,6 +351,8 @@ GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen *pen, REAL *miterLimit) GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen *pen, GpLineCap *startCap) { + TRACE("(%p, %p)\n", pen, startCap); + if(!pen || !startCap) return InvalidParameter; @@ -297,6 +363,8 @@ GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen *pen, GpLineCap *startCap) GpStatus WINGDIPAPI GdipGetPenUnit(GpPen *pen, GpUnit *unit) { + TRACE("(%p, %p)\n", pen, unit); + if(!pen || !unit) return InvalidParameter; @@ -307,6 +375,8 @@ GpStatus WINGDIPAPI GdipGetPenUnit(GpPen *pen, GpUnit *unit) GpStatus WINGDIPAPI GdipGetPenWidth(GpPen *pen, REAL *width) { + TRACE("(%p, %p)\n", pen, width); + if(!pen || !width) return InvalidParameter; @@ -317,6 +387,8 @@ GpStatus WINGDIPAPI GdipGetPenWidth(GpPen *pen, REAL *width) GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen *pen, GpBrush *brush) { + TRACE("(%p, %p)\n", pen, brush); + if(!pen || !brush) return InvalidParameter; @@ -326,6 +398,8 @@ GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen *pen, GpBrush *brush) GpStatus WINGDIPAPI GdipSetPenColor(GpPen *pen, ARGB argb) { + TRACE("(%p, %x)\n", pen, argb); + if(!pen) return InvalidParameter; @@ -335,11 +409,24 @@ GpStatus WINGDIPAPI GdipSetPenColor(GpPen *pen, ARGB argb) return GdipSetSolidFillColor(((GpSolidFill*)pen->brush), argb); } +GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen *pen, GDIPCONST REAL *dash, + INT count) +{ + FIXME("(%p, %p, %i): stub", pen, dash, count); + + if (!pen || !dash || count < 2 || count%2 == 1) + return InvalidParameter; + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap* customCap) { GpCustomLineCap * cap; GpStatus ret; + TRACE("(%p, %p)\n", pen, customCap); + /* native crashes on pen == NULL, customCap != NULL */ if(!customCap) return InvalidParameter; @@ -357,6 +444,8 @@ GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap* custom GpCustomLineCap * cap; GpStatus ret; + TRACE("(%p, %p)\n", pen, customCap); + /* native crashes on pen == NULL, customCap != NULL */ if(!customCap) return InvalidParameter; @@ -375,6 +464,8 @@ GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, INT i; REAL sum = 0; + TRACE("(%p, %p, %d)\n", pen, dash, count); + if(!pen || !dash) return InvalidParameter; @@ -409,6 +500,8 @@ GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen *pen, GpDashCap dashCap) { + TRACE("(%p, %d)\n", pen, dashCap); + if(!pen) return InvalidParameter; @@ -420,6 +513,8 @@ GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen *pen, GpDashCap dashCap) /* FIXME: dash offset not used */ GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen *pen, REAL offset) { + TRACE("(%p, %.2f)\n", pen, offset); + if(!pen) return InvalidParameter; @@ -430,6 +525,8 @@ GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen *pen, REAL offset) GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen *pen, GpDashStyle dash) { + TRACE("(%p, %d)\n", pen, dash); + if(!pen) return InvalidParameter; @@ -449,6 +546,8 @@ GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen *pen, GpDashStyle dash) GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen *pen, GpLineCap cap) { + TRACE("(%p, %d)\n", pen, cap); + if(!pen) return InvalidParameter; /* The old custom cap gets deleted even if the new style is LineCapCustom. */ @@ -463,6 +562,8 @@ GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen *pen, GpLineCap cap) GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen *pen, GpLineCap start, GpLineCap end, GpDashCap dash) { + TRACE("%p, %d, %d, %d)\n", pen, start, end, dash); + if(!pen) return InvalidParameter; @@ -482,6 +583,8 @@ GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen *pen, GpLineCap start, * Both kinds of miter joins clip if the angle is less than 11 degrees. */ GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen *pen, GpLineJoin join) { + TRACE("(%p, %d)\n", pen, join); + if(!pen) return InvalidParameter; pen->join = join; @@ -493,6 +596,8 @@ GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen *pen, GpLineJoin join) GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen *pen, REAL limit) { + TRACE("(%p, %.2f)\n", pen, limit); + if(!pen) return InvalidParameter; @@ -503,6 +608,8 @@ GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen *pen, REAL limit) GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen *pen, GpLineCap cap) { + TRACE("(%p, %d)\n", pen, cap); + if(!pen) return InvalidParameter; GdipDeleteCustomLineCap(pen->customstart); @@ -514,6 +621,8 @@ GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen *pen, GpLineCap cap) GpStatus WINGDIPAPI GdipSetPenWidth(GpPen *pen, REAL width) { + TRACE("(%p, %.2f)\n", pen, width); + if(!pen) return InvalidParameter; pen->width = width; @@ -523,6 +632,8 @@ GpStatus WINGDIPAPI GdipSetPenWidth(GpPen *pen, REAL width) GpStatus WINGDIPAPI GdipSetPenMode(GpPen *pen, GpPenAlignment mode) { + TRACE("(%p, %d)\n", pen, mode); + if(!pen) return InvalidParameter; pen->align = mode; diff --git a/reactos/dll/win32/gdiplus/region.c b/reactos/dll/win32/gdiplus/region.c index 90aaf9e26af..d28292c9eea 100644 --- a/reactos/dll/win32/gdiplus/region.c +++ b/reactos/dll/win32/gdiplus/region.c @@ -573,6 +573,9 @@ GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region) { FIXME("(%p, %p): stub\n", hrgn, region); + if(!hrgn || !region) + return InvalidParameter; + *region = NULL; return NotImplemented; } @@ -765,15 +768,189 @@ GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *region, UINT *needed) return Ok; } +static GpStatus get_path_hrgn(GpPath *path, GpGraphics *graphics, HRGN *hrgn) +{ + HDC new_hdc=NULL; + GpStatus stat; + INT save_state; + + if (!graphics) + { + new_hdc = GetDC(0); + if (!new_hdc) + return OutOfMemory; + + stat = GdipCreateFromHDC(new_hdc, &graphics); + if (stat != Ok) + { + ReleaseDC(0, new_hdc); + return stat; + } + } + + save_state = SaveDC(graphics->hdc); + EndPath(graphics->hdc); + + SetPolyFillMode(graphics->hdc, (path->fill == FillModeAlternate ? ALTERNATE + : WINDING)); + + stat = trace_path(graphics, path); + if (stat == Ok) + { + *hrgn = PathToRegion(graphics->hdc); + stat = *hrgn ? Ok : OutOfMemory; + } + + RestoreDC(graphics->hdc, save_state); + if (new_hdc) + { + ReleaseDC(0, new_hdc); + GdipDeleteGraphics(graphics); + } + + return stat; +} + +static GpStatus get_region_hrgn(struct region_element *element, GpGraphics *graphics, HRGN *hrgn) +{ + switch (element->type) + { + case RegionDataInfiniteRect: + *hrgn = NULL; + return Ok; + case RegionDataEmptyRect: + *hrgn = CreateRectRgn(0, 0, 0, 0); + return *hrgn ? Ok : OutOfMemory; + case RegionDataPath: + return get_path_hrgn(element->elementdata.pathdata.path, graphics, hrgn); + case RegionDataRect: + { + GpPath* path; + GpStatus stat; + GpRectF* rc = &element->elementdata.rect; + + stat = GdipCreatePath(FillModeAlternate, &path); + if (stat != Ok) + return stat; + stat = GdipAddPathRectangle(path, rc->X, rc->Y, rc->Width, rc->Height); + + if (stat == Ok) + stat = get_path_hrgn(path, graphics, hrgn); + + GdipDeletePath(path); + + return stat; + } + case CombineModeIntersect: + case CombineModeUnion: + case CombineModeXor: + case CombineModeExclude: + case CombineModeComplement: + { + HRGN left, right; + GpStatus stat; + int ret; + + stat = get_region_hrgn(element->elementdata.combine.left, graphics, &left); + if (stat != Ok) + { + *hrgn = NULL; + return stat; + } + + if (left == NULL) + { + /* existing region is infinite */ + switch (element->type) + { + case CombineModeIntersect: + return get_region_hrgn(element->elementdata.combine.right, graphics, hrgn); + case CombineModeXor: case CombineModeExclude: + FIXME("cannot exclude from an infinite region\n"); + /* fall-through */ + case CombineModeUnion: case CombineModeComplement: + *hrgn = NULL; + return Ok; + } + } + + stat = get_region_hrgn(element->elementdata.combine.right, graphics, &right); + if (stat != Ok) + { + DeleteObject(left); + *hrgn = NULL; + return stat; + } + + if (right == NULL) + { + /* new region is infinite */ + switch (element->type) + { + case CombineModeIntersect: + *hrgn = left; + return Ok; + case CombineModeXor: case CombineModeComplement: + FIXME("cannot exclude from an infinite region\n"); + /* fall-through */ + case CombineModeUnion: case CombineModeExclude: + DeleteObject(left); + *hrgn = NULL; + return Ok; + } + } + + switch (element->type) + { + case CombineModeIntersect: + ret = CombineRgn(left, left, right, RGN_AND); + break; + case CombineModeUnion: + ret = CombineRgn(left, left, right, RGN_OR); + break; + case CombineModeXor: + ret = CombineRgn(left, left, right, RGN_XOR); + break; + case CombineModeExclude: + ret = CombineRgn(left, left, right, RGN_DIFF); + break; + case CombineModeComplement: + ret = CombineRgn(left, right, left, RGN_DIFF); + break; + default: + ret = ERROR; + } + + DeleteObject(right); + + if (ret == ERROR) + { + DeleteObject(left); + *hrgn = NULL; + return GenericError; + } + + *hrgn = left; + return Ok; + } + default: + FIXME("GdipGetRegionHRgn unimplemented for region type=%x\n", element->type); + *hrgn = NULL; + return NotImplemented; + } +} + /***************************************************************************** * GdipGetRegionHRgn [GDIPLUS.@] */ GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hrgn) { - FIXME("(%p, %p, %p): stub\n", region, graphics, hrgn); + TRACE("(%p, %p, %p)\n", region, graphics, hrgn); - *hrgn = NULL; - return NotImplemented; + if (!region || !hrgn) + return InvalidParameter; + + return get_region_hrgn(®ion->node, graphics, hrgn); } GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *region, GpGraphics *graphics, BOOL *res) diff --git a/reactos/include/psdk/gdiplusenums.h b/reactos/include/psdk/gdiplusenums.h index bc52bd5d732..8f7470d5dbe 100644 --- a/reactos/include/psdk/gdiplusenums.h +++ b/reactos/include/psdk/gdiplusenums.h @@ -20,6 +20,7 @@ #define _GDIPLUSENUMS_H typedef UINT GraphicsState; +typedef UINT GraphicsContainer; enum Unit { @@ -75,6 +76,16 @@ enum PathPointType{ PathPointTypeBezier3 = 3 }; +enum PenType +{ + PenTypeSolidColor = BrushTypeSolidColor, + PenTypeHatchFill = BrushTypeHatchFill, + PenTypeTextureFill = BrushTypeTextureFill, + PenTypePathGradient = BrushTypePathGradient, + PenTypeLinearGradient = BrushTypeLinearGradient, + PenTypeUnknown = -1 +}; + enum LineJoin { LineJoinMiter = 0, @@ -329,6 +340,23 @@ enum CoordinateSpace CoordinateSpaceDevice }; +enum GpTestControlEnum +{ + TestControlForceBilinear = 0, + TestControlNoICM = 1, + TestControlGetBuildNumber = 2 +}; + +enum MetafileFrameUnit +{ + MetafileFrameUnitPixel = UnitPixel, + MetafileFrameUnitPoint = UnitPoint, + MetafileFrameUnitInch = UnitInch, + MetafileFrameUnitDocument = UnitDocument, + MetafileFrameUnitMillimeter = UnitMillimeter, + MetafileFrameUnitGdi +}; + #ifndef __cplusplus typedef enum Unit Unit; @@ -364,6 +392,9 @@ typedef enum ImageCodecFlags ImageCodecFlags; typedef enum CombineMode CombineMode; typedef enum FlushIntention FlushIntention; typedef enum CoordinateSpace CoordinateSpace; +typedef enum GpTestControlEnum GpTestControlEnum; +typedef enum MetafileFrameUnit MetafileFrameUnit; +typedef enum PenType PenType; #endif /* end of c typedefs */ diff --git a/reactos/include/psdk/gdiplusflat.h b/reactos/include/psdk/gdiplusflat.h index cbb59e5a9ba..1f93258fe29 100644 --- a/reactos/include/psdk/gdiplusflat.h +++ b/reactos/include/psdk/gdiplusflat.h @@ -27,64 +27,98 @@ extern "C" { #endif -GpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**); -GpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**); -GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**); -GpStatus WINGDIPAPI GdipDeletePen(GpPen*); -GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**); -GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*); -GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**); -GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**); -GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT); -GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*); -GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*); -GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*); -GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*); -GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*); -GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB); -GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*); -GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*); -GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT); -GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap); -GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL); -GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle); -GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap); -GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap); -GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin); -GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment); -GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL); -GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap); -GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL); -GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*); -GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*); -GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*); -GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*); -GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*); -GpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*); -GpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*); +/* AdjustableArrowCap */ +GpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**); +GpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*); +GpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*); +GpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*); +GpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*); +GpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL); +GpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL); +GpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL); +GpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL); +/* Bitmap */ +GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*); +GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT, + PixelFormat,BitmapData*); +GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB); +GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*); +GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP, HPALETTE, GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*, + GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**); + +/* Brush */ +GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**); +GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*); +GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*); + +/* CustomLineCap */ +GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**); +GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL, + GpCustomLineCap**); +GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*); +GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*); +GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*); +GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap, + GpLineCap); +GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*); +GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin); +GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*); + +/* Font */ +GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**); +GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*, REAL, INT, Unit, + GpFont**); +GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**); +GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**); +GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**); +GpStatus WINGDIPAPI GdipDeleteFont(GpFont*); +GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*); +GpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**); +GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*); +GpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*); +GpStatus WINGDIPAPI GdipGetFontStyle(GpFont*, INT*); +GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*, GDIPCONST GpGraphics*, + REAL*); +GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*); + +/* FontCollection */ +GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**); +GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**); +GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*); +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*); +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT, + GpFontFamily*[], INT*); + +/* FontFamily */ +GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**); +GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*, + GpFontCollection*, GpFontFamily**); +GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*); +GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID); +GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**); +GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**); +GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**); +GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*); + +/* Graphics */ +GpStatus WINGDIPAPI GdipFlush(GpGraphics*, GpFlushIntention); GpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**); GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**); GpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**); GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**); -GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*, - ARGB,ARGB,GpWrapMode,GpLineGradient**); -GpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*, - ARGB,ARGB,GpWrapMode,GpLineGradient**); -GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB, - LinearGradientMode,GpWrapMode,GpLineGradient**); -GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB, - LinearGradientMode,GpWrapMode,GpLineGradient**); -GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*, - ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); -GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*, - ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); - -GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**); -GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL, - GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); -GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); -GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**); GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *); GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL); @@ -110,14 +144,14 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*, GpStatus WINGDIPAPI GdipDrawImagePointsRectI(GpGraphics*,GpImage*, GDIPCONST GpPoint*,INT,INT,INT,INT,INT,GpUnit, GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*); +GpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL); +GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawImageRectRect(GpGraphics*,GpImage*,REAL,REAL,REAL, REAL,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort, VOID*); GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics*,GpImage*,INT,INT,INT, INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort, VOID*); -GpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL); -GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawLine(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawLineI(GpGraphics*,GpPen*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawLines(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); @@ -134,7 +168,6 @@ GpStatus WINGDIPAPI GdipDrawRectanglesI(GpGraphics*,GpPen*,GDIPCONST GpRect*,INT GpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT, GDIPCONST GpFont*,GDIPCONST RectF*, GDIPCONST GpStringFormat*, GDIPCONST GpBrush*); - GpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT, REAL,GpFillMode); GpStatus WINGDIPAPI GdipFillClosedCurve2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT, @@ -154,104 +187,60 @@ GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT); GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT); -GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*); +GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*); GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*); -GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode); -GpStatus WINGDIPAPI GdipResetClip(GpGraphics*); -GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*, BOOL*); +GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*); GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*); GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*); -GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*); +GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*); +GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*); +GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**); GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*); GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*); GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*); GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*); GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*); +GpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics*,UINT*); GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*); GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*); GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics*,ARGB); -GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT, - GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*); +GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*, BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics*,REAL,REAL,BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics*,INT,INT,BOOL*); GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*, INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT, GpRegion**); - +GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT, + GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*); +GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder); GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC); +GpStatus WINGDIPAPI GdipResetClip(GpGraphics*); GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*); GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState); GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*); GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder); +GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode); +GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode); +GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode); +GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode); GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics*,CompositingMode); GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality); GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode); GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL); GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit); -GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*); -GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*); GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode); GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode); +GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT); GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint); GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*); -GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder); - -GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**); -GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**); -GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**); -GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*, - GpPathGradient**); -GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**); -GpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**); -GpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**); -GpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**); -GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*, - REAL,REAL,REAL,REAL,GpTexture**); -GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*, - INT,INT,INT,INT,GpTexture**); -GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*); -GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*); -GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*); -GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*); -GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*); -GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*); -GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*); -GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT); -GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*); -GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*); -GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*); -GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*); -GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*); -GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*); -GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*); -GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*); -GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*); -GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*, - ARGB*,INT*); -GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*); -GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*); -GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*); -GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*, - GDIPCONST REAL*,INT); -GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL); -GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL); -GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode); -GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB); -GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB); -GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GpPointF*); -GpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GpPoint*); -GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL); -GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL); -GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL); -GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*, - ARGB*,INT*); -GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode); -GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB); -GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*); GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, GpPointF *, INT); GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, GpPoint *, INT); +GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder); +/* GraphicsPath */ GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL); @@ -269,9 +258,9 @@ GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL); +GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT); -GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL); GpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL); @@ -281,6 +270,7 @@ GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathRectangles(GpPath*,GDIPCONST GpRectF*,INT); GpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath*,GDIPCONST GpRect*,INT); +GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*); GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**); GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*); GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*); @@ -290,6 +280,12 @@ GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT, GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**); GpStatus WINGDIPAPI GdipDeletePath(GpPath*); GpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL); +GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*, + GpGraphics*,BOOL*); +GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*, + GpGraphics*,BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*); GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*); GpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*); @@ -299,111 +295,36 @@ GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT); GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*); -GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*, - GpGraphics*,BOOL*); -GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*, - GpGraphics*,BOOL*); -GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*); -GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipResetPath(GpPath*); GpStatus WINGDIPAPI GdipReversePath(GpPath*); GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode); +GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*); GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*); GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*); -GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**); -GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**); -GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**); -GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**); -GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**); -GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*); -GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); -GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*); -GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*); -GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*); - -GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*); -GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*); -GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GpMatrix*,GpMatrixOrder); -GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder); -GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder); -GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); -GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL); -GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT); -GpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT); -GpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT); -GpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT); -GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); - -GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*); -GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*); -GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*, - INT,INT); -GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*); -GpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*); -GpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*); -GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*); -GpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*); -GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*); -GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*); -GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*); -GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT); -GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*); -GpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*); - -GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**); -GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL, - GpCustomLineCap**); -GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*); -GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap, - GpLineCap); -GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*); -GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*); -GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*); -GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin); -GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*); - -GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*); -GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB); -GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT, - PixelFormat,BitmapData*); -GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*); -GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics*,GpMetafile*,INT*, - EmfType,const WCHAR*,GpMetafile**); -GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT*,const WCHAR*,EmfType,const WCHAR*,GpMetafile**); -GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**); -GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**); -GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**); -GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**); -GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**); -GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**); -GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*, - GpBitmap**); -GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**); -GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**); +/* Image */ +GpStatus WINGDIPAPI GdipCloneImage(GpImage*, GpImage**); +GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**); GpStatus WINGDIPAPI GdipDisposeImage(GpImage*); GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage*,ImageItemData*); GpStatus WINGDIPAPI GdipFindNextImageItem(GpImage*,ImageItemData*); -GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size); -GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders); -GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP, HPALETTE, GpBitmap**); -GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*); +GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage*,UINT,UINT,PropertyItem*); GpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*); -GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**); +GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*); +GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*); GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*); GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*); +GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*); GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*); GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*); GpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*); GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*); GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*); -GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*); -GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*); -GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*); -GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*); -GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*); -GpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*); +GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*); +GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*); +GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*); GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*); +GpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*); GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*); GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*); GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT); @@ -417,9 +338,9 @@ GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSI GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*, GDIPCONST CLSID*,GDIPCONST EncoderParameters*); GpStatus WINGDIPAPI GdipSetImagePalette(GpImage*,GDIPCONST ColorPalette*); +GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*); -GpStatus WINGDIPAPI GdipCloneImage(GpImage*, GpImage**); -GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**); +/* ImageAttributes */ GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**); GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*); GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*, @@ -430,72 +351,159 @@ GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*, GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode, ARGB,BOOL); -GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*, REAL, INT, Unit, - GpFont**); -GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**); -GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**); -GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**); -GpStatus WINGDIPAPI GdipDeleteFont(GpFont*); -GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*); -GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**); -GpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**); -GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*); -GpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*); -GpStatus WINGDIPAPI GdipGetFontStyle(GpFont*, INT*); -GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*, GDIPCONST GpGraphics*, - REAL*); -GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*); +/* LinearGradientBrush */ +GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*, + ARGB,ARGB,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*, + ARGB,ARGB,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB, + LinearGradientMode,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB, + LinearGradientMode,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*, + ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*, + ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*); +GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*); +GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*); +GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*); +GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*); +GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*, + GDIPCONST REAL*,INT); +GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB); +GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL); +GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL); +GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode); -GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*, - GpFontCollection*, GpFontFamily**); -GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**); -GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*); -GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID); -GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*); -GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*); -GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*); -GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*); -GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*); +/* Matrix */ +GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**); +GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**); +GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**); +GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**); +GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**); +GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*); +GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*); +GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*); +GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*); +GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*); +GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*); +GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GDIPCONST GpMatrix*,GpMatrixOrder); +GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder); +GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); +GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); +GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL); +GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT); +GpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT); +GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); +GpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT); +GpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT); -GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**); -GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**); -GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**); +/* Metafile */ +GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics*,GpMetafile*,INT*, + EmfType,const WCHAR*,GpMetafile**); +GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT*,const WCHAR*,EmfType,const WCHAR*,GpMetafile**); +GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**); +GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**); +GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL, + GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); +GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*, + GpMetafile**); +GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT); -GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**); -GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**); -GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*); -GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*); -GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT, - GpFontFamily*[], INT*); +/* MetafileHeader */ +GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*); +GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*); +GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*); +GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*); +GpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*); -GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**); -GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*); -GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **); -GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **); -GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*); -GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*, - StringDigitSubstitute*); -GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*); -GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*); -GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*); -GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( - GDIPCONST GpStringFormat*, INT*); -GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*); -GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*); -GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*); -GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment); -GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute); -GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT); -GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment); -GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges( - GpStringFormat*, INT, GDIPCONST CharacterRange*); -GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*); -GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming); -GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**); +/* PathGradientBrush */ +GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**); +GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**); +GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*, + GpPathGradient**); +GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT); +GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*); +GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*); +GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*); +GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*); +GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*); +GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*); +GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*); +GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*); +GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*); +GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*, + ARGB*,INT*); +GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*); +GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT); +GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB); +GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GpPointF*); +GpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GpPoint*); +GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL); +GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL); +GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL); +GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*, + ARGB*,INT*); +GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode); -GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*); -GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*); +/* PathIterator */ +GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*); +GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*); +GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*, + INT,INT); +GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*); +GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*); +GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT); +GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*); +GpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*); +GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*); +GpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*); +GpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*); +GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*); +GpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*); +GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*); +/* Pen */ +GpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**); +GpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**); +GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**); +GpStatus WINGDIPAPI GdipDeletePen(GpPen*); +GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**); +GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*); +GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**); +GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**); +GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT); +GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*); +GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*); +GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*); +GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*); +GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*); +GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB); +GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT); +GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*); +GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*); +GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT); +GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap); +GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL); +GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle); +GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap); +GpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*); +GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap); +GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin); +GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment); +GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL); +GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap); +GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL); +GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*); +GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*); +GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*); +GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*); +GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*); +GpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*); +GpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*); + +/* Region */ GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *, GpRegion **); GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *, GpPath *, CombineMode); GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *, GDIPCONST GpRectF *, CombineMode); @@ -522,20 +530,56 @@ GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *, GpMatrix *); GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *, REAL, REAL); GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *, INT, INT); -GpStatus WINGDIPAPI GdipFlush(GpGraphics*, GpFlushIntention); -GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT); -GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode); -GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*); +/* SolidBrush */ +GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**); +GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*); +GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB); -GpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**); -GpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*); -GpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*); -GpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*); -GpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*); -GpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL); -GpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL); -GpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL); -GpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL); +/* StringFormat */ +GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**); +GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**); +GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*); +GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*); +GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*, + StringDigitSubstitute*); +GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*); +GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*); +GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*); +GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( + GDIPCONST GpStringFormat*, INT*); +GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*); +GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*); +GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*); +GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment); +GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute); +GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT); +GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment); +GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges( + GpStringFormat*, INT, GDIPCONST CharacterRange*); +GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*); +GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming); +GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **); +GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **); + +/* Texture */ +GpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**); +GpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**); +GpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**); +GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*, + REAL,REAL,REAL,REAL,GpTexture**); +GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*, + INT,INT,INT,INT,GpTexture**); +GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*); +GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*, GpWrapMode*); +GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*); +GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*); +GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*, GpWrapMode); + +/* Without wrapper methods */ +GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**); +GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size); +GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders); +GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum,void*); #ifdef __cplusplus } diff --git a/reactos/include/psdk/gdiplusgpstubs.h b/reactos/include/psdk/gdiplusgpstubs.h index 917097ef8d6..a768638e0ad 100644 --- a/reactos/include/psdk/gdiplusgpstubs.h +++ b/reactos/include/psdk/gdiplusgpstubs.h @@ -32,6 +32,7 @@ class GpAdjustableArrowCap : public GpCustomLineCap {}; class GpImage {}; class GpMetafile : public GpImage {}; class GpImageAttributes {}; +class GpCachedBitmap {}; class GpBitmap : public GpImage {}; class GpPathGradient : public GpBrush {}; class GpLineGradient : public GpBrush {}; @@ -57,6 +58,7 @@ typedef struct GpAdjustableArrowCap GpAdjustableArrowCap; typedef struct GpImage GpImage; typedef struct GpMetafile GpMetafile; typedef struct GpImageAttributes GpImageAttributes; +typedef struct GpCachedBitmap GpCachedBitmap; typedef struct GpBitmap GpBitmap; typedef struct GpPathGradient GpPathGradient; typedef struct GpLineGradient GpLineGradient; @@ -88,5 +90,6 @@ typedef WrapMode GpWrapMode; typedef Color GpColor; typedef FlushIntention GpFlushIntention; typedef CoordinateSpace GpCoordinateSpace; +typedef PenType GpPenType; #endif diff --git a/reactos/include/psdk/gdiplusimaging.h b/reactos/include/psdk/gdiplusimaging.h index 00ed3d12024..e8dda736e8c 100644 --- a/reactos/include/psdk/gdiplusimaging.h +++ b/reactos/include/psdk/gdiplusimaging.h @@ -19,6 +19,18 @@ #ifndef _GDIPLUSIMAGING_H #define _GDIPLUSIMAGING_H +DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatBMP, 0xb96b3cab, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatEMF, 0xb96b3cac, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatWMF, 0xb96b3cad, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatJPEG, 0xb96b3cae, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatPNG, 0xb96b3caf, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatGIF, 0xb96b3cb0, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatTIFF, 0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatEXIF, 0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); +DEFINE_GUID(ImageFormatIcon, 0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); + enum ImageLockMode { ImageLockModeRead = 1, @@ -84,6 +96,15 @@ public: UINT Cookie; }; +class PropertyItem +{ +public: + PROPID id; + ULONG length; + WORD type; + VOID* value; +}; + #else /* end of c++ typedefs */ typedef enum ImageLockMode ImageLockMode; @@ -140,6 +161,258 @@ typedef struct ImageItemData UINT Cookie; } ImageItemData; +typedef struct PropertyItem +{ + PROPID id; + ULONG length; + WORD type; + VOID* value; +} PropertyItem; + #endif /* end of c typedefs */ +/* property types */ +#define PropertyTagTypeByte 1 +#define PropertyTagTypeASCII 2 +#define PropertyTagTypeShort 3 +#define PropertyTagTypeLong 4 +#define PropertyTagTypeRational 5 +#define PropertyTagTypeUndefined 7 +#define PropertyTagTypeSLONG 9 +#define PropertyTagTypeSRational 10 + +/* property IDs */ +#define PropertyTagExifIFD 0x8769 +#define PropertyTagGpsIFD 0x8825 + +#define PropertyTagNewSubfileType 0x00FE +#define PropertyTagSubfileType 0x00FF +#define PropertyTagImageWidth 0x0100 +#define PropertyTagImageHeight 0x0101 +#define PropertyTagBitsPerSample 0x0102 +#define PropertyTagCompression 0x0103 +#define PropertyTagPhotometricInterp 0x0106 +#define PropertyTagThreshHolding 0x0107 +#define PropertyTagCellWidth 0x0108 +#define PropertyTagCellHeight 0x0109 +#define PropertyTagFillOrder 0x010A +#define PropertyTagDocumentName 0x010D +#define PropertyTagImageDescription 0x010E +#define PropertyTagEquipMake 0x010F +#define PropertyTagEquipModel 0x0110 +#define PropertyTagStripOffsets 0x0111 +#define PropertyTagOrientation 0x0112 +#define PropertyTagSamplesPerPixel 0x0115 +#define PropertyTagRowsPerStrip 0x0116 +#define PropertyTagStripBytesCount 0x0117 +#define PropertyTagMinSampleValue 0x0118 +#define PropertyTagMaxSampleValue 0x0119 +#define PropertyTagXResolution 0x011A +#define PropertyTagYResolution 0x011B +#define PropertyTagPlanarConfig 0x011C +#define PropertyTagPageName 0x011D +#define PropertyTagXPosition 0x011E +#define PropertyTagYPosition 0x011F +#define PropertyTagFreeOffset 0x0120 +#define PropertyTagFreeByteCounts 0x0121 +#define PropertyTagGrayResponseUnit 0x0122 +#define PropertyTagGrayResponseCurve 0x0123 +#define PropertyTagT4Option 0x0124 +#define PropertyTagT6Option 0x0125 +#define PropertyTagResolutionUnit 0x0128 +#define PropertyTagPageNumber 0x0129 +#define PropertyTagTransferFuncition 0x012D +#define PropertyTagSoftwareUsed 0x0131 +#define PropertyTagDateTime 0x0132 +#define PropertyTagArtist 0x013B +#define PropertyTagHostComputer 0x013C +#define PropertyTagPredictor 0x013D +#define PropertyTagWhitePoint 0x013E +#define PropertyTagPrimaryChromaticities 0x013F +#define PropertyTagColorMap 0x0140 +#define PropertyTagHalftoneHints 0x0141 +#define PropertyTagTileWidth 0x0142 +#define PropertyTagTileLength 0x0143 +#define PropertyTagTileOffset 0x0144 +#define PropertyTagTileByteCounts 0x0145 +#define PropertyTagInkSet 0x014C +#define PropertyTagInkNames 0x014D +#define PropertyTagNumberOfInks 0x014E +#define PropertyTagDotRange 0x0150 +#define PropertyTagTargetPrinter 0x0151 +#define PropertyTagExtraSamples 0x0152 +#define PropertyTagSampleFormat 0x0153 +#define PropertyTagSMinSampleValue 0x0154 +#define PropertyTagSMaxSampleValue 0x0155 +#define PropertyTagTransferRange 0x0156 + +#define PropertyTagJPEGProc 0x0200 +#define PropertyTagJPEGInterFormat 0x0201 +#define PropertyTagJPEGInterLength 0x0202 +#define PropertyTagJPEGRestartInterval 0x0203 +#define PropertyTagJPEGLosslessPredictors 0x0205 +#define PropertyTagJPEGPointTransforms 0x0206 +#define PropertyTagJPEGQTables 0x0207 +#define PropertyTagJPEGDCTables 0x0208 +#define PropertyTagJPEGACTables 0x0209 + +#define PropertyTagYCbCrCoefficients 0x0211 +#define PropertyTagYCbCrSubsampling 0x0212 +#define PropertyTagYCbCrPositioning 0x0213 +#define PropertyTagREFBlackWhite 0x0214 + +#define PropertyTagICCProfile 0x8773 + +#define PropertyTagGamma 0x0301 +#define PropertyTagICCProfileDescriptor 0x0302 +#define PropertyTagSRGBRenderingIntent 0x0303 + +#define PropertyTagImageTitle 0x0320 +#define PropertyTagCopyright 0x8298 + +#define PropertyTagResolutionXUnit 0x5001 +#define PropertyTagResolutionYUnit 0x5002 +#define PropertyTagResolutionXLengthUnit 0x5003 +#define PropertyTagResolutionYLengthUnit 0x5004 +#define PropertyTagPrintFlags 0x5005 +#define PropertyTagPrintFlagsVersion 0x5006 +#define PropertyTagPrintFlagsCrop 0x5007 +#define PropertyTagPrintFlagsBleedWidth 0x5008 +#define PropertyTagPrintFlagsBleedWidthScale 0x5009 +#define PropertyTagHalftoneLPI 0x500A +#define PropertyTagHalftoneLPIUnit 0x500B +#define PropertyTagHalftoneDegree 0x500C +#define PropertyTagHalftoneShape 0x500D +#define PropertyTagHalftoneMisc 0x500E +#define PropertyTagHalftoneScreen 0x500F +#define PropertyTagJPEGQuality 0x5010 +#define PropertyTagGridSize 0x5011 +#define PropertyTagThumbnailFormat 0x5012 +#define PropertyTagThumbnailWidth 0x5013 +#define PropertyTagThumbnailHeight 0x5014 +#define PropertyTagThumbnailColorDepth 0x5015 +#define PropertyTagThumbnailPlanes 0x5016 +#define PropertyTagThumbnailRawBytes 0x5017 +#define PropertyTagThumbnailSize 0x5018 +#define PropertyTagThumbnailCompressedSize 0x5019 +#define PropertyTagColorTransferFunction 0x501A +#define PropertyTagThumbnailData 0x501B + +#define PropertyTagThumbnailImageWidth 0x5020 +#define PropertyTagThumbnailImageHeight 0x5021 +#define PropertyTagThumbnailBitsPerSample 0x5022 +#define PropertyTagThumbnailCompression 0x5023 +#define PropertyTagThumbnailPhotometricInterp 0x5024 +#define PropertyTagThumbnailImageDescription 0x5025 +#define PropertyTagThumbnailEquipMake 0x5026 +#define PropertyTagThumbnailEquipModel 0x5027 +#define PropertyTagThumbnailStripOffsets 0x5028 +#define PropertyTagThumbnailOrientation 0x5029 +#define PropertyTagThumbnailSamplesPerPixel 0x502A +#define PropertyTagThumbnailRowsPerStrip 0x502B +#define PropertyTagThumbnailStripBytesCount 0x502C +#define PropertyTagThumbnailResolutionX 0x502D +#define PropertyTagThumbnailResolutionY 0x502E +#define PropertyTagThumbnailPlanarConfig 0x502F +#define PropertyTagThumbnailResolutionUnit 0x5030 +#define PropertyTagThumbnailTransferFunction 0x5031 +#define PropertyTagThumbnailSoftwareUsed 0x5032 +#define PropertyTagThumbnailDateTime 0x5033 +#define PropertyTagThumbnailArtist 0x5034 +#define PropertyTagThumbnailWhitePoint 0x5035 +#define PropertyTagThumbnailPrimaryChromaticities 0x5036 +#define PropertyTagThumbnailYCbCrCoefficients 0x5037 +#define PropertyTagThumbnailYCbCrSubsampling 0x5038 +#define PropertyTagThumbnailYCbCrPositioning 0x5039 +#define PropertyTagThumbnailRefBlackWhite 0x503A +#define PropertyTagThumbnailCopyRight 0x503B + +#define PropertyTagLuminanceTable 0x5090 +#define PropertyTagChrominanceTable 0x5091 + +#define PropertyTagFrameDelay 0x5100 +#define PropertyTagLoopCount 0x5101 + +#define PropertyTagPixelUnit 0x5110 +#define PropertyTagPixelPerUnitX 0x5111 +#define PropertyTagPixelPerUnitY 0x5112 +#define PropertyTagPaletteHistogram 0x5113 + +#define PropertyTagExifExposureTime 0x829A +#define PropertyTagExifFNumber 0x829D + +#define PropertyTagExifExposureProg 0x8822 +#define PropertyTagExifSpectralSense 0x8824 +#define PropertyTagExifISOSpeed 0x8827 +#define PropertyTagExifOECF 0x8828 + +#define PropertyTagExifVer 0x9000 +#define PropertyTagExifDTOrig 0x9003 +#define PropertyTagExifDTDigitized 0x9004 + +#define PropertyTagExifCompConfig 0x9101 +#define PropertyTagExifCompBPP 0x9102 + +#define PropertyTagExifShutterSpeed 0x9201 +#define PropertyTagExifAperture 0x9202 +#define PropertyTagExifBrightness 0x9203 +#define PropertyTagExifExposureBias 0x9204 +#define PropertyTagExifMaxAperture 0x9205 +#define PropertyTagExifSubjectDist 0x9206 +#define PropertyTagExifMeteringMode 0x9207 +#define PropertyTagExifLightSource 0x9208 +#define PropertyTagExifFlash 0x9209 +#define PropertyTagExifFocalLength 0x920A +#define PropertyTagExifMakerNote 0x927C +#define PropertyTagExifUserComment 0x9286 +#define PropertyTagExifDTSubsec 0x9290 +#define PropertyTagExifDTOrigSS 0x9291 +#define PropertyTagExifDTDigSS 0x9292 + +#define PropertyTagExifFPXVer 0xA000 +#define PropertyTagExifColorSpace 0xA001 +#define PropertyTagExifPixXDim 0xA002 +#define PropertyTagExifPixYDim 0xA003 +#define PropertyTagExifRelatedWav 0xA004 +#define PropertyTagExifInterop 0xA005 +#define PropertyTagExifFlashEnergy 0xA20B +#define PropertyTagExifSpatialFR 0xA20C +#define PropertyTagExifFocalXRes 0xA20E +#define PropertyTagExifFocalYRes 0xA20F +#define PropertyTagExifFocalResUnit 0xA210 +#define PropertyTagExifSubjectLoc 0xA214 +#define PropertyTagExifExposureIndex 0xA215 +#define PropertyTagExifSensingMethod 0xA217 +#define PropertyTagExifFileSource 0xA300 +#define PropertyTagExifSceneType 0xA301 +#define PropertyTagExifCfaPattern 0xA302 + +#define PropertyTagGpsVer 0x0000 +#define PropertyTagGpsLatitudeRef 0x0001 +#define PropertyTagGpsLatitude 0x0002 +#define PropertyTagGpsLongitudeRef 0x0003 +#define PropertyTagGpsLongitude 0x0004 +#define PropertyTagGpsAltitudeRef 0x0005 +#define PropertyTagGpsAltitude 0x0006 +#define PropertyTagGpsGpsTime 0x0007 +#define PropertyTagGpsGpsSatellites 0x0008 +#define PropertyTagGpsGpsStatus 0x0009 +#define PropertyTagGpsGpsMeasureMode 0x000A +#define PropertyTagGpsGpsDop 0x000B +#define PropertyTagGpsSpeedRef 0x000C +#define PropertyTagGpsSpeed 0x000D +#define PropertyTagGpsTrackRef 0x000E +#define PropertyTagGpsTrack 0x000F +#define PropertyTagGpsImgDirRef 0x0010 +#define PropertyTagGpsImgDir 0x0011 +#define PropertyTagGpsMapDatum 0x0012 +#define PropertyTagGpsDestLatRef 0x0013 +#define PropertyTagGpsDestLat 0x0014 +#define PropertyTagGpsDestLongRef 0x0015 +#define PropertyTagGpsDestLong 0x0016 +#define PropertyTagGpsDestBearRef 0x0017 +#define PropertyTagGpsDestBear 0x0018 +#define PropertyTagGpsDestDistRef 0x0019 +#define PropertyTagGpsDestDist 0x001A + #endif /* _GDIPLUSIMAGING_H */ diff --git a/reactos/include/psdk/gdiplusmem.h b/reactos/include/psdk/gdiplusmem.h index a0496baabce..fad8ed6772d 100644 --- a/reactos/include/psdk/gdiplusmem.h +++ b/reactos/include/psdk/gdiplusmem.h @@ -25,7 +25,7 @@ extern "C" { #endif -void* WINGDIPAPI GdipAlloc(SIZE_T); +void* WINGDIPAPI GdipAlloc(SIZE_T) __WINE_ALLOC_SIZE(1); void WINGDIPAPI GdipFree(void*); #ifdef __cplusplus diff --git a/reactos/include/psdk/ole2.h b/reactos/include/psdk/ole2.h index 5617c835faf..a92c2f4ee0e 100644 --- a/reactos/include/psdk/ole2.h +++ b/reactos/include/psdk/ole2.h @@ -84,6 +84,7 @@ HRESULT WINAPI OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleSetContainedObject(LPUNKNOWN pUnknown, BOOL fContained); +HRESULT WINAPI OleNoteObjectVisible(LPUNKNOWN pUnknown, BOOL fVisible); HRESULT WINAPI OleQueryLinkFromData(IDataObject* pSrcDataObject); HRESULT WINAPI OleQueryCreateFromData(LPDATAOBJECT pSrcDataObject); HRESULT WINAPI OleRun(LPUNKNOWN pUnknown); @@ -111,6 +112,7 @@ HRESULT WINAPI OleCreateLink(LPMONIKER pmkLinkSrc, REFIID riid, DWORD render HRESULT WINAPI OleCreate(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleFlushClipboard(void); +HRESULT WINAPI GetConvertStg(LPSTORAGE pStg); HRESULT WINAPI SetConvertStg(LPSTORAGE pStg, BOOL fConvert); BOOL WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, struct tagMSG* lpMsg, WORD* lpwCmd); HRESULT WINAPI OleCreateLinkToFile(LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc, @@ -154,6 +156,7 @@ typedef struct _OLESTREAM { HRESULT WINAPI OleConvertOLESTREAMToIStorage( LPOLESTREAM lpolestream, LPSTORAGE pstg, const DVTARGETDEVICE* ptd); HRESULT WINAPI OleConvertIStorageToOLESTREAM( LPSTORAGE pstg, LPOLESTREAM lpolestream); +HRESULT WINAPI OleDoAutoConvert( LPSTORAGE pStg, LPCLSID pClsidNew ); HRESULT WINAPI OleGetAutoConvert( REFCLSID clsidOld, LPCLSID pClsidNew ); HRESULT WINAPI OleSetAutoConvert( REFCLSID clsidOld, REFCLSID clsidNew );