+
+ HDC hdc = (HDC)dc.GetHDC();
+
+ HBITMAP bitmap = (HBITMAP)GetCurrentObject(hdc, OBJ_BITMAP);
+
+ BITMAP info;
+ bool hasBitmap = false;
+
+ // cairo_win32_surface_create creates a 24-bit bitmap,
+ // so if we have alpha, we need to create a 32-bit surface instead.
+ if (!GetObject(bitmap, sizeof(info), &info) || info.bmBitsPixel < 32)
+ m_mswSurface = cairo_win32_surface_create(hdc);
+ else {
+ hasBitmap = true;
+ m_mswSurface = cairo_image_surface_create_for_data((unsigned char*)info.bmBits,
+ CAIRO_FORMAT_ARGB32,
+ info.bmWidth,
+ info.bmHeight,
+ info.bmWidthBytes);
+ }
+