summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/graphics/win/ImageCairoWin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/graphics/win/ImageCairoWin.cpp')
-rw-r--r--WebCore/platform/graphics/win/ImageCairoWin.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/WebCore/platform/graphics/win/ImageCairoWin.cpp b/WebCore/platform/graphics/win/ImageCairoWin.cpp
index 95bb7bc..06428b8 100644
--- a/WebCore/platform/graphics/win/ImageCairoWin.cpp
+++ b/WebCore/platform/graphics/win/ImageCairoWin.cpp
@@ -47,13 +47,17 @@ bool BitmapImage::getHBITMAPOfSize(HBITMAP bmp, LPSIZE size)
memset(bmpInfo.bmBits, 255, bufferSize);
}
- HDC tempDC = CreateCompatibleDC(0);
- if (!tempDC) {
- LOG_ERROR("Failed to create in-memory DC for Image::blit()");
- return false;
- }
- SelectObject(tempDC, bmp);
- GraphicsContext gc(tempDC);
+ cairo_surface_t* image = cairo_image_surface_create_for_data((unsigned char*)bmpInfo.bmBits,
+ CAIRO_FORMAT_ARGB32,
+ bmpInfo.bmWidth,
+ bmpInfo.bmHeight,
+ bmpInfo.bmWidthBytes);
+
+
+ cairo_t* targetRef = cairo_create(image);
+ cairo_surface_destroy(image);
+
+ GraphicsContext gc(targetRef);
IntSize imageSize = BitmapImage::size();
if (size)
@@ -62,7 +66,7 @@ bool BitmapImage::getHBITMAPOfSize(HBITMAP bmp, LPSIZE size)
draw(&gc, FloatRect(0.0f, 0.0f, bmpInfo.bmWidth, bmpInfo.bmHeight), FloatRect(0.0f, 0.0f, imageSize.width(), imageSize.height()), CompositeCopy);
// Do cleanup
- DeleteDC(tempDC);
+ cairo_destroy(targetRef);
return true;
}