| /* |
| * Copyright (C) 2017 Apple Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #pragma once |
| |
| #include "WebKitQuartzCoreAdditionsBase.h" |
| #include <QuartzCore/CoreAnimationCF.h> |
| |
| #ifndef WIN32_LEAN_AND_MEAN |
| #define WKQCA_DEFINED_WIN32_LEAN_AND_MEAN |
| #define WIN32_LEAN_AND_MEAN |
| #endif |
| |
| #include <d3d9.h> |
| #include <windows.h> |
| |
| #ifdef WKQCA_DEFINED_WIN32_LEAN_AND_MEAN |
| #undef WIN32_LEAN_AND_MEAN |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* Returns the type identifier of all WKCACFView instances. */ |
| WKQCA_EXPORT CFTypeID WKCACFViewGetTypeID(void); |
| |
| enum WKCACFViewDrawingDestination { |
| /* Drawing is done directly into the window passed to WKCACFViewUpdate. Drawing occurs |
| * automatically and asynchronously after WKCACFViewFlushContext is called. Synchronous drawing |
| * can be achieved by calling WKCACFViewDraw. */ |
| kWKCACFViewDrawingDestinationWindow = 0, |
| |
| /* Drawing is done to an image in system memory. Drawing is manually driven by the caller via |
| * the WKCACFViewCopyDrawnImage API. The window passed to WKCACFViewUpdate is still used by |
| * Direct3D for message processing, but is not drawn into. */ |
| kWKCACFViewDrawingDestinationImage, |
| }; |
| typedef enum WKCACFViewDrawingDestination WKCACFViewDrawingDestination; |
| |
| /* Creates a new view object. */ |
| WKQCA_EXPORT WKCACFViewRef WKCACFViewCreate(WKCACFViewDrawingDestination); |
| |
| /* Sets the root layer being displayed by the view. */ |
| WKQCA_EXPORT void WKCACFViewSetLayer(WKCACFViewRef, CACFLayerRef); |
| |
| /* Sets the window associated with the view. The passed-in bounds |
| * should match the window's client rect. */ |
| WKQCA_EXPORT void WKCACFViewUpdate(WKCACFViewRef, HWND window, const CGRect* bounds); |
| |
| /* Commit all changes made to view and the layer tree it references to |
| * the render tree (i.e. to the screen). This function must be called |
| * after modifying any layer properties or adding any animations to |
| * have their effect be seen. */ |
| WKQCA_EXPORT void WKCACFViewFlushContext(WKCACFViewRef); |
| |
| /* Invalidates a region of the view, i.e. causes it to be redrawn the next |
| * time the view redraws anything. */ |
| WKQCA_EXPORT void WKCACFViewInvalidateRects(WKCACFViewRef, const CGRect rects[], size_t count); |
| |
| /* Returns true if it is possible for this view to draw into the window |
| * at this time. This can return false if, e.g., the system does not |
| * meet CoreAnimation's hardware requirements. */ |
| WKQCA_EXPORT bool WKCACFViewCanDraw(WKCACFViewRef); |
| |
| /* Renders the current region needing updating into the view's window. May only be called when the |
| * view was created with kWKCACFViewDrawingDestinationWindow. */ |
| WKQCA_EXPORT void WKCACFViewDraw(WKCACFViewRef); |
| |
| /* Renders the current region needing updating and returns it as an image. imageOrigin specifies |
| * the location within the view to which the image corresponds, relative to the bottom-left. May |
| * only be called when the view was created with kWKCACFViewDrawingDestinationImage. */ |
| WKQCA_EXPORT WKCACFImageRef WKCACFViewCopyDrawnImage(WKCACFViewRef, CGPoint* imageOrigin, CFTimeInterval* nextDrawTime); |
| |
| /* Renders the entire view into the device context. */ |
| WKQCA_EXPORT void WKCACFViewDrawIntoDC(WKCACFViewRef, HDC); |
| |
| /* Sets a function to be called whenever the view's root layer has changed and needs to be redrawn. */ |
| typedef void (*WKCACFViewContextDidChangeCallback)(WKCACFViewRef view, void* info); |
| WKQCA_EXPORT void WKCACFViewSetContextDidChangeCallback(WKCACFViewRef, WKCACFViewContextDidChangeCallback, void* info); |
| |
| /* Returns the default beginTime of animations added as part of the |
| * previous transaction (i.e. the previous call to WKCACFViewFlushContext). */ |
| WKQCA_EXPORT CFTimeInterval WKCACFViewGetLastCommitTime(WKCACFViewRef); |
| |
| /* Allows for an arbitrary pointer to be associated with the view's context. */ |
| WKQCA_EXPORT void WKCACFViewSetContextUserData(WKCACFViewRef, void* userData); |
| |
| /* Set whether the view should invert colors when rendering */ |
| WKQCA_EXPORT void WKCACFViewSetShouldInvertColors(WKCACFViewRef, bool shouldInvertColors); |
| |
| /* Returns a pointer to the D3D device. The caller is responsible for retaining the object if |
| * it will be used after the function returns. */ |
| WKQCA_EXPORT IDirect3DDevice9* WKCACFViewGetD3DDevice9(WKCACFViewRef); |
| |
| #ifdef __cplusplus |
| } |
| #endif |