d7d246d82f94812921c65de2aa60968502dfad55
[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 };
83 typedef uint32_t CGFontAntialiasingStyle;
84
85 enum {
86     kCGImageCachingTransient = 1,
87     kCGImageCachingTemporary = 3,
88 };
89 typedef uint32_t CGImageCachingFlags;
90
91 #if PLATFORM(COCOA)
92 typedef struct CGSRegionEnumeratorObject* CGSRegionEnumeratorObj;
93 typedef struct CGSRegionObject* CGSRegionObj;
94 typedef struct CGSRegionObject* CGRegionRef;
95 #endif
96
97 #ifdef CGFLOAT_IS_DOUBLE
98 #define CGRound(value) round((value))
99 #define CGFloor(value) floor((value))
100 #define CGCeiling(value) ceil((value))
101 #define CGFAbs(value) fabs((value))
102 #else
103 #define CGRound(value) roundf((value))
104 #define CGFloor(value) floorf((value))
105 #define CGCeiling(value) ceilf((value))
106 #define CGFAbs(value) fabsf((value))
107 #endif
108
109 static inline CGFloat CGFloatMin(CGFloat a, CGFloat b) { return isnan(a) ? b : ((isnan(b) || a < b) ? a : b); }
110
111 typedef struct CGFontCache CGFontCache;
112
113 #endif // USE(APPLE_INTERNAL_SDK)
114
115 EXTERN_C CGColorRef CGColorTransformConvertColor(CGColorTransformRef, CGColorRef, CGColorRenderingIntent);
116 EXTERN_C CGColorTransformRef CGColorTransformCreate(CGColorSpaceRef, CFDictionaryRef attributes);
117
118 EXTERN_C CGAffineTransform CGContextGetBaseCTM(CGContextRef);
119 EXTERN_C CGCompositeOperation CGContextGetCompositeOperation(CGContextRef);
120 EXTERN_C CGColorRef CGContextGetFillColorAsColor(CGContextRef);
121 EXTERN_C CGFloat CGContextGetLineWidth(CGContextRef);
122 EXTERN_C bool CGContextGetShouldSmoothFonts(CGContextRef);
123 EXTERN_C void CGContextSetBaseCTM(CGContextRef, CGAffineTransform);
124 EXTERN_C void CGContextSetCTM(CGContextRef, CGAffineTransform);
125 EXTERN_C void CGContextSetCompositeOperation(CGContextRef, CGCompositeOperation);
126 EXTERN_C void CGContextSetShouldAntialiasFonts(CGContextRef, bool shouldAntialiasFonts);
127
128 EXTERN_C CFStringRef CGFontCopyFamilyName(CGFontRef);
129 EXTERN_C bool CGFontGetDescriptor(CGFontRef, CGFontDescriptor*);
130 EXTERN_C bool CGFontGetGlyphAdvancesForStyle(CGFontRef, const CGAffineTransform* , CGFontRenderingStyle, const CGGlyph[], size_t count, CGSize advances[]);
131 EXTERN_C void CGFontGetGlyphsForUnichars(CGFontRef, const UniChar[], CGGlyph[], size_t count);
132 EXTERN_C const CGFontHMetrics* CGFontGetHMetrics(CGFontRef);
133 EXTERN_C const char* CGFontGetPostScriptName(CGFontRef);
134 EXTERN_C bool CGFontIsFixedPitch(CGFontRef);
135 EXTERN_C void CGFontSetShouldUseMulticache(bool);
136
137 EXTERN_C void CGImageSetCachingFlags(CGImageRef, CGImageCachingFlags);
138 EXTERN_C CGImageCachingFlags CGImageGetCachingFlags(CGImageRef);
139
140 EXTERN_C CGDataProviderRef CGPDFDocumentGetDataProvider(CGPDFDocumentRef);
141
142 #if PLATFORM(COCOA)
143 EXTERN_C CGSRegionEnumeratorObj CGSRegionEnumerator(CGRegionRef);
144 EXTERN_C CGRect* CGSNextRect(const CGSRegionEnumeratorObj);
145 EXTERN_C CGError CGSReleaseRegionEnumerator(const CGSRegionEnumeratorObj);
146 #endif
147
148 #if PLATFORM(WIN)
149 EXTERN_C CGFontCache* CGFontCacheGetLocalCache();
150 EXTERN_C void CGFontCacheSetShouldAutoExpire(CGFontCache*, bool);
151 EXTERN_C void CGFontCacheSetMaxSize(CGFontCache*, size_t);
152 #endif
153
154 #endif // CoreGraphicsSPI_h