#else
scaledImageSurface = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, destBitmapWidth, destBitmapHeight));
#endif
+ RefPtr<cairo_pattern_t> scaledPattern = adoptRef(cairo_pattern_create_for_surface(image));
+ cairo_matrix_t matrix = { 1 / totalMatrix.xx, 0, 0, 1 / totalMatrix.yy, 0, 0 };
+ cairo_pattern_set_matrix(scaledPattern.get(), &matrix);
+ cairo_pattern_set_extend(scaledPattern.get(), CAIRO_EXTEND_PAD);
+
RefPtr<cairo_t> scaledImageContext = adoptRef(cairo_create(scaledImageSurface.get()));
cairo_set_operator(scaledImageContext.get(), CAIRO_OPERATOR_SOURCE);
- cairo_scale(scaledImageContext.get(), totalMatrix.xx, totalMatrix.yy);
- cairo_set_source_surface(scaledImageContext.get(), image, 0, 0);
+ cairo_set_source(scaledImageContext.get(), scaledPattern.get());
cairo_paint(scaledImageContext.get());
image = scaledImageSurface.get();
}