android_npapi.h revision 2ba37aad78022aacc4d5eca0063532222ed6b444
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 25536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger * Copyright 2009, The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 163298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* Defines the android-specific types and functions as part of npapi 27a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project In particular, defines the window and event types that are passed to 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPN_GetValue, NPP_SetWindow and NPP_HandleEvent. 30a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project To minimize what native libraries the plugin links against, some 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project functionality is provided via function-ptrs (e.g. time, sound) 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef android_npapi_H 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define android_npapi_H 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdint.h> 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npapi.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// General types 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPBitmapFormats { 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUnknown_ANPBitmapFormat = 0, 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRGBA_8888_ANPBitmapFormat = 1, 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRGB_565_ANPBitmapFormat = 2 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPBitmapFormat; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPPixelPacking { 53a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t AShift; 54a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t ABits; 55a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t RShift; 56a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t RBits; 57a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t GShift; 58a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t GBits; 59a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t BShift; 60a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed uint8_t BBits; 61a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed}; 62a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPBitmap { 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* baseAddr; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPBitmapFormat format; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t width; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t height; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t rowBytes; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectF { 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float left; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float top; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float right; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float bottom; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectI { 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t left; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t top; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t right; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t bottom; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvas; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrix; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaint; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPath; 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRegion; 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypeface; 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPMatrixFlags { 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kIdentity_ANPMatrixFlag = 0, 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kTranslate_ANPMatrixFlag = 0x01, 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kScale_ANPMatrixFlag = 0x02, 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kAffine_ANPMatrixFlag = 0x04, 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kPerspective_ANPMatrixFlag = 0x08, 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPMatrixFlag; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NPN_GetValue 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 104ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** queries for a specific ANPInterface. 105a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Maybe called with NULL for the NPP instance 107a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPN_GetValue(inst, interface_enum, ANPInterface*) 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kLogInterfaceV0_ANPGetValue ((NPNVariable)1000) 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kAudioTrackInterfaceV0_ANPGetValue ((NPNVariable)1001) 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kCanvasInterfaceV0_ANPGetValue ((NPNVariable)1002) 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kMatrixInterfaceV0_ANPGetValue ((NPNVariable)1003) 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kPaintInterfaceV0_ANPGetValue ((NPNVariable)1004) 1152ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kPathInterfaceV0_ANPGetValue ((NPNVariable)1005) 1162ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kTypefaceInterfaceV0_ANPGetValue ((NPNVariable)1006) 1172ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kWindowInterfaceV0_ANPGetValue ((NPNVariable)1007) 118a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define kBitmapInterfaceV0_ANPGetValue ((NPNVariable)1008) 119f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger#define kSurfaceInterfaceV0_ANPGetValue ((NPNVariable)1009) 1200a2bed53555947aea37912d694f9c7c376490808Grace Kloba#define kSystemInterfaceV0_ANPGetValue ((NPNVariable)1010) 12156074874733a95498646a3fc575ef62fd9218f58Mike Reed#define kEventInterfaceV0_ANPGetValue ((NPNVariable)1011) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12349bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger#define kAudioTrackInterfaceV1_ANPGetValue ((NPNVariable)1012) 1246ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger#define kOpenGLInterfaceV0_ANPGetValue ((NPNVariable)1013) 1251f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger#define kWindowInterfaceV1_ANPGetValue ((NPNVariable)1014) 126136290ef021ff9a9bf9152124a5fa42069acfdfcDerek Sollenberger#define kVideoInterfaceV0_ANPGetValue ((NPNVariable)1015) 1279bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger#define kSystemInterfaceV1_ANPGetValue ((NPNVariable)1016) 12849bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger 1292ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger#define kSystemInterfaceV2_ANPGetValue ((NPNVariable)1017) 1302ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger 131838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger/** queries for the drawing models supported on this device. 132a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 133838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger NPN_GetValue(inst, kSupportedDrawingModel_ANPGetValue, uint32_t* bits) 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kSupportedDrawingModel_ANPGetValue ((NPNVariable)2000) 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13727a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger/** queries for the context (android.content.Context) of the plugin. If no 13827a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger instance is specified the application's context is returned. If the instance 13927a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger is given then the context returned is identical to the context used to 14027a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger create the webview in which that instance resides. 14127a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger 14227a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger NOTE: Holding onto a non-application context after your instance has been 14327a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger destroyed will cause a memory leak. Refer to the android documentation to 14427a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger determine what context is best suited for your particular scenario. 145838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger 146838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger NPN_GetValue(inst, kJavaContext_ANPGetValue, jobject context) 147838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger */ 148838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger#define kJavaContext_ANPGetValue ((NPNVariable)2001) 149838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 15156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger// NPN_SetValue 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15310d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger/** Request to set the drawing model. SetValue will return false if the drawing 15410d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger model is not supported or has insufficient information for configuration. 155a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 15610d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger NPN_SetValue(inst, kRequestDrawingModel_ANPSetValue, (void*)foo_ANPDrawingModel) 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kRequestDrawingModel_ANPSetValue ((NPPVariable)1000) 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1605536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger/** These are used as bitfields in ANPSupportedDrawingModels_EnumValue, 1615536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger and as-is in ANPRequestDrawingModel_EnumValue. The drawing model determines 1625536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger how to interpret the ANPDrawingContext provided in the Draw event and how 1635536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger to interpret the NPWindow->window field. 1645536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger */ 1655536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenbergerenum ANPDrawingModels { 1665536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger /** Draw into a bitmap from the browser thread in response to a Draw event. 1675536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger NPWindow->window is reserved (ignore) 1685536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger */ 169838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kBitmap_ANPDrawingModel = 1 << 0, 1705536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger /** Draw into a surface (e.g. raster, openGL, etc.) using the Java surface 1715536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger interface. When this model is used the browser will invoke the Java 1721a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger class specified in the plugin's apk manifest. From that class the browser 1731a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger will invoke the appropriate method to return an an instance of a android 1741a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger Java View. The instance is then embedded in the html. The plugin can then 1751a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger manipulate the view as it would any normal Java View in android. 1765536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger 1775536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger Unlike the bitmap model, a surface model is opaque so no html content 1785536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger behind the plugin will be visible. Unless the plugin needs to be 1795536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger transparent the surface model should be chosen over the bitmap model as 1805536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger it will have better performance. 1815536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger 1825536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger Further, a plugin can manipulate some surfaces in native code using the 1835536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger ANPSurfaceInterface. This interface can be used to manipulate Java 1845536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger objects that extend Surface.class by allowing them to access the 1855536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger surface's underlying bitmap in native code. For instance, if a raster 1865536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger surface is used the plugin can lock, draw directly into the bitmap, and 1875536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger unlock the surface in native code without making JNI calls to the Java 1885536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger surface object. 1895536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger */ 190838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kSurface_ANPDrawingModel = 1 << 1, 1916ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger kOpenGL_ANPDrawingModel = 1 << 2, 1925536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger}; 1935536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenbergertypedef int32_t ANPDrawingModel; 1945536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger 195243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger/** Request to receive/disable events. If the pointer is NULL then all flags will 196243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger be disabled. Otherwise, the event type will be enabled iff its corresponding 19756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger bit in the EventFlags bit field is set. 19856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 19956ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger NPN_SetValue(inst, ANPAcceptEvents, (void*)EventFlags) 20056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */ 2011a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger#define kAcceptEvents_ANPSetValue ((NPPVariable)1001) 20256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 203ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** The EventFlags are a set of bits used to determine which types of events the 20456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger plugin wishes to receive. For example, if the value is 0x03 then both key 20556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger and touch events will be provided to the plugin. 20656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */ 20756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergerenum ANPEventFlag { 208243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger kKey_ANPEventFlag = 0x01, 209243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger kTouch_ANPEventFlag = 0x02, 21056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger}; 21156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergertypedef uint32_t ANPEventFlags; 21256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 213838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger/////////////////////////////////////////////////////////////////////////////// 214838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger// NPP_GetValue 215838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger 216838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger/** Requests that the plugin return a java surface to be displayed. This will 217838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger only be used if the plugin has choosen the kSurface_ANPDrawingModel. 218838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger 219838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger NPP_GetValue(inst, kJavaSurface_ANPGetValue, jobject surface) 220838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger */ 221838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger#define kJavaSurface_ANPGetValue ((NPPVariable)2000) 222838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger 2235536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger 2245536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger/////////////////////////////////////////////////////////////////////////////// 2255536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger// ANDROID INTERFACE DEFINITIONS 2265536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger 227ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** Interfaces provide additional functionality to the plugin via function ptrs. 228ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger Once an interface is retrieved, it is valid for the lifetime of the plugin 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (just like browserfuncs). 230a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project All ANPInterfaces begin with an inSize field, which must be set by the 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project caller (plugin) with the number of bytes allocated for the interface. 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project e.g. SomeInterface si; si.inSize = sizeof(si); browser->getvalue(..., &si); 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPInterface { 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t inSize; // size (in bytes) of this struct 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPLogTypes { 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kError_ANPLogType = 0, // error 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kWarning_ANPLogType = 1, // warning 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kDebug_ANPLogType = 2 // debug only (informational) 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPLogType; 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPLogInterfaceV0 : ANPInterface { 247ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** dumps printf messages to the log file 248ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger e.g. interface->log(instance, kWarning_ANPLogType, "value is %d", value); 249ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger */ 25024ba66f9ba2dae444192c4860c7b57c4289d4d5cDerek Sollenberger void (*log)(ANPLogType, const char format[], ...); 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 253a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPBitmapInterfaceV0 : ANPInterface { 254a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed /** Returns true if the specified bitmap format is supported, and if packing 255a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed is non-null, sets it to the packing info for that format. 256a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed */ 257a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed bool (*getPixelPacking)(ANPBitmapFormat, ANPPixelPacking* packing); 258a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed}; 259a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrixInterfaceV0 : ANPInterface { 261ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return a new identity matrix 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPMatrix* (*newMatrix)(); 264ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Delete a matrix previously allocated by newMatrix() 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deleteMatrix)(ANPMatrix*); 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPMatrixFlag (*getFlags)(const ANPMatrix*); 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*copy)(ANPMatrix* dst, const ANPMatrix* src); 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 272ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return the matrix values in a float array (allcoated by the caller), 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project where the values are treated as follows: 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project w = x * [6] + y * [7] + [8]; 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project x' = (x * [0] + y * [1] + [2]) / w; 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project y' = (x * [3] + y * [4] + [5]) / w; 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*get3x3)(const ANPMatrix*, float[9]); 279ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Initialize the matrix from values in a float array, 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project where the values are treated as follows: 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project w = x * [6] + y * [7] + [8]; 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project x' = (x * [0] + y * [1] + [2]) / w; 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project y' = (x * [3] + y * [4] + [5]) / w; 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*set3x3)(ANPMatrix*, const float[9]); 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setIdentity)(ANPMatrix*); 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preTranslate)(ANPMatrix*, float tx, float ty); 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postTranslate)(ANPMatrix*, float tx, float ty); 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preScale)(ANPMatrix*, float sx, float sy); 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postScale)(ANPMatrix*, float sx, float sy); 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preSkew)(ANPMatrix*, float kx, float ky); 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postSkew)(ANPMatrix*, float kx, float ky); 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preRotate)(ANPMatrix*, float degrees); 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postRotate)(ANPMatrix*, float degrees); 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preConcat)(ANPMatrix*, const ANPMatrix*); 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postConcat)(ANPMatrix*, const ANPMatrix*); 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 299ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return true if src is invertible, and if so, return its inverse in dst. 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If src is not invertible, return false and ignore dst. 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*invert)(ANPMatrix* dst, const ANPMatrix* src); 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 304ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Transform the x,y pairs in src[] by this matrix, and store the results 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project in dst[]. The count parameter is treated as the number of pairs in the 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array. It is legal for src and dst to point to the same memory, but 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project illegal for the two arrays to partially overlap. 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*mapPoints)(ANPMatrix*, float dst[], const float src[], 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t count); 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3134603aa50552a853aa7aedcd809460a83586daa53Mike Reedstruct ANPPathInterfaceV0 : ANPInterface { 314ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return a new path */ 3154603aa50552a853aa7aedcd809460a83586daa53Mike Reed ANPPath* (*newPath)(); 3164603aa50552a853aa7aedcd809460a83586daa53Mike Reed 317ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Delete a path previously allocated by ANPPath() */ 3184603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*deletePath)(ANPPath*); 3194603aa50552a853aa7aedcd809460a83586daa53Mike Reed 320ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Make a deep copy of the src path, into the dst path (already allocated 321ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger by the caller). 3224603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 3234603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*copy)(ANPPath* dst, const ANPPath* src); 3244603aa50552a853aa7aedcd809460a83586daa53Mike Reed 325ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Returns true if the two paths are the same (i.e. have the same points) 3264603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 3274603aa50552a853aa7aedcd809460a83586daa53Mike Reed bool (*equal)(const ANPPath* path0, const ANPPath* path1); 3284603aa50552a853aa7aedcd809460a83586daa53Mike Reed 329ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Remove any previous points, initializing the path back to empty. */ 3304603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*reset)(ANPPath*); 3314603aa50552a853aa7aedcd809460a83586daa53Mike Reed 332ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return true if the path is empty (has no lines, quads or cubics). */ 3334603aa50552a853aa7aedcd809460a83586daa53Mike Reed bool (*isEmpty)(const ANPPath*); 3344603aa50552a853aa7aedcd809460a83586daa53Mike Reed 335ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return the path's bounds in bounds. */ 3364603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*getBounds)(const ANPPath*, ANPRectF* bounds); 3374603aa50552a853aa7aedcd809460a83586daa53Mike Reed 3384603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*moveTo)(ANPPath*, float x, float y); 3394603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*lineTo)(ANPPath*, float x, float y); 3404603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*quadTo)(ANPPath*, float x0, float y0, float x1, float y1); 3414603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*cubicTo)(ANPPath*, float x0, float y0, float x1, float y1, 3424603aa50552a853aa7aedcd809460a83586daa53Mike Reed float x2, float y2); 3434603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*close)(ANPPath*); 3444603aa50552a853aa7aedcd809460a83586daa53Mike Reed 345ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Offset the src path by [dx, dy]. If dst is null, apply the 3464603aa50552a853aa7aedcd809460a83586daa53Mike Reed change directly to the src path. If dst is not null, write the 3474603aa50552a853aa7aedcd809460a83586daa53Mike Reed changed path into dst, and leave the src path unchanged. In that case 3484603aa50552a853aa7aedcd809460a83586daa53Mike Reed dst must have been previously allocated by the caller. 3494603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 3504603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*offset)(ANPPath* src, float dx, float dy, ANPPath* dst); 3514603aa50552a853aa7aedcd809460a83586daa53Mike Reed 352ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Transform the path by the matrix. If dst is null, apply the 3534603aa50552a853aa7aedcd809460a83586daa53Mike Reed change directly to the src path. If dst is not null, write the 3544603aa50552a853aa7aedcd809460a83586daa53Mike Reed changed path into dst, and leave the src path unchanged. In that case 3554603aa50552a853aa7aedcd809460a83586daa53Mike Reed dst must have been previously allocated by the caller. 3564603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 3574603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*transform)(ANPPath* src, const ANPMatrix*, ANPPath* dst); 3584603aa50552a853aa7aedcd809460a83586daa53Mike Reed}; 3594603aa50552a853aa7aedcd809460a83586daa53Mike Reed 360a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed/** ANPColor is always defined to have the same packing on all platforms, and 361a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed it is always unpremultiplied. 3620fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger 363a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed This is in contrast to 32bit format(s) in bitmaps, which are premultiplied, 364a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed and their packing may vary depending on the platform, hence the need for 365a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ANPBitmapInterface::getPixelPacking() 366a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed */ 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPColor; 368a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_ASHIFT 24 369a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_RSHIFT 16 370a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_GSHIFT 8 371a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_BSHIFT 0 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ANP_MAKE_COLOR(a, r, g, b) \ 373a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed (((a) << ANPColor_ASHIFT) | \ 374a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ((r) << ANPColor_RSHIFT) | \ 375a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ((g) << ANPColor_GSHIFT) | \ 376a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ((b) << ANPColor_BSHIFT)) 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintFlag { 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kAntiAlias_ANPPaintFlag = 1 << 0, 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFilterBitmap_ANPPaintFlag = 1 << 1, 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kDither_ANPPaintFlag = 1 << 2, 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUnderlineText_ANPPaintFlag = 1 << 3, 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kStrikeThruText_ANPPaintFlag = 1 << 4, 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFakeBoldText_ANPPaintFlag = 1 << 5, 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPPaintFlags; 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintStyles { 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFill_ANPPaintStyle = 0, 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kStroke_ANPPaintStyle = 1, 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFillAndStroke_ANPPaintStyle = 2 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintStyle; 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintCaps { 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kButt_ANPPaintCap = 0, 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRound_ANPPaintCap = 1, 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kSquare_ANPPaintCap = 2 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintCap; 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintJoins { 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kMiter_ANPPaintJoin = 0, 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRound_ANPPaintJoin = 1, 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kBevel_ANPPaintJoin = 2 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintJoin; 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintAligns { 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kLeft_ANPPaintAlign = 0, 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kCenter_ANPPaintAlign = 1, 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRight_ANPPaintAlign = 2 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintAlign; 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTextEncodings { 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUTF8_ANPTextEncoding = 0, 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUTF16_ANPTextEncoding = 1, 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTextEncoding; 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTypefaceStyles { 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kBold_ANPTypefaceStyle = 1 << 0, 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kItalic_ANPTypefaceStyle = 1 << 1 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPTypefaceStyle; 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reedtypedef uint32_t ANPFontTableTag; 429b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPFontMetrics { 431ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** The greatest distance above the baseline for any glyph (will be <= 0) */ 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fTop; 433ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** The recommended distance above the baseline (will be <= 0) */ 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fAscent; 435ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** The recommended distance below the baseline (will be >= 0) */ 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fDescent; 437ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** The greatest distance below the baseline for any glyph (will be >= 0) */ 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fBottom; 439ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** The recommended distance to add between lines of text (will be >= 0) */ 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fLeading; 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypefaceInterfaceV0 : ANPInterface { 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return a new reference to the typeface that most closely matches the 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project requested name and style. Pass null as the name to return 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the default font for the requested style. Will never return null 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4481c97c8027a51a511742fcabf75365e3b5a35828eMike Reed The 5 generic font names "serif", "sans-serif", "monospace", "cursive", 4491c97c8027a51a511742fcabf75365e3b5a35828eMike Reed "fantasy" are recognized, and will be mapped to their logical font 4501c97c8027a51a511742fcabf75365e3b5a35828eMike Reed automatically by this call. 4511c97c8027a51a511742fcabf75365e3b5a35828eMike Reed 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param name May be NULL. The name of the font family. 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param style The style (normal, bold, italic) of the typeface. 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @return reference to the closest-matching typeface. Caller must call 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unref() when they are done with the typeface. 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypeface* (*createFromName)(const char name[], ANPTypefaceStyle); 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return a new reference to the typeface that most closely matches the 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project requested typeface and specified Style. Use this call if you want to 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pick a new style from the same family of the existing typeface. 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If family is NULL, this selects from the default font's family. 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param family May be NULL. The name of the existing type face. 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param s The style (normal, bold, italic) of the type face. 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @return reference to the closest-matching typeface. Call must call 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unref() when they are done. 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypeface* (*createFromTypeface)(const ANPTypeface* family, 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypefaceStyle); 471a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the owner count of the typeface. A newly created typeface has an 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project owner count of 1. When the owner count is reaches 0, the typeface is 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project deleted. 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t (*getRefCount)(const ANPTypeface*); 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Increment the owner count on the typeface 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*ref)(ANPTypeface*); 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Decrement the owner count on the typeface. When the count goes to 0, 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the typeface is deleted. 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*unref)(ANPTypeface*); 486a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the style bits for the specified typeface 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypefaceStyle (*getStyle)(const ANPTypeface*); 490b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed 4913cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed /** Some fonts are stored in files. If that is true for the fontID, then 4923cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed this returns the byte length of the full file path. If path is not null, 4933cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed then the full path is copied into path (allocated by the caller), up to 4943cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed length bytes. If index is not null, then it is set to the truetype 4953cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed collection index for this font, or 0 if the font is not in a collection. 4963cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed 4973cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed Note: getFontPath does not assume that path is a null-terminated string, 4983cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed so when it succeeds, it only copies the bytes of the file name and 4993cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed nothing else (i.e. it copies exactly the number of bytes returned by the 5003cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed function. If the caller wants to treat path[] as a C string, it must be 5013cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed sure that it is allocated at least 1 byte larger than the returned size, 5023cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed and it must copy in the terminating 0. 5033cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed 5043cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed If the fontID does not correspond to a file, then the function returns 5053cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed 0, and the path and index parameters are ignored. 5063cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed 5073cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed @param fontID The font whose file name is being queried 5083cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed @param path Either NULL, or storage for receiving up to length bytes 5093cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed of the font's file name. Allocated by the caller. 5103cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed @param length The maximum space allocated in path (by the caller). 5113cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed Ignored if path is NULL. 5123cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed @param index Either NULL, or receives the TTC index for this font. 5133cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed If the font is not a TTC, then will be set to 0. 5143cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed @return The byte length of th font's file name, or 0 if the font is not 5153cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed baked by a file. 5163cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed */ 5173cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed int32_t (*getFontPath)(const ANPTypeface*, char path[], int32_t length, 5183cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed int32_t* index); 5193cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed 5201c97c8027a51a511742fcabf75365e3b5a35828eMike Reed /** Return a UTF8 encoded path name for the font directory, or NULL if not 5211c97c8027a51a511742fcabf75365e3b5a35828eMike Reed supported. If returned, this string address will be valid for the life 52210d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger of the plugin instance. It will always end with a '/' character. 523b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed */ 524ae107e96f52ebe258a8ef5f32100c77ededc2d34Mike Reed const char* (*getFontDirectoryPath)(); 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaintInterfaceV0 : ANPInterface { 528ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return a new paint object, which holds all of the color and style 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project attributes that affect how things (geometry, text, bitmaps) are drawn 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project in a ANPCanvas. 531a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project The paint that is returned is not tied to any particular plugin 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project instance, but it must only be accessed from one thread at a time. 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaint* (*newPaint)(); 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deletePaint)(ANPPaint*); 537a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintFlags (*getFlags)(const ANPPaint*); 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setFlags)(ANPPaint*, ANPPaintFlags); 540a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPColor (*getColor)(const ANPPaint*); 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setColor)(ANPPaint*, ANPColor); 543a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintStyle (*getStyle)(const ANPPaint*); 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStyle)(ANPPaint*, ANPPaintStyle); 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getStrokeWidth)(const ANPPaint*); 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getStrokeMiter)(const ANPPaint*); 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintCap (*getStrokeCap)(const ANPPaint*); 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintJoin (*getStrokeJoin)(const ANPPaint*); 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeWidth)(ANPPaint*, float); 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeMiter)(ANPPaint*, float); 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeCap)(ANPPaint*, ANPPaintCap); 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeJoin)(ANPPaint*, ANPPaintJoin); 555a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTextEncoding (*getTextEncoding)(const ANPPaint*); 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintAlign (*getTextAlign)(const ANPPaint*); 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getTextSize)(const ANPPaint*); 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getTextScaleX)(const ANPPaint*); 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getTextSkewX)(const ANPPaint*); 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextEncoding)(ANPPaint*, ANPTextEncoding); 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextAlign)(ANPPaint*, ANPPaintAlign); 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextSize)(ANPPaint*, float); 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextScaleX)(ANPPaint*, float); 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextSkewX)(ANPPaint*, float); 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the typeface ine paint, or null if there is none. This does not 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project modify the owner count of the returned typeface. 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypeface* (*getTypeface)(const ANPPaint*); 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Set the paint's typeface. If the paint already had a non-null typeface, 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project its owner count is decremented. If the new typeface is non-null, its 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project owner count is incremented. 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTypeface)(ANPPaint*, ANPTypeface*); 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the width of the text. If bounds is not null, return the bounds 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of the text in that rectangle. 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*measureText)(ANPPaint*, const void* text, uint32_t byteLength, 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPRectF* bounds); 583a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the number of unichars specifed by the text. 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If widths is not null, returns the array of advance widths for each 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unichar. 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If bounds is not null, returns the array of bounds for each unichar. 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int (*getTextWidths)(ANPPaint*, const void* text, uint32_t byteLength, 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float widths[], ANPRectF bounds[]); 591a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return in metrics the spacing values for text, respecting the paint's 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typeface and pointsize, and return the spacing between lines 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (descent - ascent + leading). If metrics is NULL, it will be ignored. 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getFontMetrics)(ANPPaint*, ANPFontMetrics* metrics); 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvasInterfaceV0 : ANPInterface { 600ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return a canvas that will draw into the specified bitmap. Note: the 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project canvas copies the fields of the bitmap, so it need not persist after 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this call, but the canvas DOES point to the same pixel memory that the 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bitmap did, so the canvas should not be used after that pixel memory 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project goes out of scope. In the case of creating a canvas to draw into the 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pixels provided by kDraw_ANPEventType, those pixels are only while 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project handling that event. 607a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project The canvas that is returned is not tied to any particular plugin 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project instance, but it must only be accessed from one thread at a time. 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPCanvas* (*newCanvas)(const ANPBitmap*); 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deleteCanvas)(ANPCanvas*); 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*save)(ANPCanvas*); 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*restore)(ANPCanvas*); 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*translate)(ANPCanvas*, float tx, float ty); 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*scale)(ANPCanvas*, float sx, float sy); 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*rotate)(ANPCanvas*, float degrees); 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*skew)(ANPCanvas*, float kx, float ky); 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*concat)(ANPCanvas*, const ANPMatrix*); 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*clipRect)(ANPCanvas*, const ANPRectF*); 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*clipPath)(ANPCanvas*, const ANPPath*); 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 624ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return the current matrix on the canvas 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*getTotalMatrix)(ANPCanvas*, ANPMatrix*); 627ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return the current clip bounds in local coordinates, expanding it to 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project account for antialiasing edge effects if aa is true. If the 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project current clip is empty, return false and ignore the bounds argument. 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*getLocalClipBounds)(ANPCanvas*, ANPRectF* bounds, bool aa); 632ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger /** Return the current clip bounds in device coordinates in bounds. If the 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project current clip is empty, return false and ignore the bounds argument. 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*getDeviceClipBounds)(ANPCanvas*, ANPRectI* bounds); 6364603aa50552a853aa7aedcd809460a83586daa53Mike Reed 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawColor)(ANPCanvas*, ANPColor); 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawPaint)(ANPCanvas*, const ANPPaint*); 6394603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*drawLine)(ANPCanvas*, float x0, float y0, float x1, float y1, 6404603aa50552a853aa7aedcd809460a83586daa53Mike Reed const ANPPaint*); 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawRect)(ANPCanvas*, const ANPRectF*, const ANPPaint*); 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawOval)(ANPCanvas*, const ANPRectF*, const ANPPaint*); 6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawPath)(ANPCanvas*, const ANPPath*, const ANPPaint*); 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawText)(ANPCanvas*, const void* text, uint32_t byteLength, 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float x, float y, const ANPPaint*); 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawPosText)(ANPCanvas*, const void* text, uint32_t byteLength, 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const float xy[], const ANPPaint*); 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawBitmap)(ANPCanvas*, const ANPBitmap*, float x, float y, 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ANPPaint*); 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawBitmapRect)(ANPCanvas*, const ANPBitmap*, 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ANPRectI* src, const ANPRectF* dst, 6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ANPPaint*); 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPWindowInterfaceV0 : ANPInterface { 656e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger /** Registers a set of rectangles that the plugin would like to keep on 657e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger screen. The rectangles are listed in order of priority with the highest 658e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger priority rectangle in location rects[0]. The browser will attempt to keep 659e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger as many of the rectangles on screen as possible and will scroll them into 660e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger view in response to the invocation of this method and other various events. 661e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger The count specifies how many rectangles are in the array. If the count is 662e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger zero it signals the browser that any existing rectangles should be cleared 663e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger and no rectangles will be tracked. 664e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger */ 665e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger void (*setVisibleRects)(NPP instance, const ANPRectI rects[], int32_t count); 666e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger /** Clears any rectangles that are being tracked as a result of a call to 667e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger setVisibleRects. This call is equivalent to setVisibleRect(inst, NULL, 0). 668e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger */ 669e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger void (*clearVisibleRects)(NPP instance); 6705c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger /** Given a boolean value of true the device will be requested to provide 6715c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger a keyboard. A value of false will result in a request to hide the 6725c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger keyboard. Further, the on-screen keyboard will not be displayed if a 6735c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger physical keyboard is active. 6745c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger */ 6755c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger void (*showKeyboard)(NPP instance, bool value); 676e23a6d30242a5dbcdce40e708e0f97b21d06c2afDerek Sollenberger /** Called when a plugin wishes to enter into full screen mode. The plugin's 6771a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger Java class (defined in the plugin's apk manifest) will be called 6781a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger asynchronously to provide a View object to be displayed full screen. 679e23a6d30242a5dbcdce40e708e0f97b21d06c2afDerek Sollenberger */ 680e23a6d30242a5dbcdce40e708e0f97b21d06c2afDerek Sollenberger void (*requestFullScreen)(NPP instance); 681dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger /** Called when a plugin wishes to exit from full screen mode. As a result, 682dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger the plugin's full screen view will be discarded by the view system. 683dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger */ 684dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger void (*exitFullScreen)(NPP instance); 6852952bfa29c6990f198b901a6f1d230c52c5d6bd6Grace Kloba /** Called when a plugin wishes to be zoomed and centered in the current view. 6862952bfa29c6990f198b901a6f1d230c52c5d6bd6Grace Kloba */ 6871c7e1d1ea3bcd169a6323fe04dc9fdf8e78e035fBart Sears void (*requestCenterFitZoom)(NPP instance); 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6901f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenbergerstruct ANPWindowInterfaceV1 : ANPWindowInterfaceV0 { 6911f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger /** Returns a rectangle representing the visible area of the plugin on 6921f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger screen. The coordinates are relative to the size of the plugin in the 6931f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger document and therefore will never be negative or exceed the plugin's size. 6941f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger */ 6951f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger ANPRectI (*visibleRect)(NPP instance); 6961f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger}; 6971f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPSampleFormats { 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUnknown_ANPSamleFormat = 0, 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kPCM16Bit_ANPSampleFormat = 1, 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kPCM8Bit_ANPSampleFormat = 2 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPSampleFormat; 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** The audio buffer is passed to the callback proc to request more samples. 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project It is owned by the system, and the callback may read it, but should not 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project maintain a pointer to it outside of the scope of the callback proc. 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioBuffer { 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // RO - repeat what was specified in newTrack() 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t channelCount; 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // RO - repeat what was specified in newTrack() 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPSampleFormat format; 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** This buffer is owned by the caller. Inside the callback proc, up to 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "size" bytes of sample data should be written into this buffer. The 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project address is only valid for the scope of a single invocation of the 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project callback proc. 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* bufferData; 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** On input, specifies the maximum number of bytes that can be written 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project to "bufferData". On output, specifies the actual number of bytes that 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the callback proc wrote into "bufferData". 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t size; 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPAudioEvents { 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** This event is passed to the callback proc when the audio-track needs 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project more sample data written to the provided buffer parameter. 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kMoreData_ANPAudioEvent = 0, 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** This event is passed to the callback proc if the audio system runs out 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of sample data. In this event, no buffer parameter will be specified 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (i.e. NULL will be passed to the 3rd parameter). 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUnderRun_ANPAudioEvent = 1 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPAudioEvent; 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Called to feed sample data to the track. This will be called in a separate 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project thread. However, you may call trackStop() from the callback (but you 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cannot delete the track). 745a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project For example, when you have written the last chunk of sample data, you can 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project immediately call trackStop(). This will take effect after the current 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project buffer has been played. 749a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project The "user" parameter is the same value that was passed to newTrack() 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (*ANPAudioCallbackProc)(ANPAudioEvent event, void* user, 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPAudioBuffer* buffer); 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrack; // abstract type for audio tracks 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrackInterfaceV0 : ANPInterface { 758eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** Create a new audio track, or NULL on failure. The track is initially in 759eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger the stopped state and therefore ANPAudioCallbackProc will not be called 760eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger until the track is started. 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPAudioTrack* (*newTrack)(uint32_t sampleRate, // sampling rate in Hz 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPSampleFormat, 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int channelCount, // MONO=1, STEREO=2 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPAudioCallbackProc, 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* user); 767eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** Deletes a track that was created using newTrack. The track can be 768eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger deleted in any state and it waits for the ANPAudioCallbackProc thread 769eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger to exit before returning. 770eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deleteTrack)(ANPAudioTrack*); 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*start)(ANPAudioTrack*); 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*pause)(ANPAudioTrack*); 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*stop)(ANPAudioTrack*); 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Returns true if the track is not playing (e.g. pause or stop was called, 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project or start was never called. 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*isStopped)(ANPAudioTrack*); 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 78249bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenbergerstruct ANPAudioTrackInterfaceV1 : ANPAudioTrackInterfaceV0 { 78349bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger /** Returns the track's latency in milliseconds. */ 78449bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger uint32_t (*trackLatency)(ANPAudioTrack*); 78549bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger}; 78649bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 7885536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger// DEFINITION OF VALUES PASSED THROUGH NPP_HandleEvent 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPEventTypes { 7913d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger kNull_ANPEventType = 0, 7923d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger kKey_ANPEventType = 1, 793eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** Mouse events are triggered by either clicking with the navigational pad 794eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger or by tapping the touchscreen (if the kDown_ANPTouchAction is handled by 795eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger the plugin then no mouse event is generated). The kKey_ANPEventFlag has 796eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger to be set to true in order to receive these events. 797eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 798d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger kMouse_ANPEventType = 2, 799eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** Touch events are generated when the user touches on the screen. The 800eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger kTouch_ANPEventFlag has to be set to true in order to receive these 801eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger events. 802eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 803d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger kTouch_ANPEventType = 3, 804eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** Only triggered by a plugin using the kBitmap_ANPDrawingModel. This event 805eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger signals that the plugin needs to redraw itself into the provided bitmap. 806eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 807d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger kDraw_ANPEventType = 4, 808d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger kLifecycle_ANPEventType = 5, 80956074874733a95498646a3fc575ef62fd9218f58Mike Reed 81056074874733a95498646a3fc575ef62fd9218f58Mike Reed /** This event type is completely defined by the plugin. 81156074874733a95498646a3fc575ef62fd9218f58Mike Reed When creating an event, the caller must always set the first 81256074874733a95498646a3fc575ef62fd9218f58Mike Reed two fields, the remaining data is optional. 81356074874733a95498646a3fc575ef62fd9218f58Mike Reed ANPEvent evt; 81456074874733a95498646a3fc575ef62fd9218f58Mike Reed evt.inSize = sizeof(ANPEvent); 81556074874733a95498646a3fc575ef62fd9218f58Mike Reed evt.eventType = kCustom_ANPEventType 81656074874733a95498646a3fc575ef62fd9218f58Mike Reed // other data slots are optional 81756074874733a95498646a3fc575ef62fd9218f58Mike Reed evt.other[] = ...; 81856074874733a95498646a3fc575ef62fd9218f58Mike Reed To post a copy of the event, call 81956074874733a95498646a3fc575ef62fd9218f58Mike Reed eventInterface->postEvent(myNPPInstance, &evt); 82056074874733a95498646a3fc575ef62fd9218f58Mike Reed That call makes a copy of the event struct, and post that on the event 82156074874733a95498646a3fc575ef62fd9218f58Mike Reed queue for the plugin. 82256074874733a95498646a3fc575ef62fd9218f58Mike Reed */ 823aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger kCustom_ANPEventType = 6, 824aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger /** MultiTouch events are generated when the user touches on the screen. The 825aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger kTouch_ANPEventFlag has to be set to true in order to receive these 826aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger events. This type is a replacement for the older kTouch_ANPEventType. 827aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger */ 828aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger kMultiTouch_ANPEventType = 7, 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPEventType; 8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyActions { 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kDown_ANPKeyAction = 0, 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUp_ANPKeyAction = 1, 8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyAction; 8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ANPKeyCodes.h" 8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyCode; 8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyModifiers { 8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kAlt_ANPKeyModifier = 1 << 0, 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kShift_ANPKeyModifier = 1 << 1, 8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// bit-field containing some number of ANPKeyModifier bits 8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPKeyModifier; 8478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergerenum ANPMouseActions { 849d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger kDown_ANPMouseAction = 0, 850d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger kUp_ANPMouseAction = 1, 851d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger}; 852d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergertypedef int32_t ANPMouseAction; 853d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger 8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTouchActions { 855eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** This occurs when the user first touches on the screen. As such, this 856eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger action will always occur prior to any of the other touch actions. If 857eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger the plugin chooses to not handle this action then no other events 858eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger related to that particular touch gesture will be generated. 859eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 8603d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba kDown_ANPTouchAction = 0, 8613d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba kUp_ANPTouchAction = 1, 8623d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba kMove_ANPTouchAction = 2, 8633d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba kCancel_ANPTouchAction = 3, 8643d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba // The web view will ignore the return value from the following actions 8653d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba kLongPress_ANPTouchAction = 4, 8663d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba kDoubleTap_ANPTouchAction = 5, 8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTouchAction; 8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 870a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergerenum ANPLifecycleActions { 871eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** The web view containing this plugin has been paused. See documentation 872eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger on the android activity lifecycle for more information. 873eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 874cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger kPause_ANPLifecycleAction = 0, 875eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** The web view containing this plugin has been resumed. See documentation 876eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger on the android activity lifecycle for more information. 877eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 878838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kResume_ANPLifecycleAction = 1, 879eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** The plugin has focus and is now the recipient of input events (e.g. key, 880eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger touch, etc.) 881eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 882838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kGainFocus_ANPLifecycleAction = 2, 883eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** The plugin has lost focus and will not receive any input events until it 884eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger regains focus. This event is always preceded by a GainFocus action. 885eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 886838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kLoseFocus_ANPLifecycleAction = 3, 887eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger /** The browser is running low on available memory and is requesting that 888eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger the plugin free any unused/inactive resources to prevent a performance 889eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger degradation. 890eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger */ 891838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kFreeMemory_ANPLifecycleAction = 4, 892243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger /** The page has finished loading. This happens when the page's top level 893243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger frame reports that it has completed loading. 894243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger */ 895838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kOnLoad_ANPLifecycleAction = 5, 896838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger /** The browser is honoring the plugin's request to go full screen. Upon 897838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger returning from this event the browser will resize the plugin's java 898838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger surface to full-screen coordinates. 899838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger */ 900838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kEnterFullScreen_ANPLifecycleAction = 6, 901838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger /** The browser has exited from full screen mode. Immediately prior to 902838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger sending this event the browser has resized the plugin's java surface to 903838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger its original coordinates. 904838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger */ 905838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger kExitFullScreen_ANPLifecycleAction = 7, 906cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger /** The plugin is visible to the user on the screen. This event will always 907cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger occur after a kOffScreen_ANPLifecycleAction event. 908cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger */ 909cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger kOnScreen_ANPLifecycleAction = 8, 910cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger /** The plugin is no longer visible to the user on the screen. This event 911cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger will always occur prior to an kOnScreen_ANPLifecycleAction event. 912cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger */ 913cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger kOffScreen_ANPLifecycleAction = 9, 914a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger}; 915a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergertypedef uint32_t ANPLifecycleAction; 916a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 917aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenbergerstruct TouchPoint { 918aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger int32_t id; 919aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger float x; // relative to your "window" (0...width) 920aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger float y; // relative to your "window" (0...height) 921aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger float pressure; 922aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger float size; // normalized to a value between 0...1 923aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger}; 924aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger 9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This is what is passed to NPP_HandleEvent() */ 9268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPEvent { 9278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t inSize; // size of this struct in bytes 9288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPEventType eventType; 9298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // use based on the value in eventType 9308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project union { 9318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project struct { 9328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyAction action; 9338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyCode nativeCode; 9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t virtualCode; // windows virtual key code 9358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyModifier modifiers; 9368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t repeatCount; // 0 for initial down (or up) 9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t unichar; // 0 if there is no value 9388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } key; 9398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project struct { 940d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger ANPMouseAction action; 941d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger int32_t x; // relative to your "window" (0...width) 942d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger int32_t y; // relative to your "window" (0...height) 943d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger } mouse; 944d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger struct { 9458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTouchAction action; 9468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyModifier modifiers; 9478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t x; // relative to your "window" (0...width) 9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t y; // relative to your "window" (0...height) 9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } touch; 950a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger struct { 951a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger ANPLifecycleAction action; 952a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger } lifecycle; 953535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger struct { 954535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger ANPDrawingModel model; 955535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger // relative to (0,0) in top-left of your plugin 956535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger ANPRectI clip; 957535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger // use based on the value in model 958535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger union { 959535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger ANPBitmap bitmap; 9606ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger struct { 9616ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger int32_t width; 9626ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger int32_t height; 9636ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger } surface; 964535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger } data; 965535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger } draw; 966aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger struct { 967aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger int64_t timestamp; 968aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger int32_t id; 969aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger ANPTouchAction action; 970aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger int32_t pointerCount; 971aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger TouchPoint* touchPoint; 972aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger } multiTouch; 973243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger int32_t other[8]; 9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } data; 9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 9768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 97756074874733a95498646a3fc575ef62fd9218f58Mike Reedstruct ANPEventInterfaceV0 : ANPInterface { 97856074874733a95498646a3fc575ef62fd9218f58Mike Reed /** Post a copy of the specified event to the plugin. The event will be 97956074874733a95498646a3fc575ef62fd9218f58Mike Reed delivered to the plugin in its main thread (the thread that receives 98056074874733a95498646a3fc575ef62fd9218f58Mike Reed other ANPEvents). If, after posting before delivery, the NPP instance 98156074874733a95498646a3fc575ef62fd9218f58Mike Reed is torn down, the event will be discarded. 98256074874733a95498646a3fc575ef62fd9218f58Mike Reed */ 98356074874733a95498646a3fc575ef62fd9218f58Mike Reed void (*postEvent)(NPP inst, const ANPEvent* event); 98456074874733a95498646a3fc575ef62fd9218f58Mike Reed}; 98556074874733a95498646a3fc575ef62fd9218f58Mike Reed 98656074874733a95498646a3fc575ef62fd9218f58Mike Reed 9878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 988