diff --git a/ChangeLog b/ChangeLog index c3304b0..c675de5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,13 @@ 2005-08-20 Fred Kiefer - * Headers/cairo/CairoFaceInfo.h (-fontFace): Use + * Source/cairo/CairoGState.m (-DPSImage::::::::): + For the ARGB32 case sort the colour fields in the bitmap correctly. + +2005-08-20 Fred Kiefer + + * Source/cairo/CairoFaceInfo.m (-fontFace): Use _cairo_toy_font_face_create, as Cairo did rename this function. - * Headers/cairo/CairoFontInfo.h (_cairo_glyph_for_NSGlyph): Use + * Source/cairo/CairoFontInfo.m (_cairo_glyph_for_NSGlyph): Use Cairo function _cairo_scaled_font_text_to_glyphs to convert to glyphs. 2005-08-16 Adrian Robert diff --git a/Source/cairo/CairoGState.m b/Source/cairo/CairoGState.m index ef6d7e0..2a07e85 100644 --- a/Source/cairo/CairoGState.m +++ b/Source/cairo/CairoGState.m @@ -1022,7 +1022,11 @@ _set_op(cairo_t * ct, NSCompositingOperation op) cairo_format_t format; NSAffineTransformStruct tstruct; cairo_surface_t *surface; - + unsigned char *tmp; + int i = 0; + unsigned int pixels = pixelsHigh * pixelsWide; + const unsigned char *bits = data[0]; + /* NSLog(@"%@ DPSimage %dx%d (%p)", self, pixelsWide, pixelsHigh, cairo_current_target_surface (_ct)); @@ -1037,6 +1041,16 @@ _set_op(cairo_t * ct, NSCompositingOperation op) switch (bitsPerSample * samplesPerPixel) { case 32: + tmp = objc_malloc(pixels * 4); + while (i < pixels*4) + { + tmp[i+0] = bits[i+2]; + tmp[i+1] = bits[i+1]; + tmp[i+2] = bits[i+0]; + tmp[i+3] = bits[i+3]; + i += 4; + } + bits = tmp; format = CAIRO_FORMAT_ARGB32; break; case 24: @@ -1063,11 +1077,17 @@ _set_op(cairo_t * ct, NSCompositingOperation op) tstruct.tX, tstruct.tY); cairo_transform(_ct, &local_matrix); - surface = cairo_image_surface_create_for_data((void*)data, + surface = cairo_image_surface_create_for_data((void*)bits, format, pixelsWide, pixelsHigh, bytesPerRow); + + if (bits != data[0]) + { + objc_free(bits); + } + if (surface == NULL) { NSLog(@"Image surface could not be created");