Author: dchapyshev
Date: Sat Feb 14 02:14:34 2009
New Revision: 39601
URL:
http://svn.reactos.org/svn/reactos?rev=39601&view=rev
Log:
- Sync gdiplus with Wine head
Modified:
trunk/reactos/dll/win32/gdiplus/font.c
trunk/reactos/dll/win32/gdiplus/gdiplus.spec
trunk/reactos/dll/win32/gdiplus/graphics.c
trunk/reactos/dll/win32/gdiplus/graphicspath.c
trunk/reactos/dll/win32/gdiplus/image.c
trunk/reactos/dll/win32/gdiplus/region.c
trunk/reactos/dll/win32/gdiplus/stringformat.c
trunk/reactos/include/psdk/gdiplusflat.h
Modified: trunk/reactos/dll/win32/gdiplus/font.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/font.c?r…
==============================================================================
--- trunk/reactos/dll/win32/gdiplus/font.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdiplus/font.c [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -374,6 +374,29 @@
}
/*******************************************************************************
+ * GdipGetLogFontA [GDIPLUS.@]
+ */
+GpStatus WINGDIPAPI GdipGetLogFontA(GpFont *font, GpGraphics *graphics,
+ LOGFONTA *lfa)
+{
+ GpStatus status;
+ LOGFONTW lfw;
+
+ TRACE("(%p, %p, %p)\n", font, graphics, lfa);
+
+ status = GdipGetLogFontW(font, graphics, &lfw);
+ if(status != Ok)
+ return status;
+
+ memcpy(lfa, &lfw, FIELD_OFFSET(LOGFONTA,lfFaceName) );
+
+ if(!MultiByteToWideChar(CP_ACP, 0, lfa->lfFaceName, -1, lfw.lfFaceName,
LF_FACESIZE))
+ return GenericError;
+
+ return Ok;
+}
+
+/*******************************************************************************
* GdipGetLogFontW [GDIPLUS.@]
*/
GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics,
Modified: trunk/reactos/dll/win32/gdiplus/gdiplus.spec
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/gdiplus.…
==============================================================================
--- trunk/reactos/dll/win32/gdiplus/gdiplus.spec [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdiplus/gdiplus.spec [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -76,7 +76,7 @@
@ stdcall GdipCreateBitmapFromGdiDib(ptr ptr ptr)
@ stdcall GdipCreateBitmapFromGraphics(long long ptr ptr)
@ stdcall GdipCreateBitmapFromHBITMAP(long long ptr)
-@ stub GdipCreateBitmapFromHICON
+@ stdcall GdipCreateBitmapFromHICON(long ptr)
@ stdcall GdipCreateBitmapFromResource(long wstr ptr)
@ stdcall GdipCreateBitmapFromScan0(long long long long ptr ptr)
@ stdcall GdipCreateBitmapFromStream(ptr ptr)
@@ -245,8 +245,8 @@
@ stdcall GdipGetCellAscent(ptr long ptr)
@ stdcall GdipGetCellDescent(ptr long ptr)
@ stdcall GdipGetClip(ptr ptr)
-@ stub GdipGetClipBounds
-@ stub GdipGetClipBoundsI
+@ stdcall GdipGetClipBounds(ptr ptr)
+@ stdcall GdipGetClipBoundsI(ptr ptr)
@ stdcall GdipGetCompositingMode(ptr ptr)
@ stdcall GdipGetCompositingQuality(ptr ptr)
@ stdcall GdipGetCustomLineCapBaseCap(ptr ptr)
@@ -311,7 +311,7 @@
@ stdcall GdipGetLineSpacing(ptr long ptr)
@ stub GdipGetLineTransform
@ stdcall GdipGetLineWrapMode(ptr ptr)
-@ stub GdipGetLogFontA
+@ stdcall GdipGetLogFontA(ptr ptr ptr)
@ stdcall GdipGetLogFontW(ptr ptr ptr)
@ stdcall GdipGetMatrixElements(ptr ptr)
@ stub GdipGetMetafileDownLevelRasterizationLimit
@@ -507,7 +507,7 @@
@ stdcall GdipSetAdjustableArrowCapMiddleInset(ptr long)
@ stdcall GdipSetAdjustableArrowCapWidth(ptr long)
@ stdcall GdipSetClipGraphics(ptr ptr long)
-@ stub GdipSetClipHrgn
+@ stdcall GdipSetClipHrgn(ptr long long)
@ stdcall GdipSetClipPath(ptr ptr long)
@ stdcall GdipSetClipRect(ptr long long long long long)
@ stdcall GdipSetClipRectI(ptr long long long long long)
@@ -609,8 +609,8 @@
@ stdcall GdipTransformPoints(ptr long long ptr long)
@ stdcall GdipTransformPointsI(ptr long long ptr long)
@ stdcall GdipTransformRegion(ptr ptr)
-@ stub GdipTranslateClip
-@ stub GdipTranslateClipI
+@ stdcall GdipTranslateClip(ptr long long)
+@ stdcall GdipTranslateClipI(ptr long long)
@ stdcall GdipTranslateLineTransform(ptr long long long)
@ stdcall GdipTranslateMatrix(ptr long long long)
@ stub GdipTranslatePathGradientTransform
Modified: trunk/reactos/dll/win32/gdiplus/graphics.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/graphics…
==============================================================================
--- trunk/reactos/dll/win32/gdiplus/graphics.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdiplus/graphics.c [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -2375,18 +2375,39 @@
return ret;
}
+/*****************************************************************************
+ * GdipFillRegion [GDIPLUS.@]
+ */
GpStatus WINGDIPAPI GdipFillRegion(GpGraphics* graphics, GpBrush* brush,
GpRegion* region)
{
+ INT save_state;
+ GpStatus status;
+ HRGN hrgn;
+
+ TRACE("(%p, %p, %p)\n", graphics, brush, region);
+
if (!(graphics && brush && region))
return InvalidParameter;
if(graphics->busy)
return ObjectBusy;
- FIXME("(%p, %p, %p): stub\n", graphics, brush, region);
-
- return NotImplemented;
+ status = GdipGetRegionHRgn(region, graphics, &hrgn);
+ if(status != Ok)
+ return status;
+
+ save_state = SaveDC(graphics->hdc);
+ EndPath(graphics->hdc);
+ SelectObject(graphics->hdc, GetStockObject(NULL_PEN));
+
+ FillRgn(graphics->hdc, hrgn, brush->gdibrush);
+
+ RestoreDC(graphics->hdc, save_state);
+
+ DeleteObject(hrgn);
+
+ return Ok;
}
GpStatus WINGDIPAPI GdipFlush(GpGraphics *graphics, GpFlushIntention intention)
@@ -2403,6 +2424,38 @@
FIXME("not implemented\n");
return NotImplemented;
+}
+
+/*****************************************************************************
+ * GdipGetClipBounds [GDIPLUS.@]
+ */
+GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics *graphics, GpRectF *rect)
+{
+ TRACE("(%p, %p)\n", graphics, rect);
+
+ if(!graphics)
+ return InvalidParameter;
+
+ if(graphics->busy)
+ return ObjectBusy;
+
+ return GdipGetRegionBounds(graphics->clip, graphics, rect);
+}
+
+/*****************************************************************************
+ * GdipGetClipBoundsI [GDIPLUS.@]
+ */
+GpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics *graphics, GpRect *rect)
+{
+ TRACE("(%p, %p)\n", graphics, rect);
+
+ if(!graphics)
+ return InvalidParameter;
+
+ if(graphics->busy)
+ return ObjectBusy;
+
+ return GdipGetRegionBoundsI(graphics->clip, graphics, rect);
}
/* FIXME: Compositing mode is not used anywhere except the getter/setter. */
@@ -3057,6 +3110,29 @@
return GdipTranslateMatrix(graphics->worldtrans, dx, dy, order);
}
+/*****************************************************************************
+ * GdipSetClipHrgn [GDIPLUS.@]
+ */
+GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics *graphics, HRGN hrgn, CombineMode mode)
+{
+ GpRegion *region;
+ GpStatus status;
+
+ TRACE("(%p, %p, %d)\n", graphics, hrgn, mode);
+
+ if(!graphics)
+ return InvalidParameter;
+
+ status = GdipCreateRegionHrgn(hrgn, ®ion);
+ if(status != Ok)
+ return status;
+
+ status = GdipSetClipRegion(graphics, region, mode);
+
+ GdipDeleteRegion(region);
+ return status;
+}
+
GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics *graphics, GpPath *path, CombineMode
mode)
{
TRACE("(%p, %p, %d)\n", graphics, path, mode);
@@ -3318,3 +3394,35 @@
return NULL;
}
+
+/*****************************************************************************
+ * GdipTranslateClip [GDIPLUS.@]
+ */
+GpStatus WINGDIPAPI GdipTranslateClip(GpGraphics *graphics, REAL dx, REAL dy)
+{
+ TRACE("(%p, %.2f, %.2f)\n", graphics, dx, dy);
+
+ if(!graphics)
+ return InvalidParameter;
+
+ if(graphics->busy)
+ return ObjectBusy;
+
+ return GdipTranslateRegion(graphics->clip, dx, dy);
+}
+
+/*****************************************************************************
+ * GdipTranslateClipI [GDIPLUS.@]
+ */
+GpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics *graphics, INT dx, INT dy)
+{
+ TRACE("(%p, %d, %d)\n", graphics, dx, dy);
+
+ if(!graphics)
+ return InvalidParameter;
+
+ if(graphics->busy)
+ return ObjectBusy;
+
+ return GdipTranslateRegion(graphics->clip, (REAL)dx, (REAL)dy);
+}
Modified: trunk/reactos/dll/win32/gdiplus/graphicspath.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/graphics…
==============================================================================
--- trunk/reactos/dll/win32/gdiplus/graphicspath.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdiplus/graphicspath.c [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -723,6 +723,17 @@
if(!path)
return InvalidParameter;
+ /* on zero width/height only start point added */
+ if(width <= 1e-7 || height <= 1e-7){
+ if(!lengthen_path(path, 1))
+ return OutOfMemory;
+ path->pathdata.Points[0].X = x + width / 2.0;
+ path->pathdata.Points[0].Y = y + height / 2.0;
+ path->pathdata.Types[0] = PathPointTypeStart | PathPointTypeCloseSubpath;
+ path->pathdata.Count = 1;
+ return InvalidParameter;
+ }
+
count = arc2polybezier(NULL, x, y, width, height, startAngle, sweepAngle);
if(count == 0)
Modified: trunk/reactos/dll/win32/gdiplus/image.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/image.c?…
==============================================================================
--- trunk/reactos/dll/win32/gdiplus/image.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdiplus/image.c [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -18,6 +18,8 @@
#include <stdarg.h>
+#define NONAMELESSUNION
+
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
@@ -427,6 +429,50 @@
NULL, bitmap);
return ret;
+}
+
+GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON hicon, GpBitmap** bitmap)
+{
+ HICON icon_copy;
+ ICONINFO iinfo;
+ PICTDESC desc;
+
+ TRACE("%p, %p\n", hicon, bitmap);
+
+ if(!bitmap || !GetIconInfo(hicon, &iinfo))
+ return InvalidParameter;
+
+ *bitmap = GdipAlloc(sizeof(GpBitmap));
+ if(!*bitmap) return OutOfMemory;
+
+ icon_copy = CreateIconIndirect(&iinfo);
+
+ if(!icon_copy){
+ GdipFree(*bitmap);
+ return InvalidParameter;
+ }
+
+ desc.cbSizeofstruct = sizeof(PICTDESC);
+ desc.picType = PICTYPE_ICON;
+ desc.u.icon.hicon = icon_copy;
+
+ if(OleCreatePictureIndirect(&desc, &IID_IPicture, TRUE,
+ (LPVOID*) &((*bitmap)->image.picture)) != S_OK){
+ DestroyIcon(icon_copy);
+ GdipFree(*bitmap);
+ return GenericError;
+ }
+
+ (*bitmap)->format = PixelFormat32bppARGB;
+ (*bitmap)->image.type = ImageTypeBitmap;
+ (*bitmap)->image.flags = ImageFlagsNone;
+ (*bitmap)->width = ipicture_pixel_width((*bitmap)->image.picture);
+ (*bitmap)->height = ipicture_pixel_height((*bitmap)->image.picture);
+
+ DeleteObject(iinfo.hbmColor);
+ DeleteObject(iinfo.hbmMask);
+
+ return Ok;
}
GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride,
Modified: trunk/reactos/dll/win32/gdiplus/region.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/region.c…
==============================================================================
--- trunk/reactos/dll/win32/gdiplus/region.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdiplus/region.c [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -567,15 +567,58 @@
return NotImplemented;
}
+
+/******************************************************************************
+ * GdipCreateRegionHrgn [GDIPLUS.@]
+ */
GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region)
{
- FIXME("(%p, %p): stub\n", hrgn, region);
-
- if(!hrgn || !region)
- return InvalidParameter;
-
- *region = NULL;
- return NotImplemented;
+ union {
+ RGNDATA data;
+ char buf[sizeof(RGNDATAHEADER) + sizeof(RECT)];
+ } rdata;
+ DWORD size;
+ GpRectF rectf;
+ GpPath *path;
+ GpStatus stat;
+
+ TRACE("(%p, %p)\n", hrgn, region);
+
+ if(!region || !(size = GetRegionData(hrgn, 0, NULL)))
+ return InvalidParameter;
+
+ if(size > sizeof(RGNDATAHEADER) + sizeof(RECT)){
+ FIXME("Only simple rect regions supported.\n");
+ *region = NULL;
+ return NotImplemented;
+ }
+
+ if(!GetRegionData(hrgn, sizeof(rdata), &rdata.data))
+ return GenericError;
+
+ /* return empty region */
+ if(IsRectEmpty(&rdata.data.rdh.rcBound)){
+ stat = GdipCreateRegion(region);
+ if(stat == Ok)
+ GdipSetEmpty(*region);
+ return stat;
+ }
+
+ rectf.X = (REAL)rdata.data.rdh.rcBound.left;
+ rectf.Y = (REAL)rdata.data.rdh.rcBound.top;
+ rectf.Width = (REAL)rdata.data.rdh.rcBound.right - rectf.X;
+ rectf.Height = (REAL)rdata.data.rdh.rcBound.bottom - rectf.Y;
+
+ stat = GdipCreatePath(FillModeAlternate, &path);
+ if(stat != Ok)
+ return stat;
+
+ GdipAddPathRectangle(path, rectf.X, rectf.Y, rectf.Width, rectf.Height);
+
+ stat = GdipCreateRegionPath(path, region);
+ GdipDeletePath(path);
+
+ return stat;
}
GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region)
@@ -591,18 +634,66 @@
return Ok;
}
+/*****************************************************************************
+ * GdipGetRegionBounds [GDIPLUS.@]
+ */
GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics, GpRectF
*rect)
{
- FIXME("(%p, %p, %p): stub\n", region, graphics, rect);
-
- return NotImplemented;
-}
-
+ HRGN hrgn;
+ RECT r;
+ GpStatus status;
+
+ TRACE("(%p, %p, %p)\n", region, graphics, rect);
+
+ if(!region || !graphics || !rect)
+ return InvalidParameter;
+
+ status = GdipGetRegionHRgn(region, graphics, &hrgn);
+ if(status != Ok)
+ return status;
+
+ /* infinite */
+ if(!hrgn){
+ rect->X = rect->Y = -(REAL)(1 << 22);
+ rect->Width = rect->Height = (REAL)(1 << 23);
+ return Ok;
+ }
+
+ if(!GetRgnBox(hrgn, &r)){
+ DeleteObject(hrgn);
+ return GenericError;
+ }
+
+ rect->X = r.left;
+ rect->Y = r.top;
+ rect->Width = r.right - r.left;
+ rect->Height = r.bottom - r.top;
+
+ return Ok;
+}
+
+/*****************************************************************************
+ * GdipGetRegionBoundsI [GDIPLUS.@]
+ */
GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion *region, GpGraphics *graphics, GpRect
*rect)
{
- FIXME("(%p, %p, %p): stub\n", region, graphics, rect);
-
- return NotImplemented;
+ GpRectF rectf;
+ GpStatus status;
+
+ TRACE("(%p, %p, %p)\n", region, graphics, rect);
+
+ if(!rect)
+ return InvalidParameter;
+
+ status = GdipGetRegionBounds(region, graphics, &rectf);
+ if(status == Ok){
+ rect->X = roundr(rectf.X);
+ rect->Y = roundr(rectf.X);
+ rect->Width = roundr(rectf.Width);
+ rect->Height = roundr(rectf.Height);
+ }
+
+ return status;
}
static inline void write_dword(DWORD* location, INT* offset, const DWORD write)
@@ -963,12 +1054,39 @@
return Ok;
}
+/*****************************************************************************
+ * GdipIsEqualRegion [GDIPLUS.@]
+ */
GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *region, GpRegion *region2, GpGraphics
*graphics,
BOOL *res)
{
- FIXME("(%p, %p, %p, %p): stub\n", region, region2, graphics, res);
-
- return NotImplemented;
+ HRGN hrgn1, hrgn2;
+ GpStatus stat;
+
+ TRACE("(%p, %p, %p, %p)\n", region, region2, graphics, res);
+
+ if(!region || !region2 || !graphics || !res)
+ return InvalidParameter;
+
+ stat = GdipGetRegionHRgn(region, graphics, &hrgn1);
+ if(stat != Ok)
+ return stat;
+ stat = GdipGetRegionHRgn(region2, graphics, &hrgn2);
+ if(stat != Ok){
+ DeleteObject(hrgn1);
+ return stat;
+ }
+
+ *res = EqualRgn(hrgn1, hrgn2);
+
+ /* one of GpRegions is infinite */
+ if(*res == ERROR)
+ *res = (!hrgn1 && !hrgn2);
+
+ DeleteObject(hrgn1);
+ DeleteObject(hrgn2);
+
+ return Ok;
}
/*****************************************************************************
@@ -1027,16 +1145,54 @@
return NotImplemented;
}
+/* Translates GpRegion elements with specified offsets */
+static void translate_region_element(region_element* element, REAL dx, REAL dy)
+{
+ INT i;
+
+ switch(element->type)
+ {
+ case RegionDataEmptyRect:
+ case RegionDataInfiniteRect:
+ return;
+ case RegionDataRect:
+ element->elementdata.rect.X += dx;
+ element->elementdata.rect.Y += dy;
+ return;
+ case RegionDataPath:
+ for(i = 0; i < element->elementdata.pathdata.path->pathdata.Count;
i++){
+ element->elementdata.pathdata.path->pathdata.Points[i].X += dx;
+ element->elementdata.pathdata.path->pathdata.Points[i].Y += dy;
+ }
+ return;
+ default:
+ translate_region_element(element->elementdata.combine.left, dx, dy);
+ translate_region_element(element->elementdata.combine.right, dx, dy);
+ return;
+ }
+}
+
+/*****************************************************************************
+ * GdipTranslateRegion [GDIPLUS.@]
+ */
GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *region, REAL dx, REAL dy)
{
- FIXME("(%p, %f, %f): stub\n", region, dx, dy);
-
- return NotImplemented;
-}
-
+ TRACE("(%p, %f, %f)\n", region, dx, dy);
+
+ if(!region)
+ return InvalidParameter;
+
+ translate_region_element(®ion->node, dx, dy);
+
+ return Ok;
+}
+
+/*****************************************************************************
+ * GdipTranslateRegionI [GDIPLUS.@]
+ */
GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *region, INT dx, INT dy)
{
- FIXME("(%p, %d, %d): stub\n", region, dx, dy);
-
- return NotImplemented;
-}
+ TRACE("(%p, %d, %d)\n", region, dx, dy);
+
+ return GdipTranslateRegion(region, (REAL)dx, (REAL)dy);
+}
Modified: trunk/reactos/dll/win32/gdiplus/stringformat.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/stringfo…
==============================================================================
--- trunk/reactos/dll/win32/gdiplus/stringformat.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdiplus/stringformat.c [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -284,9 +284,12 @@
return Ok;
}
-GpStatus WINGDIPAPI GdipSetStringFormatFlags(GDIPCONST GpStringFormat *format, INT
flags)
-{
- FIXME("format (%p) flags (%d)\n", format, flags);
+GpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat *format, INT flags)
+{
+ if(!format)
+ return InvalidParameter;
+
+ format->attr = flags;
return Ok;
}
Modified: trunk/reactos/include/psdk/gdiplusflat.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/gdiplusflat.h…
==============================================================================
--- trunk/reactos/include/psdk/gdiplusflat.h [iso-8859-1] (original)
+++ trunk/reactos/include/psdk/gdiplusflat.h [iso-8859-1] Sat Feb 14 02:14:34 2009
@@ -49,6 +49,7 @@
GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**);
GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**);
GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP, HPALETTE, GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON, GpBitmap**);
GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**);
GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*,
GpBitmap**);
@@ -189,6 +190,8 @@
GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT);
GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*);
GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*);
+GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics*,GpRect*);
GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*);
GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);
GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*);
@@ -221,6 +224,7 @@
GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);
GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode);
GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);
GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);
GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);
@@ -239,6 +243,8 @@
GpPointF *, INT);
GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace,
GpCoordinateSpace,
GpPoint *, INT);
+GpStatus WINGDIPAPI GdipTranslateClip(GpGraphics*,REAL,REAL);
+GpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics*,INT,INT);
GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
/* GraphicsPath */
@@ -561,6 +567,7 @@
GpStringFormat*, INT, GDIPCONST CharacterRange*);
GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST
REAL*);
GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming);
+GpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat*, INT);
GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **);
GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **);