18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
25536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger * Copyright 2009, The Android Open Source Project
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
163298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  Defines the android-specific types and functions as part of npapi
27a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    In particular, defines the window and event types that are passed to
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue, NPP_SetWindow and NPP_HandleEvent.
30a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    To minimize what native libraries the plugin links against, some
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    functionality is provided via function-ptrs (e.g. time, sound)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
353d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#ifndef android_npapi_h
363d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#define android_npapi_h
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdint.h>
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npapi.h"
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// General types
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPBitmapFormats {
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnknown_ANPBitmapFormat    = 0,
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRGBA_8888_ANPBitmapFormat  = 1,
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRGB_565_ANPBitmapFormat    = 2
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPBitmapFormat;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
52a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPPixelPacking {
53a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t AShift;
54a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t ABits;
55a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t RShift;
56a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t RBits;
57a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t GShift;
58a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t GBits;
59a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t BShift;
60a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t BBits;
61a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed};
62a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPBitmap {
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void*           baseAddr;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPBitmapFormat format;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         width;
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         height;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         rowBytes;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectF {
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   left;
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   top;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   right;
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   bottom;
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectI {
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t left;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t top;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t right;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t bottom;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvas;
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrix;
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaint;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPath;
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRegion;
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypeface;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPMatrixFlags {
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kIdentity_ANPMatrixFlag     = 0,
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kTranslate_ANPMatrixFlag    = 0x01,
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kScale_ANPMatrixFlag        = 0x02,
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAffine_ANPMatrixFlag       = 0x04,
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPerspective_ANPMatrixFlag  = 0x08,
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPMatrixFlag;
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NPN_GetValue
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
104ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** queries for a specific ANPInterface.
105a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Maybe called with NULL for the NPP instance
107a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue(inst, interface_enum, ANPInterface*)
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kLogInterfaceV0_ANPGetValue         ((NPNVariable)1000)
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kAudioTrackInterfaceV0_ANPGetValue  ((NPNVariable)1001)
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kCanvasInterfaceV0_ANPGetValue      ((NPNVariable)1002)
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kMatrixInterfaceV0_ANPGetValue      ((NPNVariable)1003)
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kPaintInterfaceV0_ANPGetValue       ((NPNVariable)1004)
1152ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kPathInterfaceV0_ANPGetValue        ((NPNVariable)1005)
1162ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kTypefaceInterfaceV0_ANPGetValue    ((NPNVariable)1006)
1172ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kWindowInterfaceV0_ANPGetValue      ((NPNVariable)1007)
118a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define kBitmapInterfaceV0_ANPGetValue      ((NPNVariable)1008)
119f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger#define kSurfaceInterfaceV0_ANPGetValue     ((NPNVariable)1009)
1200a2bed53555947aea37912d694f9c7c376490808Grace Kloba#define kSystemInterfaceV0_ANPGetValue      ((NPNVariable)1010)
12156074874733a95498646a3fc575ef62fd9218f58Mike Reed#define kEventInterfaceV0_ANPGetValue       ((NPNVariable)1011)
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12349bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger#define kAudioTrackInterfaceV1_ANPGetValue  ((NPNVariable)1012)
1246ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger#define kOpenGLInterfaceV0_ANPGetValue      ((NPNVariable)1013)
1251f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger#define kWindowInterfaceV1_ANPGetValue      ((NPNVariable)1014)
126136290ef021ff9a9bf9152124a5fa42069acfdfcDerek Sollenberger#define kVideoInterfaceV0_ANPGetValue       ((NPNVariable)1015)
1279bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger#define kSystemInterfaceV1_ANPGetValue      ((NPNVariable)1016)
12849bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger
1292ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger#define kSystemInterfaceV2_ANPGetValue      ((NPNVariable)1017)
130efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger#define kWindowInterfaceV2_ANPGetValue      ((NPNVariable)1018)
1312ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger
1322c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger#define kNativeWindowInterfaceV0_ANPGetValue ((NPNVariable)1019)
133b8c086775bdf98e932daead992eb960767248f44Derek Sollenberger#define kVideoInterfaceV1_ANPGetValue       ((NPNVariable)1020)
1342c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger
135838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger/** queries for the drawing models supported on this device.
136a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
137838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    NPN_GetValue(inst, kSupportedDrawingModel_ANPGetValue, uint32_t* bits)
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kSupportedDrawingModel_ANPGetValue  ((NPNVariable)2000)
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14127a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger/** queries for the context (android.content.Context) of the plugin. If no
14227a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger    instance is specified the application's context is returned. If the instance
14327a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger    is given then the context returned is identical to the context used to
14427a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger    create the webview in which that instance resides.
14527a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger
14627a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger    NOTE: Holding onto a non-application context after your instance has been
14727a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger    destroyed will cause a memory leak.  Refer to the android documentation to
14827a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger    determine what context is best suited for your particular scenario.
149838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger
150838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    NPN_GetValue(inst, kJavaContext_ANPGetValue, jobject context)
151838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger */
152838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger#define kJavaContext_ANPGetValue            ((NPNVariable)2001)
153838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
15556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger// NPN_SetValue
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15710d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger/** Request to set the drawing model. SetValue will return false if the drawing
15810d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger    model is not supported or has insufficient information for configuration.
159a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
16010d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger    NPN_SetValue(inst, kRequestDrawingModel_ANPSetValue, (void*)foo_ANPDrawingModel)
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kRequestDrawingModel_ANPSetValue    ((NPPVariable)1000)
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1645536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger/** These are used as bitfields in ANPSupportedDrawingModels_EnumValue,
1655536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger    and as-is in ANPRequestDrawingModel_EnumValue. The drawing model determines
1665536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger    how to interpret the ANPDrawingContext provided in the Draw event and how
1675536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger    to interpret the NPWindow->window field.
1685536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger */
1695536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenbergerenum ANPDrawingModels {
1705536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger    /** Draw into a bitmap from the browser thread in response to a Draw event.
1715536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        NPWindow->window is reserved (ignore)
1725536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger     */
173838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kBitmap_ANPDrawingModel  = 1 << 0,
1745536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger    /** Draw into a surface (e.g. raster, openGL, etc.) using the Java surface
1755536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        interface. When this model is used the browser will invoke the Java
1761a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger        class specified in the plugin's apk manifest. From that class the browser
1771a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger        will invoke the appropriate method to return an an instance of a android
1781a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger        Java View. The instance is then embedded in the html. The plugin can then
1791a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger        manipulate the view as it would any normal Java View in android.
1805536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger
1815536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        Unlike the bitmap model, a surface model is opaque so no html content
1825536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        behind the plugin will be  visible. Unless the plugin needs to be
1835536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        transparent the surface model should be chosen over the bitmap model as
1845536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        it will have better performance.
1855536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger
1865536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        Further, a plugin can manipulate some surfaces in native code using the
1875536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        ANPSurfaceInterface.  This interface can be used to manipulate Java
1885536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        objects that extend Surface.class by allowing them to access the
1895536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        surface's underlying bitmap in native code.  For instance, if a raster
1905536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        surface is used the plugin can lock, draw directly into the bitmap, and
1915536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        unlock the surface in native code without making JNI calls to the Java
1925536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger        surface object.
1935536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger     */
194838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kSurface_ANPDrawingModel = 1 << 1,
1956ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger    kOpenGL_ANPDrawingModel  = 1 << 2,
1965536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger};
1975536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenbergertypedef int32_t ANPDrawingModel;
1985536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger
199243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger/** Request to receive/disable events. If the pointer is NULL then all flags will
200243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    be disabled. Otherwise, the event type will be enabled iff its corresponding
20156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    bit in the EventFlags bit field is set.
20256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
20356ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    NPN_SetValue(inst, ANPAcceptEvents, (void*)EventFlags)
20456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */
2051a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger#define kAcceptEvents_ANPSetValue           ((NPPVariable)1001)
20656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
207ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** The EventFlags are a set of bits used to determine which types of events the
20856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    plugin wishes to receive. For example, if the value is 0x03 then both key
20956ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    and touch events will be provided to the plugin.
21056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */
21156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergerenum ANPEventFlag {
212243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    kKey_ANPEventFlag               = 0x01,
213243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    kTouch_ANPEventFlag             = 0x02,
21456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger};
21556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergertypedef uint32_t ANPEventFlags;
21656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
217838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger///////////////////////////////////////////////////////////////////////////////
218838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger// NPP_GetValue
219838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger
220838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger/** Requests that the plugin return a java surface to be displayed. This will
221838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    only be used if the plugin has choosen the kSurface_ANPDrawingModel.
222838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger
223838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    NPP_GetValue(inst, kJavaSurface_ANPGetValue, jobject surface)
224838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger */
225838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger#define kJavaSurface_ANPGetValue            ((NPPVariable)2000)
226838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger
2275536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger
2285536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger///////////////////////////////////////////////////////////////////////////////
2295536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger// ANDROID INTERFACE DEFINITIONS
2305536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger
231ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger/** Interfaces provide additional functionality to the plugin via function ptrs.
232ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    Once an interface is retrieved, it is valid for the lifetime of the plugin
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    (just like browserfuncs).
234a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    All ANPInterfaces begin with an inSize field, which must be set by the
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    caller (plugin) with the number of bytes allocated for the interface.
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    e.g. SomeInterface si; si.inSize = sizeof(si); browser->getvalue(..., &si);
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPInterface {
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    inSize;     // size (in bytes) of this struct
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPLogTypes {
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kError_ANPLogType   = 0,    // error
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kWarning_ANPLogType = 1,    // warning
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDebug_ANPLogType   = 2     // debug only (informational)
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPLogType;
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPLogInterfaceV0 : ANPInterface {
251ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** dumps printf messages to the log file
252ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        e.g. interface->log(instance, kWarning_ANPLogType, "value is %d", value);
253ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger     */
25424ba66f9ba2dae444192c4860c7b57c4289d4d5cDerek Sollenberger    void (*log)(ANPLogType, const char format[], ...);
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
257a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPBitmapInterfaceV0 : ANPInterface {
258a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    /** Returns true if the specified bitmap format is supported, and if packing
259a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed        is non-null, sets it to the packing info for that format.
260a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed     */
261a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    bool (*getPixelPacking)(ANPBitmapFormat, ANPPixelPacking* packing);
262a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed};
263a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrixInterfaceV0 : ANPInterface {
265ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a new identity matrix
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrix*  (*newMatrix)();
268ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Delete a matrix previously allocated by newMatrix()
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteMatrix)(ANPMatrix*);
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrixFlag (*getFlags)(const ANPMatrix*);
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*copy)(ANPMatrix* dst, const ANPMatrix* src);
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
276ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the matrix values in a float array (allcoated by the caller),
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        w  = x * [6] + y * [7] + [8];
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        x' = (x * [0] + y * [1] + [2]) / w;
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        y' = (x * [3] + y * [4] + [5]) / w;
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*get3x3)(const ANPMatrix*, float[9]);
283ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Initialize the matrix from values in a float array,
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         w  = x * [6] + y * [7] + [8];
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         x' = (x * [0] + y * [1] + [2]) / w;
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         y' = (x * [3] + y * [4] + [5]) / w;
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*set3x3)(ANPMatrix*, const float[9]);
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setIdentity)(ANPMatrix*);
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preTranslate)(ANPMatrix*, float tx, float ty);
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postTranslate)(ANPMatrix*, float tx, float ty);
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preScale)(ANPMatrix*, float sx, float sy);
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postScale)(ANPMatrix*, float sx, float sy);
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preSkew)(ANPMatrix*, float kx, float ky);
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postSkew)(ANPMatrix*, float kx, float ky);
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preRotate)(ANPMatrix*, float degrees);
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postRotate)(ANPMatrix*, float degrees);
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preConcat)(ANPMatrix*, const ANPMatrix*);
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postConcat)(ANPMatrix*, const ANPMatrix*);
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
303ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return true if src is invertible, and if so, return its inverse in dst.
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If src is not invertible, return false and ignore dst.
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*invert)(ANPMatrix* dst, const ANPMatrix* src);
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Transform the x,y pairs in src[] by this matrix, and store the results
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in dst[]. The count parameter is treated as the number of pairs in the
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        array. It is legal for src and dst to point to the same memory, but
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        illegal for the two arrays to partially overlap.
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*mapPoints)(ANPMatrix*, float dst[], const float src[],
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                             int32_t count);
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3174603aa50552a853aa7aedcd809460a83586daa53Mike Reedstruct ANPPathInterfaceV0 : ANPInterface {
318ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a new path */
3194603aa50552a853aa7aedcd809460a83586daa53Mike Reed    ANPPath* (*newPath)();
3204603aa50552a853aa7aedcd809460a83586daa53Mike Reed
321ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Delete a path previously allocated by ANPPath() */
3224603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*deletePath)(ANPPath*);
3234603aa50552a853aa7aedcd809460a83586daa53Mike Reed
324ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Make a deep copy of the src path, into the dst path (already allocated
325ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger        by the caller).
3264603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3274603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*copy)(ANPPath* dst, const ANPPath* src);
3284603aa50552a853aa7aedcd809460a83586daa53Mike Reed
329ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Returns true if the two paths are the same (i.e. have the same points)
3304603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3314603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*equal)(const ANPPath* path0, const ANPPath* path1);
3324603aa50552a853aa7aedcd809460a83586daa53Mike Reed
333ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Remove any previous points, initializing the path back to empty. */
3344603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*reset)(ANPPath*);
3354603aa50552a853aa7aedcd809460a83586daa53Mike Reed
336ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return true if the path is empty (has no lines, quads or cubics). */
3374603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*isEmpty)(const ANPPath*);
3384603aa50552a853aa7aedcd809460a83586daa53Mike Reed
339ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the path's bounds in bounds. */
3404603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*getBounds)(const ANPPath*, ANPRectF* bounds);
3414603aa50552a853aa7aedcd809460a83586daa53Mike Reed
3424603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*moveTo)(ANPPath*, float x, float y);
3434603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*lineTo)(ANPPath*, float x, float y);
3444603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*quadTo)(ANPPath*, float x0, float y0, float x1, float y1);
3454603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*cubicTo)(ANPPath*, float x0, float y0, float x1, float y1,
3464603aa50552a853aa7aedcd809460a83586daa53Mike Reed                    float x2, float y2);
3474603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*close)(ANPPath*);
3484603aa50552a853aa7aedcd809460a83586daa53Mike Reed
349ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Offset the src path by [dx, dy]. If dst is null, apply the
3504603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
3514603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
3524603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
3534603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3544603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*offset)(ANPPath* src, float dx, float dy, ANPPath* dst);
3554603aa50552a853aa7aedcd809460a83586daa53Mike Reed
356ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Transform the path by the matrix. If dst is null, apply the
3574603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
3584603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
3594603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
3604603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
3614603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*transform)(ANPPath* src, const ANPMatrix*, ANPPath* dst);
3624603aa50552a853aa7aedcd809460a83586daa53Mike Reed};
3634603aa50552a853aa7aedcd809460a83586daa53Mike Reed
364a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed/** ANPColor is always defined to have the same packing on all platforms, and
365a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    it is always unpremultiplied.
3660fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger
367a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    This is in contrast to 32bit format(s) in bitmaps, which are premultiplied,
368a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    and their packing may vary depending on the platform, hence the need for
369a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    ANPBitmapInterface::getPixelPacking()
370a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed */
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPColor;
372a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_ASHIFT     24
373a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_RSHIFT     16
374a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_GSHIFT     8
375a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_BSHIFT     0
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ANP_MAKE_COLOR(a, r, g, b)  \
377a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                   (((a) << ANPColor_ASHIFT) |  \
378a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((r) << ANPColor_RSHIFT) |  \
379a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((g) << ANPColor_GSHIFT) |  \
380a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((b) << ANPColor_BSHIFT))
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintFlag {
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAntiAlias_ANPPaintFlag         = 1 << 0,
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFilterBitmap_ANPPaintFlag      = 1 << 1,
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDither_ANPPaintFlag            = 1 << 2,
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderlineText_ANPPaintFlag     = 1 << 3,
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStrikeThruText_ANPPaintFlag    = 1 << 4,
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFakeBoldText_ANPPaintFlag      = 1 << 5,
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPPaintFlags;
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintStyles {
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFill_ANPPaintStyle             = 0,
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStroke_ANPPaintStyle           = 1,
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFillAndStroke_ANPPaintStyle    = 2
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintStyle;
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintCaps {
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kButt_ANPPaintCap   = 0,
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintCap  = 1,
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kSquare_ANPPaintCap = 2
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintCap;
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintJoins {
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMiter_ANPPaintJoin = 0,
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintJoin = 1,
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBevel_ANPPaintJoin = 2
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintJoin;
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintAligns {
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kLeft_ANPPaintAlign     = 0,
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kCenter_ANPPaintAlign   = 1,
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRight_ANPPaintAlign    = 2
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintAlign;
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTextEncodings {
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF8_ANPTextEncoding   = 0,
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF16_ANPTextEncoding  = 1,
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTextEncoding;
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTypefaceStyles {
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBold_ANPTypefaceStyle      = 1 << 0,
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kItalic_ANPTypefaceStyle    = 1 << 1
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPTypefaceStyle;
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
432b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reedtypedef uint32_t ANPFontTableTag;
433b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPFontMetrics {
435ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The greatest distance above the baseline for any glyph (will be <= 0) */
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fTop;
437ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The recommended distance above the baseline (will be <= 0) */
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fAscent;
439ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The recommended distance below the baseline (will be >= 0) */
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fDescent;
441ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The greatest distance below the baseline for any glyph (will be >= 0) */
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fBottom;
443ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** The recommended distance to add between lines of text (will be >= 0) */
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fLeading;
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypefaceInterfaceV0 : ANPInterface {
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested name and style. Pass null as the name to return
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the default font for the requested style. Will never return null
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4521c97c8027a51a511742fcabf75365e3b5a35828eMike Reed        The 5 generic font names "serif", "sans-serif", "monospace", "cursive",
4531c97c8027a51a511742fcabf75365e3b5a35828eMike Reed        "fantasy" are recognized, and will be mapped to their logical font
4541c97c8027a51a511742fcabf75365e3b5a35828eMike Reed        automatically by this call.
4551c97c8027a51a511742fcabf75365e3b5a35828eMike Reed
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param name     May be NULL. The name of the font family.
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param style    The style (normal, bold, italic) of the typeface.
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Caller must call
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done with the typeface.
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromName)(const char name[], ANPTypefaceStyle);
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested typeface and specified Style. Use this call if you want to
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pick a new style from the same family of the existing typeface.
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If family is NULL, this selects from the default font's family.
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param family  May be NULL. The name of the existing type face.
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param s       The style (normal, bold, italic) of the type face.
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Call must call
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done.
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromTypeface)(const ANPTypeface* family,
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                       ANPTypefaceStyle);
475a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the owner count of the typeface. A newly created typeface has an
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count of 1. When the owner count is reaches 0, the typeface is
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        deleted.
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t (*getRefCount)(const ANPTypeface*);
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Increment the owner count on the typeface
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*ref)(ANPTypeface*);
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Decrement the owner count on the typeface. When the count goes to 0,
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the typeface is deleted.
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*unref)(ANPTypeface*);
490a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the style bits for the specified typeface
4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypefaceStyle (*getStyle)(const ANPTypeface*);
494b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
4953cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed    /** Some fonts are stored in files. If that is true for the fontID, then
4963cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        this returns the byte length of the full file path. If path is not null,
4973cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        then the full path is copied into path (allocated by the caller), up to
4983cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        length bytes. If index is not null, then it is set to the truetype
4993cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        collection index for this font, or 0 if the font is not in a collection.
5003cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
5013cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        Note: getFontPath does not assume that path is a null-terminated string,
5023cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        so when it succeeds, it only copies the bytes of the file name and
5033cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        nothing else (i.e. it copies exactly the number of bytes returned by the
5043cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        function. If the caller wants to treat path[] as a C string, it must be
5053cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        sure that it is allocated at least 1 byte larger than the returned size,
5063cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        and it must copy in the terminating 0.
5073cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
5083cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        If the fontID does not correspond to a file, then the function returns
5093cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        0, and the path and index parameters are ignored.
5103cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
5113cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param fontID  The font whose file name is being queried
5123cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param path    Either NULL, or storage for receiving up to length bytes
5133cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                       of the font's file name. Allocated by the caller.
5143cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param length  The maximum space allocated in path (by the caller).
5153cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                       Ignored if path is NULL.
5163cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @param index   Either NULL, or receives the TTC index for this font.
5173cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                       If the font is not a TTC, then will be set to 0.
5183cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed        @return The byte length of th font's file name, or 0 if the font is not
5193cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                baked by a file.
5203cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed     */
5213cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed    int32_t (*getFontPath)(const ANPTypeface*, char path[], int32_t length,
5223cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed                           int32_t* index);
5233cec237b4a0df2776318c343c9ccc9bbbcfd11f8Mike Reed
5241c97c8027a51a511742fcabf75365e3b5a35828eMike Reed    /** Return a UTF8 encoded path name for the font directory, or NULL if not
5251c97c8027a51a511742fcabf75365e3b5a35828eMike Reed        supported. If returned, this string address will be valid for the life
52610d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger        of the plugin instance. It will always end with a '/' character.
527b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed     */
528ae107e96f52ebe258a8ef5f32100c77ededc2d34Mike Reed    const char* (*getFontDirectoryPath)();
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaintInterfaceV0 : ANPInterface {
532ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a new paint object, which holds all of the color and style
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        attributes that affect how things (geometry, text, bitmaps) are drawn
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in a ANPCanvas.
535a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The paint that is returned is not tied to any particular plugin
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaint*   (*newPaint)();
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deletePaint)(ANPPaint*);
541a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintFlags (*getFlags)(const ANPPaint*);
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setFlags)(ANPPaint*, ANPPaintFlags);
544a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPColor    (*getColor)(const ANPPaint*);
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setColor)(ANPPaint*, ANPColor);
547a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintStyle (*getStyle)(const ANPPaint*);
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStyle)(ANPPaint*, ANPPaintStyle);
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeWidth)(const ANPPaint*);
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeMiter)(const ANPPaint*);
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintCap (*getStrokeCap)(const ANPPaint*);
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintJoin (*getStrokeJoin)(const ANPPaint*);
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeWidth)(ANPPaint*, float);
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeMiter)(ANPPaint*, float);
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeCap)(ANPPaint*, ANPPaintCap);
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeJoin)(ANPPaint*, ANPPaintJoin);
559a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTextEncoding (*getTextEncoding)(const ANPPaint*);
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintAlign (*getTextAlign)(const ANPPaint*);
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSize)(const ANPPaint*);
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextScaleX)(const ANPPaint*);
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSkewX)(const ANPPaint*);
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextEncoding)(ANPPaint*, ANPTextEncoding);
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextAlign)(ANPPaint*, ANPPaintAlign);
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSize)(ANPPaint*, float);
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextScaleX)(ANPPaint*, float);
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSkewX)(ANPPaint*, float);
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the typeface ine paint, or null if there is none. This does not
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        modify the owner count of the returned typeface.
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*getTypeface)(const ANPPaint*);
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Set the paint's typeface. If the paint already had a non-null typeface,
5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        its owner count is decremented. If the new typeface is non-null, its
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count is incremented.
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*setTypeface)(ANPPaint*, ANPTypeface*);
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the width of the text. If bounds is not null, return the bounds
5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of the text in that rectangle.
5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*measureText)(ANPPaint*, const void* text, uint32_t byteLength,
5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         ANPRectF* bounds);
587a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the number of unichars specifed by the text.
5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If widths is not null, returns the array of advance widths for each
5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            unichar.
5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If bounds is not null, returns the array of bounds for each unichar.
5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int (*getTextWidths)(ANPPaint*, const void* text, uint32_t byteLength,
5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         float widths[], ANPRectF bounds[]);
595a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return in metrics the spacing values for text, respecting the paint's
5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        typeface and pointsize, and return the spacing between lines
5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (descent - ascent + leading). If metrics is NULL, it will be ignored.
5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*getFontMetrics)(ANPPaint*, ANPFontMetrics* metrics);
6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvasInterfaceV0 : ANPInterface {
604ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return a canvas that will draw into the specified bitmap. Note: the
6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        canvas copies the fields of the bitmap, so it need not persist after
6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this call, but the canvas DOES point to the same pixel memory that the
6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bitmap did, so the canvas should not be used after that pixel memory
6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        goes out of scope. In the case of creating a canvas to draw into the
6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pixels provided by kDraw_ANPEventType, those pixels are only while
6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        handling that event.
611a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The canvas that is returned is not tied to any particular plugin
6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPCanvas*  (*newCanvas)(const ANPBitmap*);
6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteCanvas)(ANPCanvas*);
6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*save)(ANPCanvas*);
6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*restore)(ANPCanvas*);
6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*translate)(ANPCanvas*, float tx, float ty);
6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*scale)(ANPCanvas*, float sx, float sy);
6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*rotate)(ANPCanvas*, float degrees);
6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*skew)(ANPCanvas*, float kx, float ky);
6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*concat)(ANPCanvas*, const ANPMatrix*);
6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipRect)(ANPCanvas*, const ANPRectF*);
6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipPath)(ANPCanvas*, const ANPPath*);
6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
628ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the current matrix on the canvas
6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*getTotalMatrix)(ANPCanvas*, ANPMatrix*);
631ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the current clip bounds in local coordinates, expanding it to
6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        account for antialiasing edge effects if aa is true. If the
6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getLocalClipBounds)(ANPCanvas*, ANPRectF* bounds, bool aa);
636ce300b91859a4830a00c388a600cddef96ed48e1Derek Sollenberger    /** Return the current clip bounds in device coordinates in bounds. If the
6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getDeviceClipBounds)(ANPCanvas*, ANPRectI* bounds);
6404603aa50552a853aa7aedcd809460a83586daa53Mike Reed
6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawColor)(ANPCanvas*, ANPColor);
6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPaint)(ANPCanvas*, const ANPPaint*);
6434603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void        (*drawLine)(ANPCanvas*, float x0, float y0, float x1, float y1,
6444603aa50552a853aa7aedcd809460a83586daa53Mike Reed                            const ANPPaint*);
6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawRect)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawOval)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPath)(ANPCanvas*, const ANPPath*, const ANPPaint*);
6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawText)(ANPCanvas*, const void* text, uint32_t byteLength,
6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            float x, float y, const ANPPaint*);
6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void       (*drawPosText)(ANPCanvas*, const void* text, uint32_t byteLength,
6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                               const float xy[], const ANPPaint*);
6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmap)(ANPCanvas*, const ANPBitmap*, float x, float y,
6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                              const ANPPaint*);
6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmapRect)(ANPCanvas*, const ANPBitmap*,
6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPRectI* src, const ANPRectF* dst,
6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPPaint*);
6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPWindowInterfaceV0 : ANPInterface {
660e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    /** Registers a set of rectangles that the plugin would like to keep on
661e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        screen. The rectangles are listed in order of priority with the highest
662e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        priority rectangle in location rects[0].  The browser will attempt to keep
663e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        as many of the rectangles on screen as possible and will scroll them into
664e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        view in response to the invocation of this method and other various events.
665e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        The count specifies how many rectangles are in the array. If the count is
666e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        zero it signals the browser that any existing rectangles should be cleared
667e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        and no rectangles will be tracked.
668e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger     */
669e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    void (*setVisibleRects)(NPP instance, const ANPRectI rects[], int32_t count);
670e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    /** Clears any rectangles that are being tracked as a result of a call to
671e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger        setVisibleRects. This call is equivalent to setVisibleRect(inst, NULL, 0).
672e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger     */
673e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger    void    (*clearVisibleRects)(NPP instance);
6745c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger    /** Given a boolean value of true the device will be requested to provide
6755c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger        a keyboard. A value of false will result in a request to hide the
6765c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger        keyboard. Further, the on-screen keyboard will not be displayed if a
6775c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger        physical keyboard is active.
6785c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger     */
6795c6846a9fb474dce40db8859579e0d6a3f802787Derek Sollenberger    void    (*showKeyboard)(NPP instance, bool value);
680e23a6d30242a5dbcdce40e708e0f97b21d06c2afDerek Sollenberger    /** Called when a plugin wishes to enter into full screen mode. The plugin's
6811a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger        Java class (defined in the plugin's apk manifest) will be called
6821a15528b92bc6af8faeaad983c380fcca4d1de44Derek Sollenberger        asynchronously to provide a View object to be displayed full screen.
683e23a6d30242a5dbcdce40e708e0f97b21d06c2afDerek Sollenberger     */
684e23a6d30242a5dbcdce40e708e0f97b21d06c2afDerek Sollenberger    void    (*requestFullScreen)(NPP instance);
685dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger    /** Called when a plugin wishes to exit from full screen mode. As a result,
686dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger        the plugin's full screen view will be discarded by the view system.
687dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger     */
688dcab27c390251a3b534b8eeb1fa5b8301686b1abDerek Sollenberger    void    (*exitFullScreen)(NPP instance);
6892952bfa29c6990f198b901a6f1d230c52c5d6bd6Grace Kloba    /** Called when a plugin wishes to be zoomed and centered in the current view.
6902952bfa29c6990f198b901a6f1d230c52c5d6bd6Grace Kloba     */
6911c7e1d1ea3bcd169a6323fe04dc9fdf8e78e035fBart Sears    void    (*requestCenterFitZoom)(NPP instance);
6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6941f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenbergerstruct ANPWindowInterfaceV1 : ANPWindowInterfaceV0 {
6951f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger    /** Returns a rectangle representing the visible area of the plugin on
6961f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger        screen. The coordinates are relative to the size of the plugin in the
6971f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger        document and therefore will never be negative or exceed the plugin's size.
6981f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger     */
6991f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger    ANPRectI (*visibleRect)(NPP instance);
7001f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger};
7011f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger
702efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenbergerenum ANPScreenOrientations {
703efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    /** No preference specified: let the system decide the best orientation.
704efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger     */
705efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    kDefault_ANPScreenOrientation        = 0,
706efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    /** Would like to have the screen in a landscape orientation, but it will
707efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger        not allow for 180 degree rotations.
708efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger     */
709efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    kFixedLandscape_ANPScreenOrientation = 1,
710efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    /** Would like to have the screen in a portrait orientation, but it will
711efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger        not allow for 180 degree rotations.
712efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger     */
713efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    kFixedPortrait_ANPScreenOrientation  = 2,
714efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    /** Would like to have the screen in landscape orientation, but can use the
715efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger        sensor to change which direction the screen is facing.
716efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger     */
717efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    kLandscape_ANPScreenOrientation      = 3,
718efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    /** Would like to have the screen in portrait orientation, but can use the
719efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger        sensor to change which direction the screen is facing.
720efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger     */
721efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    kPortrait_ANPScreenOrientation       = 4
722efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger};
723efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenbergertypedef int32_t ANPScreenOrientation;
724efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger
725efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenbergerstruct ANPWindowInterfaceV2 : ANPWindowInterfaceV1 {
726efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    /** Called when the plugin wants to specify a particular screen orientation
727efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger        when entering into full screen mode. The orientation must be set prior
728efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger        to entering into full screen.  After entering full screen any subsequent
729efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger        changes will be updated the next time the plugin goes full screen.
730efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger     */
731efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger    void (*requestFullScreenOrientation)(NPP instance, ANPScreenOrientation orientation);
732efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger};
733efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger
7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPSampleFormats {
7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnknown_ANPSamleFormat     = 0,
7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM16Bit_ANPSampleFormat   = 1,
7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM8Bit_ANPSampleFormat    = 2
7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPSampleFormat;
7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** The audio buffer is passed to the callback proc to request more samples.
7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    It is owned by the system, and the callback may read it, but should not
7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    maintain a pointer to it outside of the scope of the callback proc.
7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioBuffer {
7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t     channelCount;
7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPSampleFormat  format;
7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This buffer is owned by the caller. Inside the callback proc, up to
7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "size" bytes of sample data should be written into this buffer. The
7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        address is only valid for the scope of a single invocation of the
7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        callback proc.
7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void*       bufferData;
7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** On input, specifies the maximum number of bytes that can be written
7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        to "bufferData". On output, specifies the actual number of bytes that
7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the callback proc wrote into "bufferData".
7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    size;
7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPAudioEvents {
7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc when the audio-track needs
7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        more sample data written to the provided buffer parameter.
7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMoreData_ANPAudioEvent = 0,
7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc if the audio system runs out
7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of sample data. In this event, no buffer parameter will be specified
7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (i.e. NULL will be passed to the 3rd parameter).
7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderRun_ANPAudioEvent = 1
7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPAudioEvent;
7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Called to feed sample data to the track. This will be called in a separate
7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    thread. However, you may call trackStop() from the callback (but you
7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    cannot delete the track).
781a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    For example, when you have written the last chunk of sample data, you can
7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    immediately call trackStop(). This will take effect after the current
7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    buffer has been played.
785a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
7868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The "user" parameter is the same value that was passed to newTrack()
7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (*ANPAudioCallbackProc)(ANPAudioEvent event, void* user,
7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                     ANPAudioBuffer* buffer);
7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrack;   // abstract type for audio tracks
7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrackInterfaceV0 : ANPInterface {
794eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** Create a new audio track, or NULL on failure. The track is initially in
795eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        the stopped state and therefore ANPAudioCallbackProc will not be called
796eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        until the track is started.
7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPAudioTrack*  (*newTrack)(uint32_t sampleRate,    // sampling rate in Hz
7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPSampleFormat,
8008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                int channelCount,       // MONO=1, STEREO=2
8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPAudioCallbackProc,
8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                void* user);
803eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** Deletes a track that was created using newTrack.  The track can be
804eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        deleted in any state and it waits for the ANPAudioCallbackProc thread
805eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        to exit before returning.
806eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*deleteTrack)(ANPAudioTrack*);
8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*start)(ANPAudioTrack*);
8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*pause)(ANPAudioTrack*);
8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*stop)(ANPAudioTrack*);
8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Returns true if the track is not playing (e.g. pause or stop was called,
8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        or start was never called.
8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool (*isStopped)(ANPAudioTrack*);
8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
81849bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenbergerstruct ANPAudioTrackInterfaceV1 : ANPAudioTrackInterfaceV0 {
81949bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger    /** Returns the track's latency in milliseconds. */
82049bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger    uint32_t (*trackLatency)(ANPAudioTrack*);
82149bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger};
82249bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger
8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
8245536af7a20bdd4beeb2211f19f6ff535fdc4be41Derek Sollenberger// DEFINITION OF VALUES PASSED THROUGH NPP_HandleEvent
8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPEventTypes {
8273d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kNull_ANPEventType          = 0,
8283d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kKey_ANPEventType           = 1,
829eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** Mouse events are triggered by either clicking with the navigational pad
830eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        or by tapping the touchscreen (if the kDown_ANPTouchAction is handled by
831eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        the plugin then no mouse event is generated).  The kKey_ANPEventFlag has
832eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        to be set to true in order to receive these events.
833eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
834d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kMouse_ANPEventType         = 2,
835eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** Touch events are generated when the user touches on the screen. The
836eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        kTouch_ANPEventFlag has to be set to true in order to receive these
837eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        events.
838eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
839d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kTouch_ANPEventType         = 3,
840eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** Only triggered by a plugin using the kBitmap_ANPDrawingModel. This event
841eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        signals that the plugin needs to redraw itself into the provided bitmap.
842eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
843d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kDraw_ANPEventType          = 4,
844d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kLifecycle_ANPEventType     = 5,
84556074874733a95498646a3fc575ef62fd9218f58Mike Reed
84656074874733a95498646a3fc575ef62fd9218f58Mike Reed    /** This event type is completely defined by the plugin.
84756074874733a95498646a3fc575ef62fd9218f58Mike Reed        When creating an event, the caller must always set the first
84856074874733a95498646a3fc575ef62fd9218f58Mike Reed        two fields, the remaining data is optional.
84956074874733a95498646a3fc575ef62fd9218f58Mike Reed            ANPEvent evt;
85056074874733a95498646a3fc575ef62fd9218f58Mike Reed            evt.inSize = sizeof(ANPEvent);
85156074874733a95498646a3fc575ef62fd9218f58Mike Reed            evt.eventType = kCustom_ANPEventType
85256074874733a95498646a3fc575ef62fd9218f58Mike Reed            // other data slots are optional
85356074874733a95498646a3fc575ef62fd9218f58Mike Reed            evt.other[] = ...;
85456074874733a95498646a3fc575ef62fd9218f58Mike Reed        To post a copy of the event, call
85556074874733a95498646a3fc575ef62fd9218f58Mike Reed            eventInterface->postEvent(myNPPInstance, &evt);
85656074874733a95498646a3fc575ef62fd9218f58Mike Reed        That call makes a copy of the event struct, and post that on the event
85756074874733a95498646a3fc575ef62fd9218f58Mike Reed        queue for the plugin.
85856074874733a95498646a3fc575ef62fd9218f58Mike Reed     */
859aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    kCustom_ANPEventType        = 6,
860aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    /** MultiTouch events are generated when the user touches on the screen. The
861aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger        kTouch_ANPEventFlag has to be set to true in order to receive these
862aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger        events. This type is a replacement for the older kTouch_ANPEventType.
863aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger     */
864aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    kMultiTouch_ANPEventType    = 7,
8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPEventType;
8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyActions {
8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDown_ANPKeyAction  = 0,
8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUp_ANPKeyAction    = 1,
8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyAction;
8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ANPKeyCodes.h"
8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyCode;
8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyModifiers {
8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAlt_ANPKeyModifier     = 1 << 0,
8798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kShift_ANPKeyModifier   = 1 << 1,
8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// bit-field containing some number of ANPKeyModifier bits
8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPKeyModifier;
8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
884d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergerenum ANPMouseActions {
885d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kDown_ANPMouseAction  = 0,
886d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kUp_ANPMouseAction    = 1,
887d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger};
888d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergertypedef int32_t ANPMouseAction;
889d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger
8908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTouchActions {
891eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** This occurs when the user first touches on the screen. As such, this
892eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        action will always occur prior to any of the other touch actions. If
893eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        the plugin chooses to not handle this action then no other events
894eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        related to that particular touch gesture will be generated.
895eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
8963d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba    kDown_ANPTouchAction        = 0,
8973d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba    kUp_ANPTouchAction          = 1,
8983d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba    kMove_ANPTouchAction        = 2,
8993d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba    kCancel_ANPTouchAction      = 3,
9003d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba    // The web view will ignore the return value from the following actions
9013d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba    kLongPress_ANPTouchAction   = 4,
9023d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba    kDoubleTap_ANPTouchAction   = 5,
9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTouchAction;
9058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
906a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergerenum ANPLifecycleActions {
907eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** The web view containing this plugin has been paused.  See documentation
908eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        on the android activity lifecycle for more information.
909eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
910cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger    kPause_ANPLifecycleAction           = 0,
911eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** The web view containing this plugin has been resumed. See documentation
912eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        on the android activity lifecycle for more information.
913eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
914838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kResume_ANPLifecycleAction          = 1,
915eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** The plugin has focus and is now the recipient of input events (e.g. key,
916eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        touch, etc.)
917eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
918838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kGainFocus_ANPLifecycleAction       = 2,
919eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** The plugin has lost focus and will not receive any input events until it
920eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        regains focus. This event is always preceded by a GainFocus action.
921eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
922838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kLoseFocus_ANPLifecycleAction       = 3,
923eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger    /** The browser is running low on available memory and is requesting that
924eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        the plugin free any unused/inactive resources to prevent a performance
925eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger        degradation.
926eb4c3b4c18be49e65ed131514eb1343ff9699d89Derek Sollenberger     */
927838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kFreeMemory_ANPLifecycleAction      = 4,
928243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger    /** The page has finished loading. This happens when the page's top level
929243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger        frame reports that it has completed loading.
930243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger     */
931838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kOnLoad_ANPLifecycleAction          = 5,
932838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    /** The browser is honoring the plugin's request to go full screen. Upon
933838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger        returning from this event the browser will resize the plugin's java
934838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger        surface to full-screen coordinates.
935838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger     */
936838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kEnterFullScreen_ANPLifecycleAction = 6,
937838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    /** The browser has exited from full screen mode. Immediately prior to
938838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger        sending this event the browser has resized the plugin's java surface to
939838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger        its original coordinates.
940838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger     */
941838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger    kExitFullScreen_ANPLifecycleAction  = 7,
942cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger    /** The plugin is visible to the user on the screen. This event will always
943cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger        occur after a kOffScreen_ANPLifecycleAction event.
944cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger     */
945cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger    kOnScreen_ANPLifecycleAction        = 8,
946cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger    /** The plugin is no longer visible to the user on the screen. This event
947cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger        will always occur prior to an kOnScreen_ANPLifecycleAction event.
948cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger     */
949cc0cc8081a5d609c938ee8c7165617edc0cb3159Derek Sollenberger    kOffScreen_ANPLifecycleAction       = 9,
950a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger};
951a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergertypedef uint32_t ANPLifecycleAction;
952a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
953aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenbergerstruct TouchPoint {
954aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    int32_t         id;
955aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    float           x;  // relative to your "window" (0...width)
956aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    float           y;  // relative to your "window" (0...height)
957aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    float           pressure;
958aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger    float           size; // normalized to a value between 0...1
959aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger};
960aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger
9618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This is what is passed to NPP_HandleEvent() */
9628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPEvent {
9638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t        inSize;  // size of this struct in bytes
9648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPEventType    eventType;
9658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // use based on the value in eventType
9668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    union {
9678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
9688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyAction    action;
9698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyCode      nativeCode;
9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         virtualCode;    // windows virtual key code
9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         repeatCount;    // 0 for initial down (or up)
9738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         unichar;        // 0 if there is no value
9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } key;
9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
976d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            ANPMouseAction  action;
977d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            int32_t         x;  // relative to your "window" (0...width)
978d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            int32_t         y;  // relative to your "window" (0...height)
979d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger        } mouse;
980d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger        struct {
9818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPTouchAction  action;
9828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
9838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         x;  // relative to your "window" (0...width)
9848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         y;  // relative to your "window" (0...height)
9858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } touch;
986a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger        struct {
987a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger            ANPLifecycleAction  action;
988a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger        } lifecycle;
989535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger        struct {
990535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            ANPDrawingModel model;
991535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            // relative to (0,0) in top-left of your plugin
992535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            ANPRectI        clip;
993535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            // use based on the value in model
994535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            union {
995535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger                ANPBitmap   bitmap;
9966ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger                struct {
9976ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger                    int32_t width;
9986ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger                    int32_t height;
9996ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger                } surface;
1000535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            } data;
1001535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger        } draw;
1002aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger        struct {
1003aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger            int64_t         timestamp;
1004aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger            int32_t         id;
1005aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger            ANPTouchAction  action;
1006aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger            int32_t         pointerCount;
1007aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger            TouchPoint*     touchPoint;
1008aa0d607ff65222cceb1fae8cf8adee13f7344a6bDerek Sollenberger        } multiTouch;
1009243869ecee2d4b5ab0f796fcc6692ece5b03c15eDerek Sollenberger        int32_t     other[8];
10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } data;
10118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
10128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
101356074874733a95498646a3fc575ef62fd9218f58Mike Reedstruct ANPEventInterfaceV0 : ANPInterface {
101456074874733a95498646a3fc575ef62fd9218f58Mike Reed    /** Post a copy of the specified event to the plugin. The event will be
101556074874733a95498646a3fc575ef62fd9218f58Mike Reed        delivered to the plugin in its main thread (the thread that receives
101656074874733a95498646a3fc575ef62fd9218f58Mike Reed        other ANPEvents). If, after posting before delivery, the NPP instance
101756074874733a95498646a3fc575ef62fd9218f58Mike Reed        is torn down, the event will be discarded.
101856074874733a95498646a3fc575ef62fd9218f58Mike Reed     */
101956074874733a95498646a3fc575ef62fd9218f58Mike Reed    void (*postEvent)(NPP inst, const ANPEvent* event);
102056074874733a95498646a3fc575ef62fd9218f58Mike Reed};
102156074874733a95498646a3fc575ef62fd9218f58Mike Reed
102256074874733a95498646a3fc575ef62fd9218f58Mike Reed
10238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1024