Bug 1255320 - Create DrawTarget with DIB as similar DrawTarget r=jrmuizel
--- a/gfx/2d/DrawTargetCairo.cpp
+++ b/gfx/2d/DrawTargetCairo.cpp
@@ -1744,19 +1744,28 @@ DrawTargetCairo::CreateSimilarDrawTarget
{
if (cairo_surface_status(cairo_get_group_target(mContext))) {
RefPtr<DrawTargetCairo> target = new DrawTargetCairo();
if (target->Init(aSize, aFormat)) {
return target.forget();
}
}
- cairo_surface_t* similar = cairo_surface_create_similar(mSurface,
- GfxFormatToCairoContent(aFormat),
- aSize.width, aSize.height);
+ cairo_surface_t* similar;
+#ifdef CAIRO_HAS_WIN32_SURFACE
+ if (cairo_surface_get_type(mSurface) == CAIRO_SURFACE_TYPE_WIN32) {
+ similar = cairo_win32_surface_create_with_dib(GfxFormatToCairoFormat(aFormat),
+ aSize.width, aSize.height);
+ } else
+#endif
+ {
+ similar = cairo_surface_create_similar(mSurface,
+ GfxFormatToCairoContent(aFormat),
+ aSize.width, aSize.height);
+ }
if (!cairo_surface_status(similar)) {
RefPtr<DrawTargetCairo> target = new DrawTargetCairo();
if (target->InitAlreadyReferenced(similar, aSize)) {
return target.forget();
}
}