android_npapi.h revision ce300b91859a4830a00c388a600cddef96ed48e1
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;
90ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** The ANPSurface acts as a handle between the plugin and the native libraries
91ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    that render the surface to the screen.
92ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger */
93ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenbergerstruct ANPSurface;
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypeface;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPMatrixFlags {
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kIdentity_ANPMatrixFlag     = 0,
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kTranslate_ANPMatrixFlag    = 0x01,
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kScale_ANPMatrixFlag        = 0x02,
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAffine_ANPMatrixFlag       = 0x04,
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPerspective_ANPMatrixFlag  = 0x08,
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPMatrixFlag;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NPN_GetValue
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
108ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** queries for a specific ANPInterface.
109a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Maybe called with NULL for the NPP instance
111a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue(inst, interface_enum, ANPInterface*)
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kLogInterfaceV0_ANPGetValue         ((NPNVariable)1000)
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kAudioTrackInterfaceV0_ANPGetValue  ((NPNVariable)1001)
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kCanvasInterfaceV0_ANPGetValue      ((NPNVariable)1002)
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kMatrixInterfaceV0_ANPGetValue      ((NPNVariable)1003)
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kPaintInterfaceV0_ANPGetValue       ((NPNVariable)1004)
1192ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kPathInterfaceV0_ANPGetValue        ((NPNVariable)1005)
1202ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kTypefaceInterfaceV0_ANPGetValue    ((NPNVariable)1006)
1212ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kWindowInterfaceV0_ANPGetValue      ((NPNVariable)1007)
122a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define kBitmapInterfaceV0_ANPGetValue      ((NPNVariable)1008)
123f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger#define kSurfaceInterfaceV0_ANPGetValue     ((NPNVariable)1009)
1240a2bed53555947aea37912d694f9c7c376490808Grace Kloba#define kSystemInterfaceV0_ANPGetValue      ((NPNVariable)1010)
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
126ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** queries for which drawing model is desired (for the draw event)
127a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Should be called inside NPP_New(...)
129a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue(inst, ANPSupportedDrawingModel_EnumValue, uint32_t* bits)
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kSupportedDrawingModel_ANPGetValue  ((NPNVariable)2000)
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
13556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger// NPN_SetValue
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger/** Request to set the drawing model.
138a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
139ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    NPN_SetValue(inst, ANPRequestDrawingModel_EnumValue, (void*)foo_ANPDrawingModel)
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kRequestDrawingModel_ANPSetValue    ((NPPVariable)1000)
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
143ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** These are used as bitfields in ANPSupportedDrawingModels_EnumValue,
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    and as-is in ANPRequestDrawingModel_EnumValue. The drawing model determines
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    how to interpret the ANPDrawingContext provided in the Draw event and how
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    to interpret the NPWindow->window field.
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPDrawingModels {
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Draw into a bitmap from the browser thread in response to a Draw event.
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        NPWindow->window is reserved (ignore)
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
152f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    kBitmap_ANPDrawingModel  = 0,
153ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Draw into a surface (e.g. raster, opengl, etc.)using the surface interface.
154ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        Unlike the bitmap model a surface model is opaque so no html content behind
155ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        the plugin will be  visible. Unless the surface needs to be transparent the
156ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        surface model should be chosen over the bitmap model as it will have faster
157ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        performance. An example surface is the raster surface where the service
158ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        interface is used to lock/unlock and draw into bitmap without waiting for
159ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        draw events.
160ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger     */
161f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    kSurface_ANPDrawingModel = 1,
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPDrawingModel;
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
165243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger/** Request to receive/disable events. If the pointer is NULL then all flags will
166243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    be disabled. Otherwise, the event type will be enabled iff its corresponding
16756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    bit in the EventFlags bit field is set.
16856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
16956ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    NPN_SetValue(inst, ANPAcceptEvents, (void*)EventFlags)
17056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */
17156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger#define kAcceptEvents_ANPSetValue           ((NPPVariable)1001)
17256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
173ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** The EventFlags are a set of bits used to determine which types of events the
17456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    plugin wishes to receive. For example, if the value is 0x03 then both key
17556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    and touch events will be provided to the plugin.
17656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */
17756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergerenum ANPEventFlag {
178243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    kKey_ANPEventFlag               = 0x01,
179243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    kTouch_ANPEventFlag             = 0x02,
18056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger};
18156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergertypedef uint32_t ANPEventFlags;
18256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
183ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** Interfaces provide additional functionality to the plugin via function ptrs.
184ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    Once an interface is retrieved, it is valid for the lifetime of the plugin
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    (just like browserfuncs).
186a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    All ANPInterfaces begin with an inSize field, which must be set by the
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    caller (plugin) with the number of bytes allocated for the interface.
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    e.g. SomeInterface si; si.inSize = sizeof(si); browser->getvalue(..., &si);
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPInterface {
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    inSize;     // size (in bytes) of this struct
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPLogTypes {
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kError_ANPLogType   = 0,    // error
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kWarning_ANPLogType = 1,    // warning
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDebug_ANPLogType   = 2     // debug only (informational)
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPLogType;
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPLogInterfaceV0 : ANPInterface {
203ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** dumps printf messages to the log file
204ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        e.g. interface->log(instance, kWarning_ANPLogType, "value is %d", value);
205ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger     */
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*log)(NPP instance, ANPLogType, const char format[], ...);
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
209a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPBitmapInterfaceV0 : ANPInterface {
210a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    /** Returns true if the specified bitmap format is supported, and if packing
211a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed        is non-null, sets it to the packing info for that format.
212a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed     */
213a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    bool (*getPixelPacking)(ANPBitmapFormat, ANPPixelPacking* packing);
214a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed};
215a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed
216f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenbergerstruct ANPSurfaceInterfaceV0 : ANPInterface {
2173ac4dcc7e27db648f597d2062fd84997544165f1Derek Sollenberger    /** Creates a new raster surface handle based on the given bitmap format. If
2183ac4dcc7e27db648f597d2062fd84997544165f1Derek Sollenberger        raster surfaces or the bitmap format is not supported then NULL is returned.
219f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger     */
2203ac4dcc7e27db648f597d2062fd84997544165f1Derek Sollenberger    ANPSurface* (*newRasterSurface)(NPP instance, ANPBitmapFormat, bool fixedSize);
221f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    /** Given a valid surface handle (i.e. one created by calling newSurface)
222f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        the underlying surface is removed and the pointer is set to NULL.
223f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger     */
224f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    void (*deleteSurface)(ANPSurface* surface);
225f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    /** Locks the surface from manipulation by other threads and provides a bitmap
226f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        to be written to.  The dirtyRect param specifies which portion of the
227f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        bitmap will be written to.  If the dirtyRect is NULL then the entire
228f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        surface will be considered dirty.  If the lock was successful the function
229f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        will return true and the bitmap will be set to point to a valid bitmap.
230f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        If not the function will return false and the bitmap will be set to NULL.
231f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger     */
232f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    bool (*lock)(ANPSurface* surface, ANPBitmap* bitmap, ANPRectI* dirtyRect);
233f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    /** Given a locked surface handle (i.e. result of a successful call to lock)
234f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        the surface is unlocked and the contents of the bitmap, specifically
235f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger        those inside the dirtyRect are written to the screen.
236f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger     */
237f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger    void (*unlock)(ANPSurface* surface);
238f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger};
239f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrixInterfaceV0 : ANPInterface {
241ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a new identity matrix
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrix*  (*newMatrix)();
244ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Delete a matrix previously allocated by newMatrix()
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteMatrix)(ANPMatrix*);
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrixFlag (*getFlags)(const ANPMatrix*);
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*copy)(ANPMatrix* dst, const ANPMatrix* src);
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
252ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the matrix values in a float array (allcoated by the caller),
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        w  = x * [6] + y * [7] + [8];
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        x' = (x * [0] + y * [1] + [2]) / w;
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        y' = (x * [3] + y * [4] + [5]) / w;
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*get3x3)(const ANPMatrix*, float[9]);
259ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Initialize the matrix from values in a float array,
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         w  = x * [6] + y * [7] + [8];
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         x' = (x * [0] + y * [1] + [2]) / w;
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         y' = (x * [3] + y * [4] + [5]) / w;
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*set3x3)(ANPMatrix*, const float[9]);
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setIdentity)(ANPMatrix*);
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preTranslate)(ANPMatrix*, float tx, float ty);
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postTranslate)(ANPMatrix*, float tx, float ty);
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preScale)(ANPMatrix*, float sx, float sy);
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postScale)(ANPMatrix*, float sx, float sy);
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preSkew)(ANPMatrix*, float kx, float ky);
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postSkew)(ANPMatrix*, float kx, float ky);
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preRotate)(ANPMatrix*, float degrees);
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postRotate)(ANPMatrix*, float degrees);
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preConcat)(ANPMatrix*, const ANPMatrix*);
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postConcat)(ANPMatrix*, const ANPMatrix*);
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
279ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return true if src is invertible, and if so, return its inverse in dst.
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If src is not invertible, return false and ignore dst.
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*invert)(ANPMatrix* dst, const ANPMatrix* src);
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
284ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Transform the x,y pairs in src[] by this matrix, and store the results
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in dst[]. The count parameter is treated as the number of pairs in the
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        array. It is legal for src and dst to point to the same memory, but
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        illegal for the two arrays to partially overlap.
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*mapPoints)(ANPMatrix*, float dst[], const float src[],
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                             int32_t count);
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2934603aa50552a853aa7aedcd809460a83586daa53Mike Reedstruct ANPPathInterfaceV0 : ANPInterface {
294ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a new path */
2954603aa50552a853aa7aedcd809460a83586daa53Mike Reed    ANPPath* (*newPath)();
2964603aa50552a853aa7aedcd809460a83586daa53Mike Reed
297ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Delete a path previously allocated by ANPPath() */
2984603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*deletePath)(ANPPath*);
2994603aa50552a853aa7aedcd809460a83586daa53Mike Reed
300ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Make a deep copy of the src path, into the dst path (already allocated
301ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        by the caller).
3024603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3034603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*copy)(ANPPath* dst, const ANPPath* src);
3044603aa50552a853aa7aedcd809460a83586daa53Mike Reed
305ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Returns true if the two paths are the same (i.e. have the same points)
3064603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3074603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*equal)(const ANPPath* path0, const ANPPath* path1);
3084603aa50552a853aa7aedcd809460a83586daa53Mike Reed
309ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Remove any previous points, initializing the path back to empty. */
3104603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*reset)(ANPPath*);
3114603aa50552a853aa7aedcd809460a83586daa53Mike Reed
312ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return true if the path is empty (has no lines, quads or cubics). */
3134603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*isEmpty)(const ANPPath*);
3144603aa50552a853aa7aedcd809460a83586daa53Mike Reed
315ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the path's bounds in bounds. */
3164603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*getBounds)(const ANPPath*, ANPRectF* bounds);
3174603aa50552a853aa7aedcd809460a83586daa53Mike Reed
3184603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*moveTo)(ANPPath*, float x, float y);
3194603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*lineTo)(ANPPath*, float x, float y);
3204603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*quadTo)(ANPPath*, float x0, float y0, float x1, float y1);
3214603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*cubicTo)(ANPPath*, float x0, float y0, float x1, float y1,
3224603aa50552a853aa7aedcd809460a83586daa53Mike Reed                    float x2, float y2);
3234603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*close)(ANPPath*);
3244603aa50552a853aa7aedcd809460a83586daa53Mike Reed
325ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Offset the src path by [dx, dy]. If dst is null, apply the
3264603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
3274603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
3284603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
3294603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3304603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*offset)(ANPPath* src, float dx, float dy, ANPPath* dst);
3314603aa50552a853aa7aedcd809460a83586daa53Mike Reed
332ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Transform the path by the matrix. If dst is null, apply the
3334603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
3344603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
3354603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
3364603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3374603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*transform)(ANPPath* src, const ANPMatrix*, ANPPath* dst);
3384603aa50552a853aa7aedcd809460a83586daa53Mike Reed};
3394603aa50552a853aa7aedcd809460a83586daa53Mike Reed
340a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed/** ANPColor is always defined to have the same packing on all platforms, and
341a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    it is always unpremultiplied.
3420fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger
343a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    This is in contrast to 32bit format(s) in bitmaps, which are premultiplied,
344a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    and their packing may vary depending on the platform, hence the need for
345a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    ANPBitmapInterface::getPixelPacking()
346a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed */
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPColor;
348a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_ASHIFT     24
349a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_RSHIFT     16
350a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_GSHIFT     8
351a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_BSHIFT     0
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ANP_MAKE_COLOR(a, r, g, b)  \
353a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                   (((a) << ANPColor_ASHIFT) |  \
354a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((r) << ANPColor_RSHIFT) |  \
355a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((g) << ANPColor_GSHIFT) |  \
356a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((b) << ANPColor_BSHIFT))
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintFlag {
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAntiAlias_ANPPaintFlag         = 1 << 0,
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFilterBitmap_ANPPaintFlag      = 1 << 1,
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDither_ANPPaintFlag            = 1 << 2,
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderlineText_ANPPaintFlag     = 1 << 3,
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStrikeThruText_ANPPaintFlag    = 1 << 4,
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFakeBoldText_ANPPaintFlag      = 1 << 5,
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPPaintFlags;
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintStyles {
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFill_ANPPaintStyle             = 0,
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStroke_ANPPaintStyle           = 1,
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFillAndStroke_ANPPaintStyle    = 2
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintStyle;
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintCaps {
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kButt_ANPPaintCap   = 0,
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintCap  = 1,
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kSquare_ANPPaintCap = 2
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintCap;
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintJoins {
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMiter_ANPPaintJoin = 0,
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintJoin = 1,
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBevel_ANPPaintJoin = 2
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintJoin;
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintAligns {
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kLeft_ANPPaintAlign     = 0,
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kCenter_ANPPaintAlign   = 1,
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRight_ANPPaintAlign    = 2
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintAlign;
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTextEncodings {
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF8_ANPTextEncoding   = 0,
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF16_ANPTextEncoding  = 1,
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTextEncoding;
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTypefaceStyles {
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBold_ANPTypefaceStyle      = 1 << 0,
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kItalic_ANPTypefaceStyle    = 1 << 1
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPTypefaceStyle;
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reedtypedef uint32_t ANPFontTableTag;
409b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPFontMetrics {
411ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The greatest distance above the baseline for any glyph (will be <= 0) */
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fTop;
413ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The recommended distance above the baseline (will be <= 0) */
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fAscent;
415ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The recommended distance below the baseline (will be >= 0) */
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fDescent;
417ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The greatest distance below the baseline for any glyph (will be >= 0) */
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fBottom;
419ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The recommended distance to add between lines of text (will be >= 0) */
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fLeading;
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypefaceInterfaceV0 : ANPInterface {
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested name and style. Pass null as the name to return
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the default font for the requested style. Will never return null
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param name     May be NULL. The name of the font family.
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param style    The style (normal, bold, italic) of the typeface.
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Caller must call
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done with the typeface.
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromName)(const char name[], ANPTypefaceStyle);
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested typeface and specified Style. Use this call if you want to
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pick a new style from the same family of the existing typeface.
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If family is NULL, this selects from the default font's family.
4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param family  May be NULL. The name of the existing type face.
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param s       The style (normal, bold, italic) of the type face.
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Call must call
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done.
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromTypeface)(const ANPTypeface* family,
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                       ANPTypefaceStyle);
447a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the owner count of the typeface. A newly created typeface has an
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count of 1. When the owner count is reaches 0, the typeface is
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        deleted.
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t (*getRefCount)(const ANPTypeface*);
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Increment the owner count on the typeface
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*ref)(ANPTypeface*);
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Decrement the owner count on the typeface. When the count goes to 0,
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the typeface is deleted.
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*unref)(ANPTypeface*);
462a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the style bits for the specified typeface
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypefaceStyle (*getStyle)(const ANPTypeface*);
466b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
4673cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed    /** Some fonts are stored in files. If that is true for the fontID, then
4683cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        this returns the byte length of the full file path. If path is not null,
4693cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        then the full path is copied into path (allocated by the caller), up to
4703cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        length bytes. If index is not null, then it is set to the truetype
4713cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        collection index for this font, or 0 if the font is not in a collection.
4723cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
4733cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        Note: getFontPath does not assume that path is a null-terminated string,
4743cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        so when it succeeds, it only copies the bytes of the file name and
4753cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        nothing else (i.e. it copies exactly the number of bytes returned by the
4763cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        function. If the caller wants to treat path[] as a C string, it must be
4773cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        sure that it is allocated at least 1 byte larger than the returned size,
4783cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        and it must copy in the terminating 0.
4793cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
4803cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        If the fontID does not correspond to a file, then the function returns
4813cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        0, and the path and index parameters are ignored.
4823cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
4833cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param fontID  The font whose file name is being queried
4843cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param path    Either NULL, or storage for receiving up to length bytes
4853cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                       of the font's file name. Allocated by the caller.
4863cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param length  The maximum space allocated in path (by the caller).
4873cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                       Ignored if path is NULL.
4883cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param index   Either NULL, or receives the TTC index for this font.
4893cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                       If the font is not a TTC, then will be set to 0.
4903cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @return The byte length of th font's file name, or 0 if the font is not
4913cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                baked by a file.
4923cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed     */
4933cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed    int32_t (*getFontPath)(const ANPTypeface*, char path[], int32_t length,
4943cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                           int32_t* index);
4953cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
496ae107e96f52ebe258a8ef5f32100c77ededc2d34Mike Reed    /** Return the path name for the font directory, or NULL if not supported
497b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed     */
498ae107e96f52ebe258a8ef5f32100c77ededc2d34Mike Reed    const char* (*getFontDirectoryPath)();
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaintInterfaceV0 : ANPInterface {
502ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a new paint object, which holds all of the color and style
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        attributes that affect how things (geometry, text, bitmaps) are drawn
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in a ANPCanvas.
505a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The paint that is returned is not tied to any particular plugin
5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaint*   (*newPaint)();
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deletePaint)(ANPPaint*);
511a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintFlags (*getFlags)(const ANPPaint*);
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setFlags)(ANPPaint*, ANPPaintFlags);
514a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPColor    (*getColor)(const ANPPaint*);
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setColor)(ANPPaint*, ANPColor);
517a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintStyle (*getStyle)(const ANPPaint*);
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStyle)(ANPPaint*, ANPPaintStyle);
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeWidth)(const ANPPaint*);
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeMiter)(const ANPPaint*);
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintCap (*getStrokeCap)(const ANPPaint*);
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintJoin (*getStrokeJoin)(const ANPPaint*);
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeWidth)(ANPPaint*, float);
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeMiter)(ANPPaint*, float);
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeCap)(ANPPaint*, ANPPaintCap);
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeJoin)(ANPPaint*, ANPPaintJoin);
529a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTextEncoding (*getTextEncoding)(const ANPPaint*);
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintAlign (*getTextAlign)(const ANPPaint*);
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSize)(const ANPPaint*);
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextScaleX)(const ANPPaint*);
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSkewX)(const ANPPaint*);
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextEncoding)(ANPPaint*, ANPTextEncoding);
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextAlign)(ANPPaint*, ANPPaintAlign);
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSize)(ANPPaint*, float);
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextScaleX)(ANPPaint*, float);
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSkewX)(ANPPaint*, float);
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the typeface ine paint, or null if there is none. This does not
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        modify the owner count of the returned typeface.
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*getTypeface)(const ANPPaint*);
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Set the paint's typeface. If the paint already had a non-null typeface,
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        its owner count is decremented. If the new typeface is non-null, its
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count is incremented.
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*setTypeface)(ANPPaint*, ANPTypeface*);
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the width of the text. If bounds is not null, return the bounds
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of the text in that rectangle.
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*measureText)(ANPPaint*, const void* text, uint32_t byteLength,
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         ANPRectF* bounds);
557a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the number of unichars specifed by the text.
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If widths is not null, returns the array of advance widths for each
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            unichar.
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If bounds is not null, returns the array of bounds for each unichar.
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int (*getTextWidths)(ANPPaint*, const void* text, uint32_t byteLength,
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         float widths[], ANPRectF bounds[]);
565a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return in metrics the spacing values for text, respecting the paint's
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        typeface and pointsize, and return the spacing between lines
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (descent - ascent + leading). If metrics is NULL, it will be ignored.
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*getFontMetrics)(ANPPaint*, ANPFontMetrics* metrics);
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvasInterfaceV0 : ANPInterface {
574ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a canvas that will draw into the specified bitmap. Note: the
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        canvas copies the fields of the bitmap, so it need not persist after
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this call, but the canvas DOES point to the same pixel memory that the
5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bitmap did, so the canvas should not be used after that pixel memory
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        goes out of scope. In the case of creating a canvas to draw into the
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pixels provided by kDraw_ANPEventType, those pixels are only while
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        handling that event.
581a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The canvas that is returned is not tied to any particular plugin
5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPCanvas*  (*newCanvas)(const ANPBitmap*);
5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteCanvas)(ANPCanvas*);
5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*save)(ANPCanvas*);
5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*restore)(ANPCanvas*);
5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*translate)(ANPCanvas*, float tx, float ty);
5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*scale)(ANPCanvas*, float sx, float sy);
5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*rotate)(ANPCanvas*, float degrees);
5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*skew)(ANPCanvas*, float kx, float ky);
5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*concat)(ANPCanvas*, const ANPMatrix*);
5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipRect)(ANPCanvas*, const ANPRectF*);
5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipPath)(ANPCanvas*, const ANPPath*);
5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the current matrix on the canvas
5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*getTotalMatrix)(ANPCanvas*, ANPMatrix*);
601ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the current clip bounds in local coordinates, expanding it to
6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        account for antialiasing edge effects if aa is true. If the
6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getLocalClipBounds)(ANPCanvas*, ANPRectF* bounds, bool aa);
606ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the current clip bounds in device coordinates in bounds. If the
6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getDeviceClipBounds)(ANPCanvas*, ANPRectI* bounds);
6104603aa50552a853aa7aedcd809460a83586daa53Mike Reed
6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawColor)(ANPCanvas*, ANPColor);
6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPaint)(ANPCanvas*, const ANPPaint*);
6134603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void        (*drawLine)(ANPCanvas*, float x0, float y0, float x1, float y1,
6144603aa50552a853aa7aedcd809460a83586daa53Mike Reed                            const ANPPaint*);
6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawRect)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawOval)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPath)(ANPCanvas*, const ANPPath*, const ANPPaint*);
6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawText)(ANPCanvas*, const void* text, uint32_t byteLength,
6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            float x, float y, const ANPPaint*);
6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void       (*drawPosText)(ANPCanvas*, const void* text, uint32_t byteLength,
6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                               const float xy[], const ANPPaint*);
6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmap)(ANPCanvas*, const ANPBitmap*, float x, float y,
6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                              const ANPPaint*);
6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmapRect)(ANPCanvas*, const ANPBitmap*,
6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPRectI* src, const ANPRectF* dst,
6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPPaint*);
6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPWindowInterfaceV0 : ANPInterface {
6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Given the window field from the NPWindow struct, and an optional rect
6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        describing the subset of the window that will be drawn to (may be null)
6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true if the bitmap for that window can be accessed, and if so,
6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        fill out the specified ANPBitmap to point to the window's pixels.
634a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        When drawing is complete, call unlock(window)
6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool    (*lockRect)(void* window, const ANPRectI* inval, ANPBitmap*);
6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** The same as lockRect, but takes a region instead of a rect to specify
6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the area that will be changed/drawn.
6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool    (*lockRegion)(void* window, const ANPRegion* inval, ANPBitmap*);
6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Given a successful call to lock(window, inval, &bitmap), call unlock
6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        to release access to the pixels, and allow the browser to display the
6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        results. If lock returned false, unlock should not be called.
6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void    (*unlock)(void* window);
647e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    /** Registers a set of rectangles that the plugin would like to keep on
648e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        screen. The rectangles are listed in order of priority with the highest
649e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        priority rectangle in location rects[0].  The browser will attempt to keep
650e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        as many of the rectangles on screen as possible and will scroll them into
651e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        view in response to the invocation of this method and other various events.
652e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        The count specifies how many rectangles are in the array. If the count is
653e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        zero it signals the browser that any existing rectangles should be cleared
654e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        and no rectangles will be tracked.
655e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger     */
656e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    void (*setVisibleRects)(NPP instance, const ANPRectI rects[], int32_t count);
657e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    /** Clears any rectangles that are being tracked as a result of a call to
658e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        setVisibleRects. This call is equivalent to setVisibleRect(inst, NULL, 0).
659e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger     */
660e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    void    (*clearVisibleRects)(NPP instance);
6615c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger    /** Given a boolean value of true the device will be requested to provide
6625c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger        a keyboard. A value of false will result in a request to hide the
6635c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger        keyboard. Further, the on-screen keyboard will not be displayed if a
6645c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger        physical keyboard is active.
6655c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger     */
6665c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger    void    (*showKeyboard)(NPP instance, bool value);
6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPSampleFormats {
6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnknown_ANPSamleFormat     = 0,
6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM16Bit_ANPSampleFormat   = 1,
6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM8Bit_ANPSampleFormat    = 2
6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPSampleFormat;
6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** The audio buffer is passed to the callback proc to request more samples.
6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    It is owned by the system, and the callback may read it, but should not
6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    maintain a pointer to it outside of the scope of the callback proc.
6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioBuffer {
6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t     channelCount;
6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPSampleFormat  format;
6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This buffer is owned by the caller. Inside the callback proc, up to
6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "size" bytes of sample data should be written into this buffer. The
6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        address is only valid for the scope of a single invocation of the
6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        callback proc.
6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void*       bufferData;
6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** On input, specifies the maximum number of bytes that can be written
6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        to "bufferData". On output, specifies the actual number of bytes that
6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the callback proc wrote into "bufferData".
6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    size;
6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPAudioEvents {
7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc when the audio-track needs
7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        more sample data written to the provided buffer parameter.
7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMoreData_ANPAudioEvent = 0,
7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc if the audio system runs out
7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of sample data. In this event, no buffer parameter will be specified
7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (i.e. NULL will be passed to the 3rd parameter).
7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderRun_ANPAudioEvent = 1
7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPAudioEvent;
7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Called to feed sample data to the track. This will be called in a separate
7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    thread. However, you may call trackStop() from the callback (but you
7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    cannot delete the track).
716a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    For example, when you have written the last chunk of sample data, you can
7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    immediately call trackStop(). This will take effect after the current
7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    buffer has been played.
720a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The "user" parameter is the same value that was passed to newTrack()
7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (*ANPAudioCallbackProc)(ANPAudioEvent event, void* user,
7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                     ANPAudioBuffer* buffer);
7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrack;   // abstract type for audio tracks
7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrackInterfaceV0 : ANPInterface {
729ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Create a new audio track, or NULL on failure.
7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPAudioTrack*  (*newTrack)(uint32_t sampleRate,    // sampling rate in Hz
7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPSampleFormat,
7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                int channelCount,       // MONO=1, STEREO=2
7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPAudioCallbackProc,
7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                void* user);
7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*deleteTrack)(ANPAudioTrack*);
7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*start)(ANPAudioTrack*);
7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*pause)(ANPAudioTrack*);
7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*stop)(ANPAudioTrack*);
7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Returns true if the track is not playing (e.g. pause or stop was called,
7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        or start was never called.
7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool (*isStopped)(ANPAudioTrack*);
7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// HandleEvent
7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPEventTypes {
7513d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kNull_ANPEventType          = 0,
7523d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kKey_ANPEventType           = 1,
753d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kMouse_ANPEventType         = 2,
754d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kTouch_ANPEventType         = 3,
755d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kDraw_ANPEventType          = 4,
756d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kLifecycle_ANPEventType     = 5,
757e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    kSurface_ANPEventType       = 6,
7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPEventType;
7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyActions {
7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDown_ANPKeyAction  = 0,
7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUp_ANPKeyAction    = 1,
7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyAction;
7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ANPKeyCodes.h"
7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyCode;
7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyModifiers {
7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAlt_ANPKeyModifier     = 1 << 0,
7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kShift_ANPKeyModifier   = 1 << 1,
7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// bit-field containing some number of ANPKeyModifier bits
7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPKeyModifier;
7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
777d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergerenum ANPMouseActions {
778d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kDown_ANPMouseAction  = 0,
779d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kUp_ANPMouseAction    = 1,
780d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger};
781d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergertypedef int32_t ANPMouseAction;
782d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger
7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTouchActions {
78456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kDown_ANPTouchAction   = 0,
78556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kUp_ANPTouchAction     = 1,
78656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kMove_ANPTouchAction   = 2,
78756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kCancel_ANPTouchAction = 3,
7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTouchAction;
7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
791a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergerenum ANPLifecycleActions {
792a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger    kPause_ANPLifecycleAction      = 0,
793a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger    kResume_ANPLifecycleAction     = 1,
794a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger    kGainFocus_ANPLifecycleAction  = 2,
795ba11d034d7050033f698b2bc3a3c156e062ba2ddDerek Sollenberger    kLoseFocus_ANPLifecycleAction  = 3,
7960fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger    kFreeMemory_ANPLifecycleAction = 4,
797243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    /** The page has finished loading. This happens when the page's top level
798243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger        frame reports that it has completed loading.
799243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger     */
80010c34b4139f0041a0dac539139c7dbee46595b2cDerek Sollenberger    kOnLoad_ANPLifecycleAction     = 5,
801a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger};
802a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergertypedef uint32_t ANPLifecycleAction;
803a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
804e661c6da169832b46b6db967a09adb4459db003aPatrick Scottenum ANPSurfaceActions {
805e661c6da169832b46b6db967a09adb4459db003aPatrick Scott    /** The surface has been created and is ready to be used. Any calls to
806e661c6da169832b46b6db967a09adb4459db003aPatrick Scott        lock/unlock before this action will fail.
807e661c6da169832b46b6db967a09adb4459db003aPatrick Scott     */
808e661c6da169832b46b6db967a09adb4459db003aPatrick Scott    kCreated_ANPSurfaceAction    = 0,
809969b05c5249c99a107c8542cdda4a1e47d5a7487Patrick Scott    /** The surface's dimension has changed.
810e661c6da169832b46b6db967a09adb4459db003aPatrick Scott     */
811e661c6da169832b46b6db967a09adb4459db003aPatrick Scott    kChanged_ANPSurfaceAction    = 1,
812e661c6da169832b46b6db967a09adb4459db003aPatrick Scott    /** The surface has been destroyed. This happens when the view system has
813e661c6da169832b46b6db967a09adb4459db003aPatrick Scott        remove the surface (possibly due to the plugin being offscreen). Calls
814e661c6da169832b46b6db967a09adb4459db003aPatrick Scott        to lock/unlock will fail after this action and before
815e661c6da169832b46b6db967a09adb4459db003aPatrick Scott        kCreate_ANPSurfaceAction.
816e661c6da169832b46b6db967a09adb4459db003aPatrick Scott     */
817e661c6da169832b46b6db967a09adb4459db003aPatrick Scott    kDestroyed_ANPSurfaceAction  = 2,
818e661c6da169832b46b6db967a09adb4459db003aPatrick Scott};
819e661c6da169832b46b6db967a09adb4459db003aPatrick Scotttypedef uint32_t ANPSurfaceAction;
820e661c6da169832b46b6db967a09adb4459db003aPatrick Scott
8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This is what is passed to NPP_HandleEvent() */
8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPEvent {
8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t        inSize;  // size of this struct in bytes
8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPEventType    eventType;
8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // use based on the value in eventType
8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    union {
8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyAction    action;
8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyCode      nativeCode;
8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         virtualCode;    // windows virtual key code
8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         repeatCount;    // 0 for initial down (or up)
8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         unichar;        // 0 if there is no value
8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } key;
8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
836d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            ANPMouseAction  action;
837d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            int32_t         x;  // relative to your "window" (0...width)
838d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            int32_t         y;  // relative to your "window" (0...height)
839d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger        } mouse;
840d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger        struct {
8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPTouchAction  action;
8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         x;  // relative to your "window" (0...width)
8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         y;  // relative to your "window" (0...height)
8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } touch;
846a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger        struct {
847a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger            ANPLifecycleAction  action;
848a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger        } lifecycle;
849535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger        struct {
850535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            ANPDrawingModel model;
851535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            // relative to (0,0) in top-left of your plugin
852535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            ANPRectI        clip;
853535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            // use based on the value in model
854535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            union {
855535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger                ANPBitmap   bitmap;
856535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            } data;
857535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger        } draw;
8583d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger        struct {
859e661c6da169832b46b6db967a09adb4459db003aPatrick Scott            ANPSurfaceAction action;
860e661c6da169832b46b6db967a09adb4459db003aPatrick Scott            /** This union is based on the value of action and contains data
861e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                specific to the given action.
862e661c6da169832b46b6db967a09adb4459db003aPatrick Scott             */
863e661c6da169832b46b6db967a09adb4459db003aPatrick Scott            union {
864e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                /** This struct is filled in only during the
865e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                    kChanged_ANPSurfaceAction action. For all other actions,
866e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                    this struct is undefined.
867e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                  */
868e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                struct {
869e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                    int32_t width;
870e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                    int32_t height;
871e661c6da169832b46b6db967a09adb4459db003aPatrick Scott                } changed;
872e661c6da169832b46b6db967a09adb4459db003aPatrick Scott            } data;
873e661c6da169832b46b6db967a09adb4459db003aPatrick Scott        } surface;
874243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger        int32_t     other[8];
8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } data;
8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8780a2bed53555947aea37912d694f9c7c376490808Grace Kloba///////////////////////////////////////////////////////////////////////////////
8790a2bed53555947aea37912d694f9c7c376490808Grace Kloba// System properties
8800a2bed53555947aea37912d694f9c7c376490808Grace Kloba
8810a2bed53555947aea37912d694f9c7c376490808Grace Klobastruct ANPSystemInterfaceV0 : ANPInterface {
8820a2bed53555947aea37912d694f9c7c376490808Grace Kloba    /** Return the path name for the current Application's plugin data directory,
8830a2bed53555947aea37912d694f9c7c376490808Grace Kloba     *  or NULL if not supported
8840a2bed53555947aea37912d694f9c7c376490808Grace Kloba     */
8850a2bed53555947aea37912d694f9c7c376490808Grace Kloba    const char* (*getApplicationDataDirectory)();
8860a2bed53555947aea37912d694f9c7c376490808Grace Kloba};
8870a2bed53555947aea37912d694f9c7c376490808Grace Kloba
8888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
8898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
890