- if ( ::GetDeviceCaps(GetHdc(), RASTERCAPS) & RC_STRETCHDIB )
- {
- BITMAPINFO *info = (BITMAPINFO *) malloc( sizeof( BITMAPINFOHEADER ) + 256 * sizeof(RGBQUAD ) );
- memset( info, 0, sizeof( BITMAPINFOHEADER ) );
-
-#if wxUSE_DRAWBITMAP_24BITS
- int iBitsSize = (((width * 3) + 3 ) & ~3 ) * height;
-#else
- int iBitsSize = ((width + 3 ) & ~3 ) * height ;
-#endif
-
- void* bits = malloc( iBitsSize );
-
- info->bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
- info->bmiHeader.biWidth = width;
- info->bmiHeader.biHeight = height;
- info->bmiHeader.biPlanes = 1;
-#if wxUSE_DRAWBITMAP_24BITS
- info->bmiHeader.biBitCount = 24;
-#else
- info->bmiHeader.biBitCount = 8;
-#endif
- info->bmiHeader.biCompression = BI_RGB;
-
- ScreenHDC display;
- if ( GetDIBits(display, GetHbitmapOf(bmp), 0,
- bmp.GetHeight(), bits, info,
- DIB_RGB_COLORS) )
- {
- if ( ::StretchDIBits(GetHdc(), x, y,
- width, height,
- 0 , 0, width, height,
- bits, info,
- DIB_RGB_COLORS, SRCCOPY) == GDI_ERROR )
- {
- wxLogLastError(wxT("StretchDIBits"));
- }
- }
-
- free(bits);
- free(info);
- }
- else // no support for StretchDIBits()
+ if ( !(::GetDeviceCaps(GetHdc(), RASTERCAPS) & RC_STRETCHDIB) ||
+ !DrawBitmapUsingStretchDIBits(GetHdc(), bmp, x, y) )