/****************************************************************** * StartDocW [GDI32.@] * * StartDoc calls the STARTDOC Escape with the input data pointing to DocName * and the output data (which is used as a second input parameter).pointing at * the whole docinfo structure. This seems to be an undocumented feature of * the STARTDOC Escape. * * Note: we now do it the other way, with the STARTDOC Escape calling StartDoc. */ INT WINAPI StartDocW(HDC hdc, const DOCINFOW* doc) { INT ret = 0; DC *dc = get_dc_ptr( hdc ); TRACE("DocName = %s Output = %s Datatype = %s\n", debugstr_w(doc->lpszDocName), debugstr_w(doc->lpszOutput), debugstr_w(doc->lpszDatatype)); if(!dc) return SP_ERROR; if (dc->funcs->pStartDoc) ret = dc->funcs->pStartDoc( dc->physDev, doc ); release_dc_ptr( dc ); return ret; }
/*********************************************************************** * GetNearestColor [GDI32.@] * * Gets a system color to match. * * RETURNS * Success: Color from system palette that corresponds to given color * Failure: CLR_INVALID */ COLORREF WINAPI GetNearestColor( HDC hdc, /* [in] Handle of device context */ COLORREF color) /* [in] Color to be matched */ { COLORREF nearest = CLR_INVALID; DC *dc; if ((dc = get_dc_ptr( hdc ))) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pGetNearestColor ); nearest = physdev->funcs->pGetNearestColor( physdev, color ); release_dc_ptr( dc ); } return nearest; }
/*********************************************************************** * SetBrushOrgEx (GDI32.@) * * Set the brush origin for a device context. * * PARAMS * hdc [I] Device context to set the brush origin for * x [I] New x origin * y [I] New y origin * oldorg [O] If non NULL, destination for previously set brush origin. * * RETURNS * Success: TRUE. The origin is set to (x,y), and oldorg is updated if given. */ BOOL WINAPI SetBrushOrgEx( HDC hdc, INT x, INT y, LPPOINT oldorg ) { DC *dc = get_dc_ptr( hdc ); if (!dc) return FALSE; if (oldorg) { oldorg->x = dc->brushOrgX; oldorg->y = dc->brushOrgY; } dc->brushOrgX = x; dc->brushOrgY = y; release_dc_ptr( dc ); return TRUE; }
/****************************************************************************** * ExtSelectClipRgn [GDI32.@] */ INT WINAPI ExtSelectClipRgn( HDC hdc, HRGN hrgn, INT fnMode ) { PHYSDEV physdev; INT retval; DC * dc = get_dc_ptr( hdc ); TRACE("%p %p %d\n", hdc, hrgn, fnMode ); if (!dc) return ERROR; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pExtSelectClipRgn ); retval = physdev->funcs->pExtSelectClipRgn( physdev, hrgn, fnMode ); release_dc_ptr( dc ); return retval; }
/*********************************************************************** * OffsetClipRgn (GDI32.@) */ INT WINAPI OffsetClipRgn( HDC hdc, INT x, INT y ) { PHYSDEV physdev; INT ret; DC *dc = get_dc_ptr( hdc ); TRACE("%p %d,%d\n", hdc, x, y ); if (!dc) return ERROR; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pOffsetClipRgn ); ret = physdev->funcs->pOffsetClipRgn( physdev, x, y ); release_dc_ptr( dc ); return ret; }
/********************************************************************** * PolyPolyline (GDI32.@) */ BOOL WINAPI PolyPolyline( HDC hdc, const POINT* pt, const DWORD* counts, DWORD polylines ) { BOOL ret = FALSE; DC * dc = get_dc_ptr( hdc ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pPolyPolyline ); update_dc( dc ); ret = physdev->funcs->pPolyPolyline( physdev, pt, counts, polylines ); release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * PolyDraw (GDI32.@) */ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes, DWORD cCount) { DC *dc = get_dc_ptr( hdc ); PHYSDEV physdev; BOOL result; if(!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pPolyDraw ); result = physdev->funcs->pPolyDraw( physdev, lppt, lpbTypes, cCount ); release_dc_ptr( dc ); return result; }
/*********************************************************************** * SetPixelV (GDI32.@) */ BOOL WINAPI SetPixelV( HDC hdc, INT x, INT y, COLORREF color ) { BOOL ret = FALSE; DC * dc = get_dc_ptr( hdc ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetPixel ); update_dc( dc ); physdev->funcs->pSetPixel( physdev, x, y, color ); ret = TRUE; release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * FrameRgn (GDI32.@) */ BOOL WINAPI FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush, INT nWidth, INT nHeight ) { BOOL ret = FALSE; DC *dc = get_dc_ptr( hdc ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pFrameRgn ); update_dc( dc ); ret = physdev->funcs->pFrameRgn( physdev, hrgn, hbrush, nWidth, nHeight ); release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * RoundRect (GDI32.@) */ BOOL WINAPI RoundRect( HDC hdc, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height ) { BOOL ret = FALSE; DC *dc = get_dc_ptr( hdc ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pRoundRect ); update_dc( dc ); ret = physdev->funcs->pRoundRect( physdev, left, top, right, bottom, ell_width, ell_height ); release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * Rectangle (GDI32.@) */ BOOL WINAPI Rectangle( HDC hdc, INT left, INT top, INT right, INT bottom ) { BOOL ret = FALSE; DC * dc = get_dc_ptr( hdc ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pRectangle ); update_dc( dc ); ret = physdev->funcs->pRectangle( physdev, left, top, right, bottom ); release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * Chord (GDI32.@) */ BOOL WINAPI Chord( HDC hdc, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) { BOOL ret; PHYSDEV physdev; DC * dc = get_dc_ptr( hdc ); if (!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pChord ); ret = physdev->funcs->pChord( physdev, left, top, right, bottom, xstart, ystart, xend, yend ); release_dc_ptr( dc ); return ret; }
/*********************************************************************** * IntersectClipRect (GDI32.@) */ INT WINAPI IntersectClipRect( HDC hdc, INT left, INT top, INT right, INT bottom ) { PHYSDEV physdev; INT ret; DC *dc = get_dc_ptr( hdc ); TRACE("%p %d,%d - %d,%d\n", hdc, left, top, right, bottom ); if (!dc) return ERROR; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pIntersectClipRect ); ret = physdev->funcs->pIntersectClipRect( physdev, left, top, right, bottom ); release_dc_ptr( dc ); return ret; }
/****************************************************************** * EndPage [GDI32.@] * */ INT WINAPI EndPage(HDC hdc) { INT ret = 0; DC *dc = get_dc_ptr( hdc ); if(!dc) return SP_ERROR; if (dc->funcs->pEndPage) ret = dc->funcs->pEndPage( dc->physDev ); if (dc->pAbortProc && !dc->pAbortProc( hdc, 0 )) { EndDoc( hdc ); ret = 0; } release_dc_ptr( dc ); return ret; }
/*********************************************************************** * SetMapMode (GDI32.@) */ INT WINAPI SetMapMode( HDC hdc, INT mode ) { INT ret = 0; DC * dc = get_dc_ptr( hdc ); TRACE("%p %d\n", hdc, mode ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetMapMode ); ret = physdev->funcs->pSetMapMode( physdev, mode ); release_dc_ptr( dc ); } return ret; }
/**************************************************************************** * ModifyWorldTransform (GDI32.@) */ BOOL WINAPI ModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode ) { BOOL ret = FALSE; DC *dc; if (!xform && mode != MWT_IDENTITY) return FALSE; if ((dc = get_dc_ptr( hdc ))) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pModifyWorldTransform ); if (dc->GraphicsMode == GM_ADVANCED) ret = physdev->funcs->pModifyWorldTransform( physdev, xform, mode ); release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * GetClipRgn (GDI32.@) */ INT WINAPI GetClipRgn( HDC hdc, HRGN hRgn ) { INT ret = -1; DC * dc; if (hRgn && (dc = get_dc_ptr( hdc ))) { if( dc->hClipRgn ) { if( CombineRgn(hRgn, dc->hClipRgn, 0, RGN_COPY) != ERROR ) ret = 1; } else ret = 0; release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * BRUSH_SelectObject */ static HGDIOBJ BRUSH_SelectObject( HGDIOBJ handle, HDC hdc ) { BRUSHOBJ *brush; HGDIOBJ ret = 0; DC *dc = get_dc_ptr( hdc ); if (!dc) { SetLastError( ERROR_INVALID_HANDLE ); return 0; } if ((brush = GDI_GetObjPtr( handle, OBJ_BRUSH ))) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSelectBrush ); HBITMAP bitmap = brush->bitmap; BITMAPINFO *info; void *bits; UINT usage; if (bitmap && !brush->info) { BITMAPOBJ *bmp = GDI_GetObjPtr( bitmap, OBJ_BITMAP ); /* fetch the bitmap bits if we are selecting into a different type of DC */ if (bmp && bmp->funcs != physdev->funcs) store_bitmap_bits( brush, bmp ); GDI_ReleaseObj( bitmap ); } info = brush->info; bits = brush->bits.ptr; usage = brush->usage; GDI_inc_ref_count( handle ); GDI_ReleaseObj( handle ); if (!physdev->funcs->pSelectBrush( physdev, handle, bitmap, info, bits, usage )) { GDI_dec_ref_count( handle ); } else { ret = dc->hBrush; dc->hBrush = handle; GDI_dec_ref_count( ret ); } } release_dc_ptr( dc ); return ret; }
/*********************************************************************** * FrameRgn (GDI32.@) */ BOOL WINAPI FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush, INT nWidth, INT nHeight ) { PHYSDEV physdev; BOOL ret; DC *dc = get_dc_ptr( hdc ); TRACE( "%p, %p, %p, %dx%d\n", hdc, hrgn, hbrush, nWidth, nHeight ); if (!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pFrameRgn ); ret = physdev->funcs->pFrameRgn( physdev, hrgn, hbrush, nWidth, nHeight ); release_dc_ptr( dc ); return ret; }
/*********************************************************************** * RoundRect (GDI32.@) */ BOOL WINAPI RoundRect( HDC hdc, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height ) { PHYSDEV physdev; BOOL ret; DC *dc = get_dc_ptr( hdc ); TRACE( "%p, (%d, %d)-(%d, %d), %dx%d\n", hdc, left, top, right, bottom, ell_width, ell_height ); if (!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pRoundRect ); ret = physdev->funcs->pRoundRect( physdev, left, top, right, bottom, ell_width, ell_height ); release_dc_ptr( dc ); return ret; }
/*********************************************************************** * Rectangle (GDI32.@) */ BOOL WINAPI Rectangle( HDC hdc, INT left, INT top, INT right, INT bottom ) { PHYSDEV physdev; BOOL ret; DC * dc = get_dc_ptr( hdc ); TRACE( "%p, (%d, %d)-(%d, %d)\n", hdc, left, top, right, bottom ); if (!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pRectangle ); ret = physdev->funcs->pRectangle( physdev, left, top, right, bottom ); release_dc_ptr( dc ); return ret; }
/********************************************************************** * ExtFloodFill (GDI32.@) */ BOOL WINAPI ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, UINT fillType ) { BOOL ret = FALSE; DC * dc = get_dc_ptr( hdc ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pExtFloodFill ); update_dc( dc ); ret = physdev->funcs->pExtFloodFill( physdev, x, y, color, fillType ); release_dc_ptr( dc ); } return ret; }
/****************************************************************************** * GdiSwapBuffers [GDI32.@] * * Probably not the correct semantics, it's supposed to be an internal backend for SwapBuffers. */ BOOL WINAPI GdiSwapBuffers( HDC hdc ) { INT bRet = FALSE; DC * dc = get_dc_ptr( hdc ); TRACE("(%p)\n",hdc); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSwapBuffers ); update_dc( dc ); bRet = physdev->funcs->pSwapBuffers( physdev ); release_dc_ptr( dc ); } return bRet; }
/*********************************************************************** * Arc (GDI32.@) */ BOOL WINAPI Arc( HDC hdc, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) { BOOL ret = FALSE; DC * dc = get_dc_ptr( hdc ); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pArc ); update_dc( dc ); ret = physdev->funcs->pArc( physdev, left, top, right, bottom, xstart, ystart, xend, yend ); release_dc_ptr( dc ); } return ret; }
/*********************************************************************** * wglCreateContext (OPENGL32.@) */ HGLRC WINAPI wglCreateContext(HDC hdc) { HGLRC ret = 0; DC * dc = get_dc_ptr( hdc ); TRACE("(%p)\n",hdc); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pwglCreateContext ); update_dc( dc ); ret = physdev->funcs->pwglCreateContext( physdev ); release_dc_ptr( dc ); } return ret; }
/************************************************************************************** * WINE-specific wglSetPixelFormat which can set the iPixelFormat multiple times * */ static BOOL WINAPI wglSetPixelFormatWINE(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) { INT bRet = FALSE; DC * dc = get_dc_ptr( hdc ); TRACE("(%p,%d,%p)\n", hdc, iPixelFormat, ppfd); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pwglSetPixelFormatWINE ); update_dc( dc ); bRet = physdev->funcs->pwglSetPixelFormatWINE( physdev, iPixelFormat, ppfd ); release_dc_ptr( dc ); } return bRet; }
/*********************************************************************** * wglCreateContextAttribsARB */ static HGLRC WINAPI wglCreateContextAttribsARB(HDC hdc, HGLRC hShareContext, const int *attributeList) { HGLRC ret = 0; DC * dc = get_dc_ptr( hdc ); TRACE("(%p)\n",hdc); if (dc) { PHYSDEV physdev = GET_DC_PHYSDEV( dc, pwglCreateContextAttribsARB ); update_dc( dc ); ret = physdev->funcs->pwglCreateContextAttribsARB( physdev, hShareContext, attributeList ); release_dc_ptr( dc ); } return ret; }
/********************************************************************** * PolyPolyline (GDI32.@) */ BOOL WINAPI PolyPolyline( HDC hdc, const POINT* pt, const DWORD* counts, DWORD polylines ) { PHYSDEV physdev; BOOL ret; DC * dc = get_dc_ptr( hdc ); TRACE( "%p, %p, %p, %u\n", hdc, pt, counts, polylines ); if (!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pPolyPolyline ); ret = physdev->funcs->pPolyPolyline( physdev, pt, counts, polylines ); release_dc_ptr( dc ); return ret; }
/********************************************************************** * ExtFloodFill (GDI32.@) */ BOOL WINAPI ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, UINT fillType ) { PHYSDEV physdev; BOOL ret; DC * dc = get_dc_ptr( hdc ); TRACE( "%p, (%d, %d), %08x, %x\n", hdc, x, y, color, fillType ); if (!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pExtFloodFill ); ret = physdev->funcs->pExtFloodFill( physdev, x, y, color, fillType ); release_dc_ptr( dc ); return ret; }
/****************************************************************************** * ExtSelectClipRgn [GDI32.@] */ INT WINAPI ExtSelectClipRgn( HDC hdc, HRGN hrgn, INT fnMode ) { INT retval; RECT rect; DC * dc = get_dc_ptr( hdc ); if (!dc) return ERROR; TRACE("%p %p %d\n", hdc, hrgn, fnMode ); update_dc( dc ); if (dc->funcs->pExtSelectClipRgn) { retval = dc->funcs->pExtSelectClipRgn( dc->physDev, hrgn, fnMode ); release_dc_ptr( dc ); return retval; } if (!hrgn) { if (fnMode == RGN_COPY) { if (dc->hClipRgn) DeleteObject( dc->hClipRgn ); dc->hClipRgn = 0; } else { FIXME("Unimplemented: hrgn NULL in mode: %d\n", fnMode); release_dc_ptr( dc ); return ERROR; } } else { if (!dc->hClipRgn) create_default_clip_region( dc ); if(fnMode == RGN_COPY) CombineRgn( dc->hClipRgn, hrgn, 0, fnMode ); else CombineRgn( dc->hClipRgn, dc->hClipRgn, hrgn, fnMode); } CLIPPING_UpdateGCRegion( dc ); release_dc_ptr( dc ); return GetClipBox(hdc, &rect); }