1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5//******************************************************************************
6// This is a copy of the coresponding android_webview/public/browser header.
7// Any changes to the interface should be made there.
8//
9// The purpose of having the copy is twofold:
10//  - it removes the need to have Chromium sources present in the tree in order
11//    to build the plat_support library,
12//  - it captures API that the corresponding Android release supports.
13//******************************************************************************
14
15#ifndef ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_SW_H_
16#define ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_SW_H_
17
18#include <jni.h>
19#include <stddef.h>
20
21#ifndef __cplusplus
22#error "Can't mix C and C++ when using jni.h"
23#endif
24
25class SkCanvasState;
26class SkPicture;
27
28static const int kAwPixelInfoVersion = 3;
29
30// Holds the information required to implement the SW draw to system canvas.
31struct AwPixelInfo {
32  int version;          // The kAwPixelInfoVersion this struct was built with.
33  SkCanvasState* state; // The externalize state in skia format.
34  // NOTE: If you add more members, bump kAwPixelInfoVersion.
35};
36
37// Function that can be called to fish out the underlying native pixel data
38// from a Java canvas object, for optimized rendering path.
39// Returns the pixel info on success, which must be freed via a call to
40// AwReleasePixelsFunction, or NULL.
41typedef AwPixelInfo* (AwAccessPixelsFunction)(JNIEnv* env, jobject canvas);
42
43// Must be called to balance every *successful* call to AwAccessPixelsFunction
44// (i.e. that returned true).
45typedef void (AwReleasePixelsFunction)(AwPixelInfo* pixels);
46
47// Called to create an Android Picture object encapsulating a native SkPicture.
48typedef jobject (AwCreatePictureFunction)(JNIEnv* env, SkPicture* picture);
49
50// Method that returns the current Skia function.
51typedef void (SkiaVersionFunction)(int* major, int* minor, int* patch);
52
53// Called to verify if the Skia versions are compatible.
54typedef bool (AwIsSkiaVersionCompatibleFunction)(SkiaVersionFunction function);
55
56static const int kAwDrawSWFunctionTableVersion = 1;
57
58// "vtable" for the functions declared in this file. An instance must be set via
59// AwContents.setAwDrawSWFunctionTable
60struct AwDrawSWFunctionTable {
61  int version;
62  AwAccessPixelsFunction* access_pixels;
63  AwReleasePixelsFunction* release_pixels;
64};
65
66#endif  // ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_SW_H_
67