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