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