9e0397c491a983c38ac4d39aba4000ba425dc746
[WebKit-https.git] / Source / WebCore / platform / spi / cg / CoreGraphicsSPI.h
1 /*
2  * Copyright (C) 2014 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 CoreGraphicsSPI_h
27 #define CoreGraphicsSPI_h
28
29 #include <CoreFoundation/CoreFoundation.h>
30 #include <CoreGraphics/CoreGraphics.h>
31
32 #if USE(APPLE_INTERNAL_SDK)
33
34 #include <CoreGraphics/CGFontCache.h>
35 #include <CoreGraphics/CoreGraphicsPrivate.h>
36
37 #else
38 struct CGFontHMetrics {
39     int ascent;
40     int descent;
41     int lineGap;
42     int maxAdvanceWidth;
43     int minLeftSideBearing;
44     int minRightSideBearing;
45 };
46
47 struct CGFontDescriptor {
48     CGRect bbox;
49     CGFloat ascent;
50     CGFloat descent;
51     CGFloat capHeight;
52     CGFloat italicAngle;
53     CGFloat stemV;
54     CGFloat stemH;
55     CGFloat avgWidth;
56     CGFloat maxWidth;
57     CGFloat missingWidth;
58     CGFloat leading;
59     CGFloat xHeight;
60 };
61
62 typedef const struct CGColorTransform* CGColorTransformRef;
63
64 typedef enum {
65     kCGCompositeCopy = 1,
66     kCGCompositeSover = 2,
67 } CGCompositeOperation;
68
69 enum {
70     kCGFontRenderingStyleAntialiasing = 1 << 0,
71     kCGFontRenderingStyleSmoothing = 1 << 1,
72     kCGFontRenderingStyleSubpixelPositioning = 1 << 2,
73     kCGFontRenderingStyleSubpixelQuantization = 1 << 3,
74     kCGFontRenderingStylePlatformNative = 1 << 9,
75     kCGFontRenderingStyleMask = 0x20F,
76 };
77 typedef uint32_t CGFontRenderingStyle;
78
79 enum {
80     kCGFontAntialiasingStyleUnfiltered = 0 << 7,
81     kCGFontAntialiasingStyleFilterLight = 1 << 7,
82 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
83     kCGFontAntialiasingStyleUnfilteredCustomDilation = (8 << 7),
84 #endif
85 };
86 typedef uint32_t CGFontAntialiasingStyle;
87
88 enum {
89     kCGImageCachingTransient = 1,
90     kCGImageCachingTemporary = 3,
91 };
92 typedef uint32_t CGImageCachingFlags;
93
94 #if PLATFORM(COCOA)
95 typedef struct CGSRegionEnumeratorObject* CGSRegionEnumeratorObj;
96 typedef struct CGSRegionObject* CGSRegionObj;
97 typedef struct CGSRegionObject* CGRegionRef;
98 #endif
99
100 #ifdef CGFLOAT_IS_DOUBLE
101 #define CGRound(value) round((value))
102 #define CGFloor(value) floor((value))
103 #define CGCeiling(value) ceil((value))
104 #define CGFAbs(value) fabs((value))
105 #else
106 #define CGRound(value) roundf((value))
107 #define CGFloor(value) floorf((value))
108 #define CGCeiling(value) ceilf((value))
109 #define CGFAbs(value) fabsf((value))
110 #endif
111
112 static inline CGFloat CGFloatMin(CGFloat a, CGFloat b) { return isnan(a) ? b : ((isnan(b) || a < b) ? a : b); }
113
114 typedef struct CGFontCache CGFontCache;
115
116 #if PLATFORM(MAC)
117 typedef uint32_t CGSConnectionID;
118 typedef uint32_t CGSWindowID;
119 typedef uint32_t CGSWindowCount;
120 typedef CGSWindowID *CGSWindowIDList;
121
122 enum {
123     kCGSWindowCaptureNominalResolution = 0x0200,
124     kCGSCaptureIgnoreGlobalClipShape = 0x0800,
125 };
126 typedef uint32_t CGSWindowCaptureOptions;
127 #endif
128
129 #endif // USE(APPLE_INTERNAL_SDK)
130
131 WTF_EXTERN_C_BEGIN
132
133 CGColorRef CGColorTransformConvertColor(CGColorTransformRef, CGColorRef, CGColorRenderingIntent);
134 CGColorTransformRef CGColorTransformCreate(CGColorSpaceRef, CFDictionaryRef attributes);
135
136 CGAffineTransform CGContextGetBaseCTM(CGContextRef);
137 CGCompositeOperation CGContextGetCompositeOperation(CGContextRef);
138 CGColorRef CGContextGetFillColorAsColor(CGContextRef);
139 CGFloat CGContextGetLineWidth(CGContextRef);
140 bool CGContextGetShouldSmoothFonts(CGContextRef);
141 void CGContextSetBaseCTM(CGContextRef, CGAffineTransform);
142 void CGContextSetCTM(CGContextRef, CGAffineTransform);
143 void CGContextSetCompositeOperation(CGContextRef, CGCompositeOperation);
144 void CGContextSetShouldAntialiasFonts(CGContextRef, bool shouldAntialiasFonts);
145 void CGContextResetClip(CGContextRef);
146 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
147 void CGContextSetFontDilation(CGContextRef, CGSize);
148 void CGContextSetFontRenderingStyle(CGContextRef, CGFontRenderingStyle);
149 #endif
150
151 CFStringRef CGFontCopyFamilyName(CGFontRef);
152 bool CGFontGetDescriptor(CGFontRef, CGFontDescriptor*);
153 bool CGFontGetGlyphAdvancesForStyle(CGFontRef, const CGAffineTransform* , CGFontRenderingStyle, const CGGlyph[], size_t count, CGSize advances[]);
154 void CGFontGetGlyphsForUnichars(CGFontRef, const UniChar[], CGGlyph[], size_t count);
155 const CGFontHMetrics* CGFontGetHMetrics(CGFontRef);
156 const char* CGFontGetPostScriptName(CGFontRef);
157 bool CGFontIsFixedPitch(CGFontRef);
158 void CGFontSetShouldUseMulticache(bool);
159
160 void CGImageSetCachingFlags(CGImageRef, CGImageCachingFlags);
161 CGImageCachingFlags CGImageGetCachingFlags(CGImageRef);
162
163 CGDataProviderRef CGPDFDocumentGetDataProvider(CGPDFDocumentRef);
164
165 CGFontAntialiasingStyle CGContextGetFontAntialiasingStyle(CGContextRef);
166 void CGContextSetFontAntialiasingStyle(CGContextRef, CGFontAntialiasingStyle);
167
168 #if PLATFORM(COCOA)
169 CGSRegionEnumeratorObj CGSRegionEnumerator(CGRegionRef);
170 CGRect* CGSNextRect(const CGSRegionEnumeratorObj);
171 CGError CGSReleaseRegionEnumerator(const CGSRegionEnumeratorObj);
172 #endif
173
174 #if PLATFORM(WIN)
175 CGFontCache* CGFontCacheGetLocalCache();
176 void CGFontCacheSetShouldAutoExpire(CGFontCache*, bool);
177 void CGFontCacheSetMaxSize(CGFontCache*, size_t);
178 #endif
179
180 #if PLATFORM(MAC)
181 CGSConnectionID CGSMainConnectionID(void);
182 CFArrayRef CGSHWCaptureWindowList(CGSConnectionID cid, CGSWindowIDList windowList, CGSWindowCount windowCount, CGSWindowCaptureOptions options);
183 CGError CGSSetConnectionProperty(CGSConnectionID, CGSConnectionID ownerCid, CFStringRef key, CFTypeRef value);
184 CGError CGSCopyConnectionProperty(CGSConnectionID, CGSConnectionID ownerCid, CFStringRef key, CFTypeRef *value);
185 #endif
186
187 WTF_EXTERN_C_END
188
189 #endif // CoreGraphicsSPI_h