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