1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include "config.h" 27 #include "DragImage.h" 28 29 #include "CachedImage.h" 30 #include "GraphicsContext.h" 31 #include "Image.h" 32 #include "RetainPtr.h" 33 34 #include <windows.h> 35 36 namespace WebCore { 37 38 IntSize dragImageSize(DragImageRef image) 39 { 40 if (!image) 41 return IntSize(); 42 BITMAP b; 43 GetObject(image, sizeof(BITMAP), &b); 44 return IntSize(b.bmWidth, b.bmHeight); 45 } 46 47 void deleteDragImage(DragImageRef image) 48 { 49 if (image) 50 ::DeleteObject(image); 51 } 52 53 DragImageRef dissolveDragImageToFraction(DragImageRef image, float) 54 { 55 //We don't do this on windows as the dragimage is blended by the OS 56 return image; 57 } 58 59 DragImageRef createDragImageIconForCachedImage(CachedImage* image) 60 { 61 if (!image) 62 return 0; 63 64 String filename = image->response().suggestedFilename(); 65 66 SHFILEINFO shfi = {0}; 67 if (FAILED(SHGetFileInfo(static_cast<LPCWSTR>(filename.charactersWithNullTermination()), FILE_ATTRIBUTE_NORMAL, 68 &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES))) 69 return 0; 70 71 ICONINFO iconInfo; 72 if (!GetIconInfo(shfi.hIcon, &iconInfo)) { 73 DestroyIcon(shfi.hIcon); 74 return 0; 75 } 76 77 DestroyIcon(shfi.hIcon); 78 DeleteObject(iconInfo.hbmMask); 79 80 return iconInfo.hbmColor; 81 } 82 83 } 84