diff options
Diffstat (limited to 'WebCore/platform/graphics/win/ImageCairoWin.cpp')
-rw-r--r-- | WebCore/platform/graphics/win/ImageCairoWin.cpp | 20 |
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; } |