--- cairo-win32-surface.c 2006-03-17 15:48:56.000000000 +0500 +++ cairo-win32-surface.c.new 2006-03-17 15:50:16.000000000 +0500 @@ -566,6 +566,7 @@ { static unsigned alpha_blend_checked = FALSE; static cairo_alpha_blend_func_t alpha_blend = NULL; + cairo_rectangle_t rectangle; BLENDFUNCTION blend_function; @@ -583,7 +584,7 @@ if (VER_PLATFORM_WIN32_WINDOWS != os.dwPlatformId || os.dwMajorVersion != 4 || os.dwMinorVersion != 10) { - HMODULE msimg32_dll = LoadLibrary ("msimg32"); + HMODULE msimg32_dll = LoadLibraryA ("msimg32"); if (msimg32_dll != NULL) alpha_blend = (cairo_alpha_blend_func_t)GetProcAddress (msimg32_dll, @@ -601,6 +602,11 @@ blend_function.SourceConstantAlpha = alpha; blend_function.AlphaFormat = src->format == CAIRO_FORMAT_ARGB32 ? AC_SRC_ALPHA : 0; + _cairo_surface_get_extents (src, &rectangle); + if (src_x<0) dst_x-=src_x, src_x=0; + if (src_y<0) dst_y-=src_y, src_y=0; + width=min(width, rectangle.width-src_x); + height=min(height, rectangle.height-src_y); if (!alpha_blend (dst->dc, dst_x, dst_y, width, height,