ddrawex: Make the GetDC test more generic.
[wine] / dlls / wing32 / wing32.c
1 /*
2  * WinG support
3  *
4  * Copyright 2007 Dmitry Timoshkov
5  *
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.
10  *
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.
15  *
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #include <stdarg.h>
22
23 #include "windef.h"
24 #include "winbase.h"
25 #include "wingdi.h"
26 #include "winuser.h"
27
28 /***********************************************************************
29  *           WinGCreateDC   (WING32.@)
30  */
31 HDC WINAPI WinGCreateDC( void )
32 {
33     return CreateCompatibleDC( 0 );
34 }
35
36 /***********************************************************************
37  *           WinGRecommendDIBFormat   (WING32.@)
38  */
39 BOOL WINAPI WinGRecommendDIBFormat( BITMAPINFO *bmi )
40 {
41     if (!bmi) return FALSE;
42
43     bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
44     bmi->bmiHeader.biWidth = 320;
45     bmi->bmiHeader.biHeight = -1;
46     bmi->bmiHeader.biPlanes = 1;
47     bmi->bmiHeader.biBitCount = 8;
48     bmi->bmiHeader.biCompression = BI_RGB;
49     bmi->bmiHeader.biSizeImage = 0;
50     bmi->bmiHeader.biXPelsPerMeter = 0;
51     bmi->bmiHeader.biYPelsPerMeter = 0;
52     bmi->bmiHeader.biClrUsed = 0;
53     bmi->bmiHeader.biClrImportant = 0;
54
55     return TRUE;
56 }
57
58 /***********************************************************************
59  *           WinGCreateBitmap   (WING32.@)
60  */
61 HBITMAP WINAPI WinGCreateBitmap( HDC hdc, BITMAPINFO *bmi, void **bits )
62 {
63     return CreateDIBSection( hdc, bmi, 0, bits, 0, 0 );
64 }
65
66 /***********************************************************************
67  *           WinGGetDIBPointer   (WING32.@)
68  */
69 void * WINAPI WinGGetDIBPointer( HBITMAP hbmp, BITMAPINFO *bmi )
70 {
71     DIBSECTION ds;
72
73     if (GetObjectW( hbmp, sizeof(ds), &ds ) == sizeof(ds))
74     {
75         memcpy( &bmi->bmiHeader, &ds.dsBmih, sizeof(*bmi) );
76         return ds.dsBm.bmBits;
77     }
78     return NULL;
79 }
80
81 /***********************************************************************
82  *           WinGSetDIBColorTable   (WING32.@)
83  */
84 UINT WINAPI WinGSetDIBColorTable( HDC hdc, UINT start, UINT end, RGBQUAD *colors )
85 {
86     return SetDIBColorTable( hdc, start, end, colors );
87 }
88
89 /***********************************************************************
90  *           WinGGetDIBColorTable   (WING32.@)
91  */
92 UINT WINAPI WinGGetDIBColorTable( HDC hdc, UINT start, UINT end, RGBQUAD *colors )
93 {
94     return GetDIBColorTable( hdc, start, end, colors );
95 }
96
97 /***********************************************************************
98  *           WinGCreateHalfTonePalette   (WING32.@)
99  */
100 HPALETTE WINAPI WinGCreateHalfTonePalette( void )
101 {
102     HDC hdc;
103     HPALETTE hpal;
104
105     hdc = GetDC( 0 );
106     hpal = CreateHalftonePalette( hdc );
107     ReleaseDC( 0, hdc );
108
109     return hpal;
110 }
111
112 /***********************************************************************
113  *           WinGCreateHalfToneBrush   (WING32.@)
114  */
115 HBRUSH WINAPI WinGCreateHalfToneBrush( HDC hdc, COLORREF color, INT type )
116 {
117     return CreateSolidBrush( color );
118 }
119
120 /***********************************************************************
121  *           WinGStretchBlt   (WING32.@)
122  */
123 BOOL WINAPI WinGStretchBlt( HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst,
124                             HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc )
125 {
126     INT old_blt_mode;
127     BOOL ret;
128
129     old_blt_mode = SetStretchBltMode( hdcDst, COLORONCOLOR );
130     ret = StretchBlt( hdcDst, xDst, yDst, widthDst, heightDst,
131                       hdcSrc, xSrc, ySrc, widthSrc, heightSrc, SRCCOPY );
132     SetStretchBltMode( hdcDst, old_blt_mode );
133     return ret;
134 }
135
136 /***********************************************************************
137  *           WinGBitBlt   (WING32.@)
138  */
139 BOOL WINAPI WinGBitBlt( HDC hdcDst, INT xDst, INT yDst, INT width,
140                         INT height, HDC hdcSrc, INT xSrc, INT ySrc )
141 {
142     return BitBlt( hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc, SRCCOPY );
143 }