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, DIB_RGB_COLORS, 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 bmi->bmiHeader = ds.dsBmih; 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 } 144