Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:hiberis:wix
mingw32-cairo
cairo-1.10.2-print.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File cairo-1.10.2-print.patch of Package mingw32-cairo
diff -Naur cairo-1.10.2.orig/src/cairo-win32-printing-surface.c cairo-1.10.2/src/cairo-win32-printing-surface.c --- cairo-1.10.2.orig/src/cairo-win32-printing-surface.c 2010-12-25 15:21:34.000000000 +0100 +++ cairo-1.10.2/src/cairo-win32-printing-surface.c 2011-07-15 12:42:15.956451675 +0200 @@ -611,7 +611,7 @@ RECT clip; const cairo_color_t *background_color; const unsigned char *mime_data; - unsigned long mime_size; + unsigned long mime_size = 0; cairo_image_info_t mime_info; cairo_bool_t use_mime; DWORD mime_type; @@ -726,6 +726,7 @@ } oldmode = SetStretchBltMode(surface->dc, HALFTONE); + SetBrushOrgEx(surface->dc, 0, 0, NULL); GetClipBox (surface->dc, &clip); if (extend == CAIRO_EXTEND_REPEAT || extend == CAIRO_EXTEND_REFLECT) { @@ -742,7 +743,7 @@ for (y_tile = top; y_tile < bottom; y_tile++) { for (x_tile = left; x_tile < right; x_tile++) { - if (!StretchDIBits (surface->dc, + int success = StretchDIBits (surface->dc, x_tile*opaque_image->width, y_tile*opaque_image->height, opaque_image->width, @@ -752,10 +753,40 @@ use_mime ? mime_info.width : opaque_image->width, use_mime ? mime_info.height : opaque_image->height, use_mime ? mime_data : opaque_image->data, - &bi, + &bi, DIB_RGB_COLORS, - SRCCOPY)) - { + SRCCOPY); + + if (!success && !use_mime) { + // Fallback for when StretchDIBits fails: devide up the + // bitmap source in strips and stretch the pieces individually. + const int maxstripsize = 128; + int todo, stripsize, strip; + strip = 0; + todo = opaque_image->height; + while (todo) { + stripsize = min(maxstripsize, todo); + bi.bmiHeader.biHeight = -stripsize; + success = StretchDIBits (surface->dc, + x_tile*opaque_image->width, + y_tile*opaque_image->height + strip*maxstripsize, + opaque_image->width, + stripsize, + 0, + 0, + opaque_image->width, + stripsize, + opaque_image->data + + opaque_image->width*strip*maxstripsize*(32/8), + &bi, + DIB_RGB_COLORS, + SRCCOPY); + if (!success) break; + todo -= stripsize; + strip++; + } + } + if (!success) { status = _cairo_win32_print_gdi_error ("_cairo_win32_printing_surface_paint(StretchDIBits)"); goto CLEANUP_OPAQUE_IMAGE; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor