Stop using deprecated CADisplay SPI
[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(MAC)
47 #import <QuartzCore/CARenderCG.h>
48 #endif
49
50 #endif // __OBJC__
51
52 #else
53
54 #ifdef __OBJC__
55 typedef struct _CARenderContext CARenderContext;
56
57 @interface CAContext : NSObject
58 @end
59
60 @interface CAContext ()
61 + (NSArray *)allContexts;
62 + (CAContext *)localContext;
63 + (CAContext *)remoteContextWithOptions:(NSDictionary *)dict;
64 #if PLATFORM(MAC)
65 + (CAContext *)contextWithCGSConnection:(CGSConnectionID)cid options:(NSDictionary *)dict;
66 #endif
67 + (id)objectForSlot:(uint32_t)name;
68 - (uint32_t)createImageSlot:(CGSize)size hasAlpha:(BOOL)flag;
69 - (void)deleteSlot:(uint32_t)name;
70 - (void)invalidate;
71 - (void)invalidateFences;
72 - (mach_port_t)createFencePort;
73 - (void)setFencePort:(mach_port_t)port;
74 - (void)setFencePort:(mach_port_t)port commitHandler:(void(^)(void))block;
75 #if PLATFORM(MAC)
76 @property uint32_t commitPriority;
77 @property BOOL colorMatchUntaggedContent;
78 #endif
79 @property (readonly) uint32_t contextId;
80 @property (strong) CALayer *layer;
81 @property CGColorSpaceRef colorSpace;
82 @property (readonly) CARenderContext* renderContext;
83 @end
84
85 @interface CALayer ()
86 - (CAContext *)context;
87 - (void)setContextId:(uint32_t)contextID;
88 - (CGSize)size;
89 - (void *)regionBeingDrawn;
90 - (void)reloadValueForKeyPath:(NSString *)keyPath;
91 @property BOOL allowsGroupBlending;
92 @property BOOL canDrawConcurrently;
93 @property BOOL contentsOpaque;
94 @property BOOL hitTestsAsOpaque;
95 @property BOOL needsLayoutOnGeometryChange;
96 @property BOOL shadowPathIsBounds;
97 @end
98
99 #if ENABLE(FILTERS_LEVEL_2)
100 @interface CABackdropLayer : CALayer
101 @property BOOL windowServerAware;
102 @end
103 #endif
104
105 struct CAColorMatrix {
106     float m11, m12, m13, m14, m15;
107     float m21, m22, m23, m24, m25;
108     float m31, m32, m33, m34, m35;
109     float m41, m42, m43, m44, m45;
110 };
111 typedef struct CAColorMatrix CAColorMatrix;
112
113 @interface NSValue (CADetails)
114 + (NSValue *)valueWithCAColorMatrix:(CAColorMatrix)t;
115 @end
116
117 @interface CAFilter : NSObject <NSCopying, NSMutableCopying, NSCoding>
118 @end
119
120 @interface CAFilter ()
121 + (CAFilter *)filterWithType:(NSString *)type;
122 @property (copy) NSString *name;
123 @end
124
125 typedef enum {
126     kCATransactionPhasePreLayout,
127     kCATransactionPhasePreCommit,
128     kCATransactionPhasePostCommit,
129     kCATransactionPhaseNull = ~0u
130 } CATransactionPhase;
131
132 @interface CATransaction ()
133 + (void)addCommitHandler:(void(^)(void))block forPhase:(CATransactionPhase)phase;
134
135 #if PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
136 + (CATransactionPhase)currentPhase;
137 #endif
138
139 @end
140
141 @interface CALayerHost : CALayer
142 @property uint32_t contextId;
143 @property BOOL inheritsSecurity;
144 @end
145
146 @interface CASpringAnimation (Private)
147 @property CGFloat velocity;
148 @end
149
150 #endif // __OBJC__
151
152 #endif
153
154 WTF_EXTERN_C_BEGIN
155
156 // FIXME: Declare these functions even when USE(APPLE_INTERNAL_SDK) is true once we can fix <rdar://problem/26584828> in a better way.
157 #if !USE(APPLE_INTERNAL_SDK)
158 void CARenderServerCaptureLayerWithTransform(mach_port_t, uint32_t clientId, uint64_t layerId, uint32_t slotId, int32_t ox, int32_t oy, const CATransform3D*);
159
160 #if HAVE(IOSURFACE)
161 void CARenderServerRenderLayerWithTransform(mach_port_t server_port, uint32_t client_id, uint64_t layer_id, IOSurfaceRef, int32_t ox, int32_t oy, const CATransform3D*);
162 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);
163 #else
164 typedef struct CARenderServerBuffer* CARenderServerBufferRef;
165 CARenderServerBufferRef CARenderServerCreateBuffer(size_t, size_t);
166 void CARenderServerDestroyBuffer(CARenderServerBufferRef);
167 size_t CARenderServerGetBufferWidth(CARenderServerBufferRef);
168 size_t CARenderServerGetBufferHeight(CARenderServerBufferRef);
169 size_t CARenderServerGetBufferRowBytes(CARenderServerBufferRef);
170 uint8_t* CARenderServerGetBufferData(CARenderServerBufferRef);
171 size_t CARenderServerGetBufferDataSize(CARenderServerBufferRef);
172
173 bool CARenderServerRenderLayerWithTransform(mach_port_t, uint32_t client_id, uint64_t layer_id, CARenderServerBufferRef, int32_t ox, int32_t oy, const CATransform3D*);
174 #endif
175 #endif // USE(APPLE_INTERNAL_SDK)
176
177 typedef struct _CAMachPort *CAMachPortRef;
178 CAMachPortRef CAMachPortCreate(mach_port_t);
179 mach_port_t CAMachPortGetPort(CAMachPortRef);
180 CFTypeID CAMachPortGetTypeID(void);
181
182 void CABackingStoreCollectBlocking(void);
183
184 typedef struct _CARenderCGContext CARenderCGContext;
185 typedef struct _CARenderContext CARenderContext;
186 typedef struct _CARenderUpdate CARenderUpdate;
187 CARenderCGContext *CARenderCGNew(uint32_t feature_flags);
188 CARenderUpdate* CARenderUpdateBegin(void* buffer, size_t, CFTimeInterval, const CVTimeStamp*, uint32_t finished_seed, const CGRect* bounds);
189 bool CARenderServerStart();
190 mach_port_t CARenderServerGetPort();
191 void CARenderCGDestroy(CARenderCGContext*);
192 void CARenderCGRender(CARenderCGContext*, CARenderUpdate*, CGContextRef);
193 void CARenderUpdateAddContext(CARenderUpdate*, CARenderContext*);
194 void CARenderUpdateAddRect(CARenderUpdate*, const CGRect*);
195 void CARenderUpdateFinish(CARenderUpdate*);
196
197 WTF_EXTERN_C_END
198
199 extern NSString * const kCAFilterColorInvert;
200 extern NSString * const kCAFilterColorMatrix;
201 extern NSString * const kCAFilterColorMonochrome;
202 extern NSString * const kCAFilterColorHueRotate;
203 extern NSString * const kCAFilterColorSaturate;
204 extern NSString * const kCAFilterGaussianBlur;
205 extern NSString * const kCAFilterPlusD;
206 extern NSString * const kCAFilterPlusL;
207
208 extern NSString * const kCAFilterNormalBlendMode;
209 extern NSString * const kCAFilterMultiplyBlendMode;
210 extern NSString * const kCAFilterScreenBlendMode;
211 extern NSString * const kCAFilterOverlayBlendMode;
212 extern NSString * const kCAFilterDarkenBlendMode;
213 extern NSString * const kCAFilterLightenBlendMode;
214 extern NSString * const kCAFilterColorDodgeBlendMode;
215 extern NSString * const kCAFilterColorBurnBlendMode;
216 extern NSString * const kCAFilterSoftLightBlendMode;
217 extern NSString * const kCAFilterHardLightBlendMode;
218 extern NSString * const kCAFilterDifferenceBlendMode;
219 extern NSString * const kCAFilterExclusionBlendMode;
220
221 extern NSString * const kCAContextCIFilterBehavior;
222 extern NSString * const kCAContextDisplayName;
223 extern NSString * const kCAContextDisplayId;
224 extern NSString * const kCAContextIgnoresHitTest;
225 extern NSString * const kCAContextPortNumber;
226
227 #if PLATFORM(IOS)
228 extern NSString * const kCAContentsFormatRGBA10XR;
229 #endif
230
231 #if PLATFORM(MAC)
232 extern NSString * const kCAContentsFormatRGBA8ColorRGBA8LinearGlyphMask;
233 #endif