1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (c) 2008, 2009, Google Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "DragImage.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "Image.h" 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "NativeImageSkia.h" 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "NotImplemented.h" 37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "RefPtr.h" 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SkBitmap.h" 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "skia/ext/image_operations.h" 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectIntSize dragImageSize(DragImageRef image) 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!image) 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return IntSize(); 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return IntSize(image->width(), image->height()); 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid deleteDragImage(DragImageRef image) 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block delete image; 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectDragImageRef scaleDragImage(DragImageRef image, FloatSize scale) 58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!image) 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int imageWidth = scale.width() * image->width(); 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int imageHeight = scale.height() * image->height(); 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DragImageRef scaledImage = new SkBitmap( 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block skia::ImageOperations::Resize(*image, skia::ImageOperations::RESIZE_LANCZOS3, 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block imageWidth, imageHeight)); 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block delete image; 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return scaledImage; 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 7121939df44de1705786c545cd1bf519d47250322dBen MurdochDragImageRef dissolveDragImageToFraction(DragImageRef image, float fraction) 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 7321939df44de1705786c545cd1bf519d47250322dBen Murdoch if (!image) 7421939df44de1705786c545cd1bf519d47250322dBen Murdoch return 0; 7521939df44de1705786c545cd1bf519d47250322dBen Murdoch 7621939df44de1705786c545cd1bf519d47250322dBen Murdoch image->setIsOpaque(false); 7721939df44de1705786c545cd1bf519d47250322dBen Murdoch image->lockPixels(); 7821939df44de1705786c545cd1bf519d47250322dBen Murdoch 7921939df44de1705786c545cd1bf519d47250322dBen Murdoch for (int row = 0; row < image->height(); ++row) { 8021939df44de1705786c545cd1bf519d47250322dBen Murdoch for (int column = 0; column < image->width(); ++column) { 8121939df44de1705786c545cd1bf519d47250322dBen Murdoch uint32_t* pixel = image->getAddr32(column, row); 8221939df44de1705786c545cd1bf519d47250322dBen Murdoch *pixel = SkPreMultiplyARGB(SkColorGetA(*pixel) * fraction, 8321939df44de1705786c545cd1bf519d47250322dBen Murdoch SkColorGetR(*pixel), 8421939df44de1705786c545cd1bf519d47250322dBen Murdoch SkColorGetG(*pixel), 8521939df44de1705786c545cd1bf519d47250322dBen Murdoch SkColorGetB(*pixel)); 8621939df44de1705786c545cd1bf519d47250322dBen Murdoch } 8721939df44de1705786c545cd1bf519d47250322dBen Murdoch } 8821939df44de1705786c545cd1bf519d47250322dBen Murdoch 8921939df44de1705786c545cd1bf519d47250322dBen Murdoch image->unlockPixels(); 9021939df44de1705786c545cd1bf519d47250322dBen Murdoch 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return image; 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockDragImageRef createDragImageFromImage(Image* image) 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!image) 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block NativeImageSkia* bitmap = image->nativeImageForCurrentFrame(); 10021939df44de1705786c545cd1bf519d47250322dBen Murdoch if (!bitmap) 10121939df44de1705786c545cd1bf519d47250322dBen Murdoch return 0; 10221939df44de1705786c545cd1bf519d47250322dBen Murdoch 10321939df44de1705786c545cd1bf519d47250322dBen Murdoch SkBitmap* dragImage = new SkBitmap(); 10421939df44de1705786c545cd1bf519d47250322dBen Murdoch bitmap->copyTo(dragImage, SkBitmap::kARGB_8888_Config); 10521939df44de1705786c545cd1bf519d47250322dBen Murdoch return dragImage; 106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectDragImageRef createDragImageIconForCachedImage(CachedImage*) 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project notImplemented(); 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace WebCore 115