PassOwnPtr<DragImage> DragImage::create(Image* image, RespectImageOrientationEnum shouldRespectImageOrientation, float deviceScaleFactor) { if (!image) return nullptr; RefPtr<NativeImageSkia> bitmap = image->nativeImageForCurrentFrame(); if (!bitmap) return nullptr; if (image->isBitmapImage()) { ImageOrientation orientation = DefaultImageOrientation; BitmapImage* bitmapImage = toBitmapImage(image); IntSize sizeRespectingOrientation = bitmapImage->sizeRespectingOrientation(); if (shouldRespectImageOrientation == RespectImageOrientation) orientation = bitmapImage->currentFrameOrientation(); if (orientation != DefaultImageOrientation) { FloatRect destRect(FloatPoint(), sizeRespectingOrientation); if (orientation.usesWidthAsHeight()) destRect = destRect.transposedRect(); SkBitmap skBitmap; skBitmap.setConfig( SkBitmap::kARGB_8888_Config, sizeRespectingOrientation.width(), sizeRespectingOrientation.height()); if (!skBitmap.allocPixels()) return nullptr; SkCanvas canvas(skBitmap); canvas.concat(affineTransformToSkMatrix(orientation.transformFromDefault(sizeRespectingOrientation))); canvas.drawBitmapRect(bitmap->bitmap(), 0, destRect); return adoptPtr(new DragImage(skBitmap, deviceScaleFactor)); } } SkBitmap skBitmap; #if defined(SBROWSER_GPU_RASTERIZATION_ENABLE) if (!bitmap->bitmap().copyTo(&skBitmap, kPMColor_SkColorType)) #else if (!bitmap->bitmap().copyTo(&skBitmap, SkBitmap::kARGB_8888_Config)) #endif return nullptr; return adoptPtr(new DragImage(skBitmap, deviceScaleFactor)); }
DragImageRef createDragImageFromImage(Image* image, RespectImageOrientationEnum shouldRespectImageOrientation) { if (!image) return 0; NativeImageSkia* bitmap = image->nativeImageForCurrentFrame(); if (!bitmap) return 0; DragImageChromium* dragImageChromium = new DragImageChromium; dragImageChromium->bitmap = new SkBitmap(); dragImageChromium->resolutionScale = bitmap->resolutionScale(); if (image->isBitmapImage()) { ImageOrientation orientation = DefaultImageOrientation; BitmapImage* bitmapImage = static_cast<BitmapImage*>(image); IntSize sizeRespectingOrientation = bitmapImage->sizeRespectingOrientation(); if (shouldRespectImageOrientation == RespectImageOrientation) orientation = bitmapImage->currentFrameOrientation(); if (orientation != DefaultImageOrientation) { // Construct a correctly-rotated copy of the image to use as the drag image. dragImageChromium->bitmap->setConfig( SkBitmap::kARGB_8888_Config, sizeRespectingOrientation.width(), sizeRespectingOrientation.height()); dragImageChromium->bitmap->allocPixels(); FloatRect destRect(FloatPoint(), sizeRespectingOrientation); SkCanvas canvas(*dragImageChromium->bitmap); canvas.concat(orientation.transformFromDefault(sizeRespectingOrientation)); if (orientation.usesWidthAsHeight()) destRect = FloatRect(destRect.x(), destRect.y(), destRect.height(), destRect.width()); canvas.drawBitmapRect(bitmap->bitmap(), 0, destRect); return dragImageChromium; } } bitmap->bitmap().copyTo(dragImageChromium->bitmap, SkBitmap::kARGB_8888_Config); return dragImageChromium; }
PassOwnPtr<DragImage> DragImage::create(Image* image, RespectImageOrientationEnum shouldRespectImageOrientation, float deviceScaleFactor) { if (!image) return nullptr; RefPtr<NativeImageSkia> bitmap = image->nativeImageForCurrentFrame(); if (!bitmap) return nullptr; if (image->isBitmapImage()) { ImageOrientation orientation = DefaultImageOrientation; BitmapImage* bitmapImage = toBitmapImage(image); IntSize sizeRespectingOrientation = bitmapImage->sizeRespectingOrientation(); if (shouldRespectImageOrientation == RespectImageOrientation) orientation = bitmapImage->currentFrameOrientation(); if (orientation != DefaultImageOrientation) { FloatRect destRect(FloatPoint(), sizeRespectingOrientation); if (orientation.usesWidthAsHeight()) destRect = destRect.transposedRect(); SkBitmap skBitmap; if (!skBitmap.tryAllocN32Pixels(sizeRespectingOrientation.width(), sizeRespectingOrientation.height())) return nullptr; SkCanvas canvas(skBitmap); canvas.concat(affineTransformToSkMatrix(orientation.transformFromDefault(sizeRespectingOrientation))); canvas.drawBitmapRect(bitmap->bitmap(), 0, destRect); return adoptPtr(new DragImage(skBitmap, deviceScaleFactor)); } } SkBitmap skBitmap; if (!bitmap->bitmap().copyTo(&skBitmap, kN32_SkColorType)) return nullptr; return adoptPtr(new DragImage(skBitmap, deviceScaleFactor)); }