1/* 2 * Copyright (C) 2007 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 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 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#ifndef DragImage_h 27#define DragImage_h 28 29#include "FloatSize.h" 30#include "FontRenderingMode.h" 31#include "ImageOrientation.h" 32#include "IntSize.h" 33#include <wtf/Forward.h> 34 35#if PLATFORM(IOS) 36#include <wtf/RetainPtr.h> 37typedef struct CGImage *CGImageRef; 38#elif PLATFORM(MAC) 39#include <wtf/RetainPtr.h> 40OBJC_CLASS NSImage; 41#elif PLATFORM(WIN) 42typedef struct HBITMAP__* HBITMAP; 43#elif PLATFORM(GTK) 44typedef struct _cairo_surface cairo_surface_t; 45#endif 46 47// We need to #define YOffset as it needs to be shared with WebKit 48#define DragLabelBorderYOffset 2 49 50namespace WebCore { 51 52class Frame; 53class Image; 54class IntRect; 55class Node; 56class Range; 57class URL; 58 59#if PLATFORM(IOS) 60typedef RetainPtr<CGImageRef> DragImageRef; 61#elif PLATFORM(MAC) 62typedef RetainPtr<NSImage> DragImageRef; 63#elif PLATFORM(WIN) 64typedef HBITMAP DragImageRef; 65#elif PLATFORM(GTK) 66typedef cairo_surface_t* DragImageRef; 67#elif PLATFORM(EFL) 68typedef void* DragImageRef; 69#endif 70 71IntSize dragImageSize(DragImageRef); 72 73// These functions should be memory neutral, eg. if they return a newly allocated image, 74// they should release the input image. As a corollary these methods don't guarantee 75// the input image ref will still be valid after they have been called. 76DragImageRef fitDragImageToMaxSize(DragImageRef, const IntSize& srcSize, const IntSize& dstSize); 77DragImageRef scaleDragImage(DragImageRef, FloatSize scale); 78DragImageRef dissolveDragImageToFraction(DragImageRef, float delta); 79 80DragImageRef createDragImageFromImage(Image*, ImageOrientationDescription); 81DragImageRef createDragImageIconForCachedImageFilename(const String&); 82 83DragImageRef createDragImageForNode(Frame&, Node&); 84DragImageRef createDragImageForSelection(Frame&, bool forceBlackText = false); 85DragImageRef createDragImageForRange(Frame&, Range&, bool forceBlackText = false); 86DragImageRef createDragImageForImage(Frame&, Node&, IntRect& imageRect, IntRect& elementRect); 87DragImageRef createDragImageForLink(URL&, const String& label, FontRenderingMode); 88void deleteDragImage(DragImageRef); 89} 90 91#endif // DragImage_h 92