static DWORD windrv_GetImage( PHYSDEV dev, BITMAPINFO *info, struct gdi_image_bits *bits, struct bitblt_coords *src ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); DWORD ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pGetImage ); ret = dev->funcs->pGetImage( dev, info, bits, src ); /* don't return alpha if original surface doesn't support it */ if (info->bmiHeader.biBitCount == 32 && info->bmiHeader.biCompression == BI_RGB && physdev->dibdrv->dib.compression == BI_BITFIELDS) { DWORD *colors = (DWORD *)info->bmiColors; colors[0] = 0xff0000; colors[1] = 0x00ff00; colors[2] = 0x0000ff; info->bmiHeader.biCompression = BI_BITFIELDS; } if (!bits->is_copy) { /* use the freeing callback to unlock the surface */ assert( !bits->free ); bits->free = unlock_bits_surface; bits->param = physdev->surface; } else unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pPatBlt ); ret = dev->funcs->pPatBlt( dev, dst, rop ); unlock_surface( physdev->surface ); return ret; }
void set_blue(SDL_Surface *surface, int x, int y, Uint32 color) { lock_surface(surface); SDL_PixelFormat *fmt; fmt = surface->format; Uint32 *pixels = (Uint32 * )surface->pixels; set_color(x, y, surface->w, color, pixels, fmt->Bmask, fmt->Bshift, fmt->Bloss); unlock_surface(surface); }
static BOOL windrv_PaintRgn( PHYSDEV dev, HRGN rgn ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pPaintRgn ); ret = dev->funcs->pPaintRgn( dev, rgn ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_PolyPolygon( PHYSDEV dev, const POINT *points, const INT *counts, UINT polygons ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pPolyPolygon ); ret = dev->funcs->pPolyPolygon( dev, points, counts, polygons ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pRectangle ); ret = dev->funcs->pRectangle( dev, left, top, right, bottom ); unlock_surface( physdev->surface ); return ret; }
static COLORREF windrv_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); COLORREF ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pSetPixel ); ret = dev->funcs->pSetPixel( dev, x, y, color ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_LineTo( PHYSDEV dev, INT x, INT y ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pLineTo ); ret = dev->funcs->pLineTo( dev, x, y ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT type ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pExtFloodFill ); ret = dev->funcs->pExtFloodFill( dev, x, y, color, type ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_Polyline( PHYSDEV dev, const POINT *points, INT count ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pPolyline ); ret = dev->funcs->pPolyline( dev, points, count ); unlock_surface( physdev->surface ); return ret; }
static DWORD windrv_BlendImage( PHYSDEV dev, BITMAPINFO *info, const struct gdi_image_bits *bits, struct bitblt_coords *src, struct bitblt_coords *dst, BLENDFUNCTION blend ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); DWORD ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pBlendImage ); ret = dev->funcs->pBlendImage( dev, info, bits, src, dst, blend ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert, void * grad_array, ULONG ngrad, ULONG mode ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pGradientFill ); ret = dev->funcs->pGradientFill( dev, vert_array, nvert, grad_array, ngrad, mode ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect, LPCWSTR str, UINT count, const INT *dx ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pExtTextOut ); ret = dev->funcs->pExtTextOut( dev, x, y, flags, rect, str, count, dx ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pPie ); ret = dev->funcs->pPie( dev, left, top, right, bottom, xstart, ystart, xend, yend ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_AlphaBlend( PHYSDEV dst_dev, struct bitblt_coords *dst, PHYSDEV src_dev, struct bitblt_coords *src, BLENDFUNCTION func ) { struct windrv_physdev *physdev = get_windrv_physdev( dst_dev ); BOOL ret; lock_surface( physdev->surface ); dst_dev = GET_NEXT_PHYSDEV( dst_dev, pAlphaBlend ); ret = dst_dev->funcs->pAlphaBlend( dst_dev, dst, src_dev, src, func ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst, PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop ) { struct windrv_physdev *physdev = get_windrv_physdev( dst_dev ); BOOL ret; lock_surface( physdev->surface ); dst_dev = GET_NEXT_PHYSDEV( dst_dev, pStretchBlt ); ret = dst_dev->funcs->pStretchBlt( dst_dev, dst, src_dev, src, rop ); unlock_surface( physdev->surface ); return ret; }
static BOOL windrv_RoundRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); BOOL ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pRoundRect ); ret = dev->funcs->pRoundRect( dev, left, top, right, bottom, ell_width, ell_height ); unlock_surface( physdev->surface ); return ret; }
Uint8 get_blue(SDL_Surface *surface, int x, int y) { lock_surface(surface); SDL_PixelFormat *fmt; fmt = surface->format; Uint32 *pixels = (Uint32 * )surface->pixels; Uint8 retVal = get_color(x, y, surface->w, pixels, fmt->Bmask, fmt->Bshift, fmt->Bloss); unlock_surface(surface); return retVal; }
static DWORD windrv_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info, const struct gdi_image_bits *bits, struct bitblt_coords *src, struct bitblt_coords *dst, DWORD rop ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); DWORD ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pPutImage ); ret = dev->funcs->pPutImage( dev, clip, info, bits, src, dst, rop ); unlock_surface( physdev->surface ); return ret; }
static INT windrv_StretchDIBits( PHYSDEV dev, INT x_dst, INT y_dst, INT width_dst, INT height_dst, INT x_src, INT y_src, INT width_src, INT height_src, const void *bits, BITMAPINFO *src_info, UINT coloruse, DWORD rop ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); INT ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pStretchDIBits ); ret = dev->funcs->pStretchDIBits( dev, x_dst, y_dst, width_dst, height_dst, x_src, y_src, width_src, height_src, bits, src_info, coloruse, rop ); unlock_surface( physdev->surface ); return ret; }
static INT windrv_SetDIBitsToDevice( PHYSDEV dev, INT x_dst, INT y_dst, DWORD cx, DWORD cy, INT x_src, INT y_src, UINT startscan, UINT lines, const void *bits, BITMAPINFO *src_info, UINT coloruse ) { struct windrv_physdev *physdev = get_windrv_physdev( dev ); INT ret; lock_surface( physdev->surface ); dev = GET_NEXT_PHYSDEV( dev, pSetDIBitsToDevice ); ret = dev->funcs->pSetDIBitsToDevice( dev, x_dst, y_dst, cx, cy, x_src, y_src, startscan, lines, bits, src_info, coloruse ); unlock_surface( physdev->surface ); return ret; }
static void unlock_bits_surface( struct gdi_image_bits *bits ) { unlock_surface( bits->param ); }