971d0bcb8f0cc380aff68d4c14bc958ad992290e
[WebKit-https.git] / Source / WebCore / PAL / pal / spi / cocoa / QuartzCoreSPI.h
1 /*
2  * Copyright (C) 2014-2016 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. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #import <CoreVideo/CoreVideo.h>
29 #import <QuartzCore/QuartzCore.h>
30 #import <pal/spi/cg/CoreGraphicsSPI.h>
31 #import <pal/spi/cocoa/IOSurfaceSPI.h>
32
33 #if USE(APPLE_INTERNAL_SDK)
34
35 #import <QuartzCore/CABackingStore.h>
36 #import <QuartzCore/CAColorMatrix.h>
37 #import <QuartzCore/CARenderServer.h>
38
39 #ifdef __OBJC__
40
41 #import <QuartzCore/CAContext.h>
42 #import <QuartzCore/CALayerHost.h>
43 #import <QuartzCore/CALayerPrivate.h>
44 #import <QuartzCore/QuartzCorePrivate.h>
45
46 #if PLATFORM(IOS)
47 #import <QuartzCore/CADisplay.h>
48 #endif
49
50 #if PLATFORM(MAC)
51 #import <QuartzCore/CARenderCG.h>
52 #endif
53
54 #endif // __OBJC__
55
56 #else
57
58 #ifdef __OBJC__
59 typedef struct _CARenderContext CARenderContext;
60
61 @interface CAContext : NSObject
62 @end
63
64 @interface CAContext ()
65 + (NSArray *)allContexts;
66 + (CAContext *)localContext;
67 + (CAContext *)remoteContextWithOptions:(NSDictionary *)dict;
68 #if PLATFORM(MAC)
69 + (CAContext *)contextWithCGSConnection:(CGSConnectionID)cid options:(NSDictionary *)dict;
70 #endif
71 + (id)objectForSlot:(uint32_t)name;
72 - (uint32_t)createImageSlot:(CGSize)size hasAlpha:(BOOL)flag;
73 - (void)deleteSlot:(uint32_t)name;
74 - (void)invalidate;
75 - (void)invalidateFences;
76 - (mach_port_t)createFencePort;
77 - (void)setFencePort:(mach_port_t)port;
78 - (void)setFencePort:(mach_port_t)port commitHandler:(void(^)(void))block;
79 #if PLATFORM(MAC)
80 @property uint32_t commitPriority;
81 @property BOOL colorMatchUntaggedContent;
82 #endif
83 @property (readonly) uint32_t contextId;
84 @property (strong) CALayer *layer;
85 @property CGColorSpaceRef colorSpace;
86 @property (readonly) CARenderContext* renderContext;
87 @end
88
89 @interface CALayer ()
90 - (CAContext *)context;
91 - (void)setContextId:(uint32_t)contextID;
92 - (CGSize)size;
93 - (void *)regionBeingDrawn;
94 - (void)reloadValueForKeyPath:(NSString *)keyPath;
95 @property BOOL allowsGroupBlending;
96 @property BOOL canDrawConcurrently;
97 @property BOOL contentsOpaque;
98 @property BOOL hitTestsAsOpaque;
99 @property BOOL needsLayoutOnGeometryChange;
100 @property BOOL shadowPathIsBounds;
101 @end
102
103 #if PLATFORM(IOS)
104 @interface CADisplay : NSObject
105 @end
106
107 @interface CADisplay ()
108 @property (nonatomic, readonly) NSString *name;
109 @end
110 #endif
111
112 #if ENABLE(FILTERS_LEVEL_2)
113 @interface CABackdropLayer : CALayer
114 @property BOOL windowServerAware;
115 @end
116 #endif
117
118 struct CAColorMatrix {
119     float m11, m12, m13, m14, m15;
120     float m21, m22, m23, m24, m25;
121     float m31, m32, m33, m34, m35;
122     float m41, m42, m43, m44, m45;
123 };
124 typedef struct CAColorMatrix CAColorMatrix;
125
126 @interface NSValue (CADetails)
127 + (NSValue *)valueWithCAColorMatrix:(CAColorMatrix)t;
128 @end
129
130 @interface CAFilter : NSObject <NSCopying, NSMutableCopying, NSCoding>
131 @end
132
133 @interface CAFilter ()
134 + (CAFilter *)filterWithType:(NSString *)type;
135 @property (copy) NSString *name;
136 @end
137
138 typedef enum {
139     kCATransactionPhasePreLayout,
140     kCATransactionPhasePreCommit,
141     kCATransactionPhasePostCommit,
142     kCATransactionPhaseNull = ~0u
143 } CATransactionPhase;
144
145 @interface CATransaction ()
146 + (void)addCommitHandler:(void(^)(void))block forPhase:(CATransactionPhase)phase;
147
148 #if PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
149 + (CATransactionPhase)currentPhase;
150 #endif
151
152 @end
153
154 @interface CALayerHost : CALayer
155 @property uint32_t contextId;
156 @property BOOL inheritsSecurity;
157 @end
158
159 @interface CASpringAnimation (Private)
160 @property CGFloat velocity;
161 @end
162
163 #endif // __OBJC__
164
165 #endif
166
167 WTF_EXTERN_C_BEGIN
168
169 // FIXME: Declare these functions even when USE(APPLE_INTERNAL_SDK) is true once we can fix <rdar://problem/26584828> in a better way.
170 #if !USE(APPLE_INTERNAL_SDK)
171 void CARenderServerCaptureLayerWithTransform(mach_port_t, uint32_t clientId, uint64_t layerId, uint32_t slotId, int32_t ox, int32_t oy, const CATransform3D*);
172
173 #if HAVE(IOSURFACE)
174 void CARenderServerRenderLayerWithTransform(mach_port_t server_port, uint32_t client_id, uint64_t layer_id, IOSurfaceRef, int32_t ox, int32_t oy, const CATransform3D*);
175 void CARenderServerRenderDisplayLayerWithTransformAndTimeOffset(mach_port_t, CFStringRef display_name, uint32_t client_id, uint64_t layer_id, IOSurfaceRef, int32_t ox, int32_t oy, const CATransform3D*, CFTimeInterval);
176 #else
177 typedef struct CARenderServerBuffer* CARenderServerBufferRef;
178 CARenderServerBufferRef CARenderServerCreateBuffer(size_t, size_t);
179 void CARenderServerDestroyBuffer(CARenderServerBufferRef);
180 size_t CARenderServerGetBufferWidth(CARenderServerBufferRef);
181 size_t CARenderServerGetBufferHeight(CARenderServerBufferRef);
182 size_t CARenderServerGetBufferRowBytes(CARenderServerBufferRef);
183 uint8_t* CARenderServerGetBufferData(CARenderServerBufferRef);
184 size_t CARenderServerGetBufferDataSize(CARenderServerBufferRef);
185
186 bool CARenderServerRenderLayerWithTransform(mach_port_t, uint32_t client_id, uint64_t layer_id, CARenderServerBufferRef, int32_t ox, int32_t oy, const CATransform3D*);
187 #endif
188 #endif // USE(APPLE_INTERNAL_SDK)
189
190 typedef struct _CAMachPort *CAMachPortRef;
191 CAMachPortRef CAMachPortCreate(mach_port_t);
192 mach_port_t CAMachPortGetPort(CAMachPortRef);
193 CFTypeID CAMachPortGetTypeID(void);
194
195 void CABackingStoreCollectBlocking(void);
196
197 typedef struct _CARenderCGContext CARenderCGContext;
198 typedef struct _CARenderContext CARenderContext;
199 typedef struct _CARenderUpdate CARenderUpdate;
200 CARenderCGContext *CARenderCGNew(uint32_t feature_flags);
201 CARenderUpdate* CARenderUpdateBegin(void* buffer, size_t, CFTimeInterval, const CVTimeStamp*, uint32_t finished_seed, const CGRect* bounds);
202 bool CARenderServerStart();
203 mach_port_t CARenderServerGetPort();
204 void CARenderCGDestroy(CARenderCGContext*);
205 void CARenderCGRender(CARenderCGContext*, CARenderUpdate*, CGContextRef);
206 void CARenderUpdateAddContext(CARenderUpdate*, CARenderContext*);
207 void CARenderUpdateAddRect(CARenderUpdate*, const CGRect*);
208 void CARenderUpdateFinish(CARenderUpdate*);
209
210 WTF_EXTERN_C_END
211
212 extern NSString * const kCAFilterColorInvert;
213 extern NSString * const kCAFilterColorMatrix;
214 extern NSString * const kCAFilterColorMonochrome;
215 extern NSString * const kCAFilterColorHueRotate;
216 extern NSString * const kCAFilterColorSaturate;
217 extern NSString * const kCAFilterGaussianBlur;
218 extern NSString * const kCAFilterPlusD;
219 extern NSString * const kCAFilterPlusL;
220
221 extern NSString * const kCAFilterNormalBlendMode;
222 extern NSString * const kCAFilterMultiplyBlendMode;
223 extern NSString * const kCAFilterScreenBlendMode;
224 extern NSString * const kCAFilterOverlayBlendMode;
225 extern NSString * const kCAFilterDarkenBlendMode;
226 extern NSString * const kCAFilterLightenBlendMode;
227 extern NSString * const kCAFilterColorDodgeBlendMode;
228 extern NSString * const kCAFilterColorBurnBlendMode;
229 extern NSString * const kCAFilterSoftLightBlendMode;
230 extern NSString * const kCAFilterHardLightBlendMode;
231 extern NSString * const kCAFilterDifferenceBlendMode;
232 extern NSString * const kCAFilterExclusionBlendMode;
233
234 extern NSString * const kCAContextCIFilterBehavior;
235 extern NSString * const kCAContextDisplayName;
236 extern NSString * const kCAContextDisplayId;
237 extern NSString * const kCAContextIgnoresHitTest;
238 extern NSString * const kCAContextPortNumber;
239
240 #if PLATFORM(IOS)
241 extern NSString * const kCAContentsFormatRGBA10XR;
242 #endif
243
244 #if PLATFORM(MAC)
245 extern NSString * const kCAContentsFormatRGBA8ColorRGBA8LinearGlyphMask;
246 #endif