Tag WebGL layers with sRGB colorspace
[WebKit-https.git] / Source / WebCore / platform / spi / cocoa / QuartzCoreSPI.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. 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 #import <QuartzCore/QuartzCore.h>
27 #import <WebCore/IOSurfaceSPI.h>
28
29 #if USE(APPLE_INTERNAL_SDK)
30
31 #include <QuartzCore/CAColorMatrix.h>
32 #include <QuartzCore/CARenderServer.h>
33
34 #ifdef __OBJC__
35 #import <QuartzCore/CALayerPrivate.h>
36
37 // FIXME: As a workaround for <rdar://problem/18985152>, we conditionally enclose the following
38 // headers in an extern "C" linkage block to make it suitable for Objective-C++ use. Once this
39 // bug has been fixed we can simply include header <QuartzCore/QuartzCorePrivate.h> instead of
40 // including specific QuartzCore headers.
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 #import <QuartzCore/CAContext.h>
46 #import <QuartzCore/CAFilter.h>
47 #import <QuartzCore/CATiledLayerPrivate.h>
48 #import <QuartzCore/CATransactionPrivate.h>
49
50 #ifdef __cplusplus
51 }
52 #endif
53 #endif // __OBJC__
54
55 #else
56
57 #ifdef __OBJC__
58 @interface CAContext : NSObject
59 @end
60
61 @interface CAContext (Details)
62 + (NSArray *)allContexts;
63 + (CAContext *)remoteContextWithOptions:(NSDictionary *)dict;
64 + (id)objectForSlot:(uint32_t)name;
65 - (uint32_t)createImageSlot:(CGSize)size hasAlpha:(BOOL)flag;
66 - (void)deleteSlot:(uint32_t)name;
67 - (void)invalidate;
68 #if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
69 - (mach_port_t)createFencePort;
70 - (void)setFencePort:(mach_port_t)port;
71 - (void)setFencePort:(mach_port_t)port commitHandler:(void(^)(void))block;
72 #endif
73 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
74 @property BOOL colorMatchUntaggedContent;
75 #endif
76 @property (readonly) uint32_t contextId;
77 @property (strong) CALayer *layer;
78 @property CGColorSpaceRef colorSpace;
79 @end
80
81 @interface CALayer (Details)
82 - (CAContext *)context;
83 - (CGSize)size;
84 - (void *)regionBeingDrawn;
85 - (void)setContentsChanged;
86 @property BOOL acceleratesDrawing;
87 @property BOOL allowsGroupBlending;
88 @property BOOL canDrawConcurrently;
89 @property BOOL contentsOpaque;
90 @property BOOL hitTestsAsOpaque;
91 @property BOOL needsLayoutOnGeometryChange;
92 @property BOOL shadowPathIsBounds;
93 @end
94
95 @interface CATiledLayer (Details)
96 - (void)displayInRect:(CGRect)rect levelOfDetail:(int)levelOfDetail options:(NSDictionary *)dictionary;
97 - (void)setNeedsDisplayInRect:(CGRect)rect levelOfDetail:(int)levelOfDetail options:(NSDictionary *)dictionary;
98 @end
99
100 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
101 @interface CAOpenGLLayer (Details)
102 @property CGColorSpaceRef colorspace;
103 @end
104 #endif
105
106 struct CAColorMatrix {
107     float m11, m12, m13, m14, m15;
108     float m21, m22, m23, m24, m25;
109     float m31, m32, m33, m34, m35;
110     float m41, m42, m43, m44, m45;
111 };
112 typedef struct CAColorMatrix CAColorMatrix;
113
114 @interface NSValue (CADetails)
115 + (NSValue *)valueWithCAColorMatrix:(CAColorMatrix)t;
116 @end
117
118 @interface CAFilter : NSObject <NSCopying, NSMutableCopying, NSCoding>
119 @end
120
121 @interface CAFilter (Details)
122 + (CAFilter *)filterWithType:(NSString *)type;
123 @property (copy) NSString *name;
124 @end
125
126 #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
127 typedef enum {
128     kCATransactionPhasePreLayout,
129     kCATransactionPhasePreCommit,
130     kCATransactionPhasePostCommit,
131 } CATransactionPhase;
132
133 @interface CATransaction (Details)
134 + (void)addCommitHandler:(void(^)(void))block forPhase:(CATransactionPhase)phase;
135 @end
136 #endif
137 #endif // __OBJC__
138
139 #endif
140
141 EXTERN_C void CARenderServerCaptureLayerWithTransform(mach_port_t serverPort, uint32_t clientId, uint64_t layerId,
142                                                       uint32_t slotId, int32_t ox, int32_t oy, const CATransform3D *);
143
144 #if USE(IOSURFACE)
145 EXTERN_C void CARenderServerRenderLayerWithTransform(mach_port_t server_port, uint32_t client_id, uint64_t layer_id, IOSurfaceRef iosurface, int32_t ox, int32_t oy, const CATransform3D *matrix);
146 #endif
147
148
149 // FIXME: Move this into the APPLE_INTERNAL_SDK block once it's in an SDK.
150 @interface CAContext (AdditionalDetails)
151 #if (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
152 - (void)invalidateFences;
153 #endif
154 @end
155
156 EXTERN_C NSString * const kCATiledLayerRemoveImmediately;
157
158 EXTERN_C NSString * const kCAFilterColorInvert;
159 EXTERN_C NSString * const kCAFilterColorMatrix;
160 EXTERN_C NSString * const kCAFilterColorMonochrome;
161 EXTERN_C NSString * const kCAFilterColorHueRotate;
162 EXTERN_C NSString * const kCAFilterColorSaturate;
163 EXTERN_C NSString * const kCAFilterGaussianBlur;
164 EXTERN_C NSString * const kCAFilterPlusD;
165 EXTERN_C NSString * const kCAFilterPlusL;
166
167 EXTERN_C NSString * const kCAFilterNormalBlendMode;
168 EXTERN_C NSString * const kCAFilterMultiplyBlendMode;
169 EXTERN_C NSString * const kCAFilterScreenBlendMode;
170 EXTERN_C NSString * const kCAFilterOverlayBlendMode;
171 EXTERN_C NSString * const kCAFilterDarkenBlendMode;
172 EXTERN_C NSString * const kCAFilterLightenBlendMode;
173 EXTERN_C NSString * const kCAFilterColorDodgeBlendMode;
174 EXTERN_C NSString * const kCAFilterColorBurnBlendMode;
175 EXTERN_C NSString * const kCAFilterSoftLightBlendMode;
176 EXTERN_C NSString * const kCAFilterHardLightBlendMode;
177 EXTERN_C NSString * const kCAFilterDifferenceBlendMode;
178 EXTERN_C NSString * const kCAFilterExclusionBlendMode;
179
180 EXTERN_C NSString * const kCAContextDisplayName;
181 EXTERN_C NSString * const kCAContextDisplayId;
182 EXTERN_C NSString * const kCAContextIgnoresHitTest;