android_npapi.h revision 0fae426bf2862e6ba2745a999ecb25d172c6860a
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2008, 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 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. 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 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 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) 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* queries for which drawing model is desired (for the draw event) 121a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Should be called inside NPP_New(...) 123a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPN_GetValue(inst, ANPSupportedDrawingModel_EnumValue, uint32_t* bits) 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kSupportedDrawingModel_ANPGetValue ((NPNVariable)2000) 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NPN_GetValue 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Reqeust to set the drawing model. 132a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPN_SetValue(inst, ANPRequestDrawingModel_EnumValue, (void*)foo_DrawingModel) 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kRequestDrawingModel_ANPSetValue ((NPPVariable)1000) 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* These are used as bitfields in ANPSupportedDrawingModels_EnumValue, 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project and as-is in ANPRequestDrawingModel_EnumValue. The drawing model determines 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project how to interpret the ANPDrawingContext provided in the Draw event and how 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project to interpret the NPWindow->window field. 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPDrawingModels { 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Draw into a bitmap from the browser thread in response to a Draw event. 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPWindow->window is reserved (ignore) 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kBitmap_ANPDrawingModel = 0, 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPDrawingModel; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* Interfaces provide additional functionality to the plugin via function ptrs. 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Once an interface is retrived, it is valid for the lifetime of the plugin 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (just like browserfuncs). 153a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project All ANPInterfaces begin with an inSize field, which must be set by the 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project caller (plugin) with the number of bytes allocated for the interface. 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project e.g. SomeInterface si; si.inSize = sizeof(si); browser->getvalue(..., &si); 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPInterface { 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t inSize; // size (in bytes) of this struct 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPLogTypes { 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kError_ANPLogType = 0, // error 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kWarning_ANPLogType = 1, // warning 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kDebug_ANPLogType = 2 // debug only (informational) 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPLogType; 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPLogInterfaceV0 : ANPInterface { 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // dumps printf messages to the log file 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // e.g. interface->log(instance, kWarning_ANPLogType, "value is %d", value); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*log)(NPP instance, ANPLogType, const char format[], ...); 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 175a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPBitmapInterfaceV0 : ANPInterface { 176a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed /** Returns true if the specified bitmap format is supported, and if packing 177a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed is non-null, sets it to the packing info for that format. 178a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed */ 179a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed bool (*getPixelPacking)(ANPBitmapFormat, ANPPixelPacking* packing); 180a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed}; 181a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrixInterfaceV0 : ANPInterface { 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return a new identity matrix 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPMatrix* (*newMatrix)(); 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Delete a matrix previously allocated by newMatrix() 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deleteMatrix)(ANPMatrix*); 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPMatrixFlag (*getFlags)(const ANPMatrix*); 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*copy)(ANPMatrix* dst, const ANPMatrix* src); 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return the matrix values in a float array (allcoated by the caller), 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project where the values are treated as follows: 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project w = x * [6] + y * [7] + [8]; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project x' = (x * [0] + y * [1] + [2]) / w; 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project y' = (x * [3] + y * [4] + [5]) / w; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*get3x3)(const ANPMatrix*, float[9]); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Initialize the matrix from values in a float array, 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project where the values are treated as follows: 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project w = x * [6] + y * [7] + [8]; 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project x' = (x * [0] + y * [1] + [2]) / w; 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project y' = (x * [3] + y * [4] + [5]) / w; 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*set3x3)(ANPMatrix*, const float[9]); 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setIdentity)(ANPMatrix*); 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preTranslate)(ANPMatrix*, float tx, float ty); 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postTranslate)(ANPMatrix*, float tx, float ty); 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preScale)(ANPMatrix*, float sx, float sy); 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postScale)(ANPMatrix*, float sx, float sy); 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preSkew)(ANPMatrix*, float kx, float ky); 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postSkew)(ANPMatrix*, float kx, float ky); 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preRotate)(ANPMatrix*, float degrees); 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postRotate)(ANPMatrix*, float degrees); 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*preConcat)(ANPMatrix*, const ANPMatrix*); 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*postConcat)(ANPMatrix*, const ANPMatrix*); 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return true if src is invertible, and if so, return its inverse in dst. 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If src is not invertible, return false and ignore dst. 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*invert)(ANPMatrix* dst, const ANPMatrix* src); 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Transform the x,y pairs in src[] by this matrix, and store the results 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project in dst[]. The count parameter is treated as the number of pairs in the 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array. It is legal for src and dst to point to the same memory, but 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project illegal for the two arrays to partially overlap. 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*mapPoints)(ANPMatrix*, float dst[], const float src[], 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t count); 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2354603aa50552a853aa7aedcd809460a83586daa53Mike Reedstruct ANPPathInterfaceV0 : ANPInterface { 2364603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Return a new path */ 2374603aa50552a853aa7aedcd809460a83586daa53Mike Reed ANPPath* (*newPath)(); 2384603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2394603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Delete a path previously allocated by ANPPath() */ 2404603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*deletePath)(ANPPath*); 2414603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2424603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Make a deep copy of the src path, into the dst path (already allocated 2434603aa50552a853aa7aedcd809460a83586daa53Mike Reed by the caller). 2444603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 2454603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*copy)(ANPPath* dst, const ANPPath* src); 2464603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2474603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Returns true if the two paths are the same (i.e. have the same points) 2484603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 2494603aa50552a853aa7aedcd809460a83586daa53Mike Reed bool (*equal)(const ANPPath* path0, const ANPPath* path1); 2504603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2514603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Remove any previous points, initializing the path back to empty. */ 2524603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*reset)(ANPPath*); 2534603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2544603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Return true if the path is empty (has no lines, quads or cubics). */ 2554603aa50552a853aa7aedcd809460a83586daa53Mike Reed bool (*isEmpty)(const ANPPath*); 2564603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2574603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Return the path's bounds in bounds. */ 2584603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*getBounds)(const ANPPath*, ANPRectF* bounds); 2594603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2604603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*moveTo)(ANPPath*, float x, float y); 2614603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*lineTo)(ANPPath*, float x, float y); 2624603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*quadTo)(ANPPath*, float x0, float y0, float x1, float y1); 2634603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*cubicTo)(ANPPath*, float x0, float y0, float x1, float y1, 2644603aa50552a853aa7aedcd809460a83586daa53Mike Reed float x2, float y2); 2654603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*close)(ANPPath*); 2664603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2674603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Offset the src path by [dx, dy]. If dst is null, apply the 2684603aa50552a853aa7aedcd809460a83586daa53Mike Reed change directly to the src path. If dst is not null, write the 2694603aa50552a853aa7aedcd809460a83586daa53Mike Reed changed path into dst, and leave the src path unchanged. In that case 2704603aa50552a853aa7aedcd809460a83586daa53Mike Reed dst must have been previously allocated by the caller. 2714603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 2724603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*offset)(ANPPath* src, float dx, float dy, ANPPath* dst); 2734603aa50552a853aa7aedcd809460a83586daa53Mike Reed 2744603aa50552a853aa7aedcd809460a83586daa53Mike Reed /* Transform the path by the matrix. If dst is null, apply the 2754603aa50552a853aa7aedcd809460a83586daa53Mike Reed change directly to the src path. If dst is not null, write the 2764603aa50552a853aa7aedcd809460a83586daa53Mike Reed changed path into dst, and leave the src path unchanged. In that case 2774603aa50552a853aa7aedcd809460a83586daa53Mike Reed dst must have been previously allocated by the caller. 2784603aa50552a853aa7aedcd809460a83586daa53Mike Reed */ 2794603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*transform)(ANPPath* src, const ANPMatrix*, ANPPath* dst); 2804603aa50552a853aa7aedcd809460a83586daa53Mike Reed}; 2814603aa50552a853aa7aedcd809460a83586daa53Mike Reed 282a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed/** ANPColor is always defined to have the same packing on all platforms, and 283a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed it is always unpremultiplied. 2840fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger 285a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed This is in contrast to 32bit format(s) in bitmaps, which are premultiplied, 286a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed and their packing may vary depending on the platform, hence the need for 287a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ANPBitmapInterface::getPixelPacking() 288a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed */ 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPColor; 290a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_ASHIFT 24 291a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_RSHIFT 16 292a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_GSHIFT 8 293a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_BSHIFT 0 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ANP_MAKE_COLOR(a, r, g, b) \ 295a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed (((a) << ANPColor_ASHIFT) | \ 296a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ((r) << ANPColor_RSHIFT) | \ 297a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ((g) << ANPColor_GSHIFT) | \ 298a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed ((b) << ANPColor_BSHIFT)) 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintFlag { 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kAntiAlias_ANPPaintFlag = 1 << 0, 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFilterBitmap_ANPPaintFlag = 1 << 1, 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kDither_ANPPaintFlag = 1 << 2, 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUnderlineText_ANPPaintFlag = 1 << 3, 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kStrikeThruText_ANPPaintFlag = 1 << 4, 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFakeBoldText_ANPPaintFlag = 1 << 5, 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPPaintFlags; 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintStyles { 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFill_ANPPaintStyle = 0, 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kStroke_ANPPaintStyle = 1, 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kFillAndStroke_ANPPaintStyle = 2 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintStyle; 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintCaps { 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kButt_ANPPaintCap = 0, 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRound_ANPPaintCap = 1, 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kSquare_ANPPaintCap = 2 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintCap; 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintJoins { 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kMiter_ANPPaintJoin = 0, 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRound_ANPPaintJoin = 1, 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kBevel_ANPPaintJoin = 2 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintJoin; 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintAligns { 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kLeft_ANPPaintAlign = 0, 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kCenter_ANPPaintAlign = 1, 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kRight_ANPPaintAlign = 2 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintAlign; 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTextEncodings { 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUTF8_ANPTextEncoding = 0, 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUTF16_ANPTextEncoding = 1, 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTextEncoding; 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTypefaceStyles { 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kBold_ANPTypefaceStyle = 1 << 0, 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kItalic_ANPTypefaceStyle = 1 << 1 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPTypefaceStyle; 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPFontMetrics { 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //! The greatest distance above the baseline for any glyph (will be <= 0) 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fTop; 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //! The recommended distance above the baseline (will be <= 0) 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fAscent; 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //! The recommended distance below the baseline (will be >= 0) 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fDescent; 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //! The greatest distance below the baseline for any glyph (will be >= 0) 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fBottom; 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //! The recommended distance to add between lines of text (will be >= 0) 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fLeading; 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypefaceInterfaceV0 : ANPInterface { 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return a new reference to the typeface that most closely matches the 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project requested name and style. Pass null as the name to return 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the default font for the requested style. Will never return null 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param name May be NULL. The name of the font family. 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param style The style (normal, bold, italic) of the typeface. 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @return reference to the closest-matching typeface. Caller must call 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unref() when they are done with the typeface. 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypeface* (*createFromName)(const char name[], ANPTypefaceStyle); 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return a new reference to the typeface that most closely matches the 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project requested typeface and specified Style. Use this call if you want to 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pick a new style from the same family of the existing typeface. 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If family is NULL, this selects from the default font's family. 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param family May be NULL. The name of the existing type face. 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @param s The style (normal, bold, italic) of the type face. 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @return reference to the closest-matching typeface. Call must call 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unref() when they are done. 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypeface* (*createFromTypeface)(const ANPTypeface* family, 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypefaceStyle); 387a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the owner count of the typeface. A newly created typeface has an 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project owner count of 1. When the owner count is reaches 0, the typeface is 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project deleted. 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t (*getRefCount)(const ANPTypeface*); 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Increment the owner count on the typeface 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*ref)(ANPTypeface*); 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Decrement the owner count on the typeface. When the count goes to 0, 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the typeface is deleted. 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*unref)(ANPTypeface*); 402a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the style bits for the specified typeface 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypefaceStyle (*getStyle)(const ANPTypeface*); 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaintInterfaceV0 : ANPInterface { 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return a new paint object, which holds all of the color and style 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project attributes that affect how things (geometry, text, bitmaps) are drawn 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project in a ANPCanvas. 412a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project The paint that is returned is not tied to any particular plugin 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project instance, but it must only be accessed from one thread at a time. 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaint* (*newPaint)(); 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deletePaint)(ANPPaint*); 418a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintFlags (*getFlags)(const ANPPaint*); 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setFlags)(ANPPaint*, ANPPaintFlags); 421a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPColor (*getColor)(const ANPPaint*); 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setColor)(ANPPaint*, ANPColor); 424a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintStyle (*getStyle)(const ANPPaint*); 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStyle)(ANPPaint*, ANPPaintStyle); 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getStrokeWidth)(const ANPPaint*); 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getStrokeMiter)(const ANPPaint*); 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintCap (*getStrokeCap)(const ANPPaint*); 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintJoin (*getStrokeJoin)(const ANPPaint*); 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeWidth)(ANPPaint*, float); 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeMiter)(ANPPaint*, float); 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeCap)(ANPPaint*, ANPPaintCap); 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setStrokeJoin)(ANPPaint*, ANPPaintJoin); 436a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTextEncoding (*getTextEncoding)(const ANPPaint*); 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPPaintAlign (*getTextAlign)(const ANPPaint*); 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getTextSize)(const ANPPaint*); 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getTextScaleX)(const ANPPaint*); 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getTextSkewX)(const ANPPaint*); 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextEncoding)(ANPPaint*, ANPTextEncoding); 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextAlign)(ANPPaint*, ANPPaintAlign); 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextSize)(ANPPaint*, float); 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextScaleX)(ANPPaint*, float); 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTextSkewX)(ANPPaint*, float); 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the typeface ine paint, or null if there is none. This does not 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project modify the owner count of the returned typeface. 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTypeface* (*getTypeface)(const ANPPaint*); 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Set the paint's typeface. If the paint already had a non-null typeface, 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project its owner count is decremented. If the new typeface is non-null, its 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project owner count is incremented. 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*setTypeface)(ANPPaint*, ANPTypeface*); 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the width of the text. If bounds is not null, return the bounds 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of the text in that rectangle. 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*measureText)(ANPPaint*, const void* text, uint32_t byteLength, 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPRectF* bounds); 464a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return the number of unichars specifed by the text. 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If widths is not null, returns the array of advance widths for each 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unichar. 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project If bounds is not null, returns the array of bounds for each unichar. 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int (*getTextWidths)(ANPPaint*, const void* text, uint32_t byteLength, 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float widths[], ANPRectF bounds[]); 472a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Return in metrics the spacing values for text, respecting the paint's 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typeface and pointsize, and return the spacing between lines 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (descent - ascent + leading). If metrics is NULL, it will be ignored. 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float (*getFontMetrics)(ANPPaint*, ANPFontMetrics* metrics); 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvasInterfaceV0 : ANPInterface { 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return a canvas that will draw into the specified bitmap. Note: the 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project canvas copies the fields of the bitmap, so it need not persist after 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this call, but the canvas DOES point to the same pixel memory that the 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bitmap did, so the canvas should not be used after that pixel memory 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project goes out of scope. In the case of creating a canvas to draw into the 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pixels provided by kDraw_ANPEventType, those pixels are only while 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project handling that event. 488a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project The canvas that is returned is not tied to any particular plugin 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project instance, but it must only be accessed from one thread at a time. 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPCanvas* (*newCanvas)(const ANPBitmap*); 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deleteCanvas)(ANPCanvas*); 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*save)(ANPCanvas*); 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*restore)(ANPCanvas*); 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*translate)(ANPCanvas*, float tx, float ty); 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*scale)(ANPCanvas*, float sx, float sy); 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*rotate)(ANPCanvas*, float degrees); 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*skew)(ANPCanvas*, float kx, float ky); 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*concat)(ANPCanvas*, const ANPMatrix*); 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*clipRect)(ANPCanvas*, const ANPRectF*); 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*clipPath)(ANPCanvas*, const ANPPath*); 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return the current matrix on the canvas 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*getTotalMatrix)(ANPCanvas*, ANPMatrix*); 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return the current clip bounds in local coordinates, expanding it to 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project account for antialiasing edge effects if aa is true. If the 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project current clip is empty, return false and ignore the bounds argument. 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*getLocalClipBounds)(ANPCanvas*, ANPRectF* bounds, bool aa); 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Return the current clip bounds in device coordinates in bounds. If the 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project current clip is empty, return false and ignore the bounds argument. 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*getDeviceClipBounds)(ANPCanvas*, ANPRectI* bounds); 5174603aa50552a853aa7aedcd809460a83586daa53Mike Reed 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawColor)(ANPCanvas*, ANPColor); 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawPaint)(ANPCanvas*, const ANPPaint*); 5204603aa50552a853aa7aedcd809460a83586daa53Mike Reed void (*drawLine)(ANPCanvas*, float x0, float y0, float x1, float y1, 5214603aa50552a853aa7aedcd809460a83586daa53Mike Reed const ANPPaint*); 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawRect)(ANPCanvas*, const ANPRectF*, const ANPPaint*); 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawOval)(ANPCanvas*, const ANPRectF*, const ANPPaint*); 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawPath)(ANPCanvas*, const ANPPath*, const ANPPaint*); 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawText)(ANPCanvas*, const void* text, uint32_t byteLength, 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float x, float y, const ANPPaint*); 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawPosText)(ANPCanvas*, const void* text, uint32_t byteLength, 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const float xy[], const ANPPaint*); 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawBitmap)(ANPCanvas*, const ANPBitmap*, float x, float y, 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ANPPaint*); 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*drawBitmapRect)(ANPCanvas*, const ANPBitmap*, 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ANPRectI* src, const ANPRectF* dst, 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ANPPaint*); 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPWindowInterfaceV0 : ANPInterface { 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Given the window field from the NPWindow struct, and an optional rect 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project describing the subset of the window that will be drawn to (may be null) 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true if the bitmap for that window can be accessed, and if so, 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fill out the specified ANPBitmap to point to the window's pixels. 541a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project When drawing is complete, call unlock(window) 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*lockRect)(void* window, const ANPRectI* inval, ANPBitmap*); 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** The same as lockRect, but takes a region instead of a rect to specify 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the area that will be changed/drawn. 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*lockRegion)(void* window, const ANPRegion* inval, ANPBitmap*); 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Given a successful call to lock(window, inval, &bitmap), call unlock 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project to release access to the pixels, and allow the browser to display the 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project results. If lock returned false, unlock should not be called. 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*unlock)(void* window); 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPSampleFormats { 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUnknown_ANPSamleFormat = 0, 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kPCM16Bit_ANPSampleFormat = 1, 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kPCM8Bit_ANPSampleFormat = 2 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPSampleFormat; 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** The audio buffer is passed to the callback proc to request more samples. 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project It is owned by the system, and the callback may read it, but should not 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project maintain a pointer to it outside of the scope of the callback proc. 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioBuffer { 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // RO - repeat what was specified in newTrack() 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t channelCount; 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // RO - repeat what was specified in newTrack() 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPSampleFormat format; 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** This buffer is owned by the caller. Inside the callback proc, up to 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "size" bytes of sample data should be written into this buffer. The 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project address is only valid for the scope of a single invocation of the 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project callback proc. 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* bufferData; 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** On input, specifies the maximum number of bytes that can be written 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project to "bufferData". On output, specifies the actual number of bytes that 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the callback proc wrote into "bufferData". 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t size; 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPAudioEvents { 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** This event is passed to the callback proc when the audio-track needs 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project more sample data written to the provided buffer parameter. 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kMoreData_ANPAudioEvent = 0, 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** This event is passed to the callback proc if the audio system runs out 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of sample data. In this event, no buffer parameter will be specified 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (i.e. NULL will be passed to the 3rd parameter). 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUnderRun_ANPAudioEvent = 1 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPAudioEvent; 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Called to feed sample data to the track. This will be called in a separate 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project thread. However, you may call trackStop() from the callback (but you 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cannot delete the track). 603a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project For example, when you have written the last chunk of sample data, you can 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project immediately call trackStop(). This will take effect after the current 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project buffer has been played. 607a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project The "user" parameter is the same value that was passed to newTrack() 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (*ANPAudioCallbackProc)(ANPAudioEvent event, void* user, 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPAudioBuffer* buffer); 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrack; // abstract type for audio tracks 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrackInterfaceV0 : ANPInterface { 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Create a new audio track, or NULL on failure. 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPAudioTrack* (*newTrack)(uint32_t sampleRate, // sampling rate in Hz 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPSampleFormat, 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int channelCount, // MONO=1, STEREO=2 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPAudioCallbackProc, 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* user); 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*deleteTrack)(ANPAudioTrack*); 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*start)(ANPAudioTrack*); 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*pause)(ANPAudioTrack*); 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*stop)(ANPAudioTrack*); 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** Returns true if the track is not playing (e.g. pause or stop was called, 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project or start was never called. 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool (*isStopped)(ANPAudioTrack*); 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// HandleEvent 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPEventTypes { 638be9123233ec803662e74d4333c1aab0bb201bb84Mike Reed kNull_ANPEventType = 0, 639be9123233ec803662e74d4333c1aab0bb201bb84Mike Reed kKey_ANPEventType = 1, 640be9123233ec803662e74d4333c1aab0bb201bb84Mike Reed kTouch_ANPEventType = 2, 641be9123233ec803662e74d4333c1aab0bb201bb84Mike Reed kDraw_ANPEventType = 3, 642a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger kLifecycle_ANPEventType = 4 6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPEventType; 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyActions { 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kDown_ANPKeyAction = 0, 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUp_ANPKeyAction = 1, 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyAction; 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ANPKeyCodes.h" 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyCode; 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyModifiers { 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kAlt_ANPKeyModifier = 1 << 0, 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kShift_ANPKeyModifier = 1 << 1, 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// bit-field containing some number of ANPKeyModifier bits 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPKeyModifier; 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTouchActions { 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kDown_ANPTouchAction = 0, 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project kUp_ANPTouchAction = 1, 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTouchAction; 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergerenum ANPLifecycleActions { 669a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger kPause_ANPLifecycleAction = 0, 670a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger kResume_ANPLifecycleAction = 1, 671a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger kGainFocus_ANPLifecycleAction = 2, 672a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger kLooseFocus_ANPLifecycleAction = 3, 6730fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger kFreeMemory_ANPLifecycleAction = 4, 674a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger}; 675a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergertypedef uint32_t ANPLifecycleAction; 676a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This is what is passed to NPP_HandleEvent() */ 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPEvent { 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t inSize; // size of this struct in bytes 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPEventType eventType; 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // use based on the value in eventType 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project union { 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project struct { 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyAction action; 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyCode nativeCode; 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t virtualCode; // windows virtual key code 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyModifier modifiers; 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t repeatCount; // 0 for initial down (or up) 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t unichar; // 0 if there is no value 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } key; 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project struct { 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPTouchAction action; 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyModifier modifiers; 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t x; // relative to your "window" (0...width) 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t y; // relative to your "window" (0...height) 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } touch; 697a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger struct { 698a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger ANPLifecycleAction action; 699a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger } lifecycle; 700535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger struct { 701535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger ANPDrawingModel model; 702535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger // relative to (0,0) in top-left of your plugin 703535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger ANPRectI clip; 704535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger // use based on the value in model 705535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger union { 706535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger ANPBitmap bitmap; 707535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger } data; 708535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger } draw; 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int32_t other[8]; 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } data; 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 715