Supports the ALPHAFUNC and ALPHAREF rendering states.
[wine/multimedia.git] / graphics / bitblt.c
blob2bc095c1789984ae395f5ce69469ceee1e8cbed6
1 /*
2 * GDI bit-blit operations
4 * Copyright 1993, 1994 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "gdi.h"
22 #include "wine/debug.h"
24 WINE_DEFAULT_DEBUG_CHANNEL(bitblt);
27 /***********************************************************************
28 * PatBlt (GDI32.@)
30 BOOL WINAPI PatBlt( HDC hdc, INT left, INT top,
31 INT width, INT height, DWORD rop)
33 DC * dc = DC_GetDCUpdate( hdc );
34 BOOL bRet = FALSE;
36 if (!dc) return FALSE;
38 if (dc->funcs->pPatBlt)
40 TRACE("%p %d,%d %dx%d %06lx\n", hdc, left, top, width, height, rop );
41 bRet = dc->funcs->pPatBlt( dc->physDev, left, top, width, height, rop );
43 GDI_ReleaseObj( hdc );
44 return bRet;
48 /***********************************************************************
49 * BitBlt (GDI32.@)
51 BOOL WINAPI BitBlt( HDC hdcDst, INT xDst, INT yDst, INT width,
52 INT height, HDC hdcSrc, INT xSrc, INT ySrc, DWORD rop )
54 BOOL ret = FALSE;
55 DC *dcDst, *dcSrc;
57 if ((dcSrc = DC_GetDCUpdate( hdcSrc ))) GDI_ReleaseObj( hdcSrc );
58 /* FIXME: there is a race condition here */
59 if ((dcDst = DC_GetDCUpdate( hdcDst )))
61 dcSrc = DC_GetDCPtr( hdcSrc );
62 TRACE("hdcSrc=%p %d,%d %d bpp->hdcDest=%p %d,%d %dx%dx%d rop=%06lx\n",
63 hdcSrc, xSrc, ySrc, dcSrc ? dcSrc->bitsPerPixel : 0,
64 hdcDst, xDst, yDst, width, height, dcDst->bitsPerPixel, rop);
65 if (dcDst->funcs->pBitBlt)
66 ret = dcDst->funcs->pBitBlt( dcDst->physDev, xDst, yDst, width, height,
67 dcSrc ? dcSrc->physDev : NULL, xSrc, ySrc, rop );
68 if (dcSrc) GDI_ReleaseObj( hdcSrc );
69 GDI_ReleaseObj( hdcDst );
71 return ret;
75 /***********************************************************************
76 * StretchBlt (GDI32.@)
78 BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst,
79 INT widthDst, INT heightDst,
80 HDC hdcSrc, INT xSrc, INT ySrc,
81 INT widthSrc, INT heightSrc,
82 DWORD rop )
84 BOOL ret = FALSE;
85 DC *dcDst, *dcSrc;
87 if ((dcSrc = DC_GetDCUpdate( hdcSrc ))) GDI_ReleaseObj( hdcSrc );
88 /* FIXME: there is a race condition here */
89 if ((dcDst = DC_GetDCUpdate( hdcDst )))
91 dcSrc = DC_GetDCPtr( hdcSrc );
93 TRACE("%p %d,%d %dx%dx%d -> %p %d,%d %dx%dx%d rop=%06lx\n",
94 hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
95 dcSrc ? dcSrc->bitsPerPixel : 0, hdcDst, xDst, yDst,
96 widthDst, heightDst, dcDst->bitsPerPixel, rop );
98 if (dcSrc) {
99 if (dcDst->funcs->pStretchBlt)
100 ret = dcDst->funcs->pStretchBlt( dcDst->physDev, xDst, yDst, widthDst, heightDst,
101 dcSrc->physDev, xSrc, ySrc, widthSrc, heightSrc,
102 rop );
103 GDI_ReleaseObj( hdcSrc );
105 GDI_ReleaseObj( hdcDst );
107 return ret;
111 /***********************************************************************
112 * MaskBlt [GDI32.@]
114 BOOL WINAPI MaskBlt(HDC hdcDest, INT nXDest, INT nYDest,
115 INT nWidth, INT nHeight, HDC hdcSource,
116 INT nXSrc, INT nYSrc, HBITMAP hbmMask,
117 INT xMask, INT yMask, DWORD dwRop)
119 FIXME("(%p,%d,%d,%d,%d,%p,%d,%d,%p,%d,%d,%ld): stub\n",
120 hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSource,nXSrc,nYSrc,
121 hbmMask,xMask,yMask,dwRop);
122 return 1;
125 /*********************************************************************
126 * PlgBlt [GDI32.@]
129 BOOL WINAPI PlgBlt( HDC hdcDest, const POINT *lpPoint,
130 HDC hdcSrc, INT nXDest, INT nYDest, INT nWidth,
131 INT nHeight, HBITMAP hbmMask, INT xMask, INT yMask)
133 FIXME("PlgBlt, stub\n");
134 return 1;