android_npapi.h revision 2ca6453fc4f0b0ba77f29630f3036d1765db9702
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2008, The Android Open Source Project
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  Defines the android-specific types and functions as part of npapi
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
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.
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    To minimize what native libraries the plugin links against, some
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    functionality is provided via function-ptrs (e.g. time, sound)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef android_npapi_H
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define android_npapi_H
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdint.h>
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npapi.h"
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// General types
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPBitmapFormats {
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnknown_ANPBitmapFormat    = 0,
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRGBA_8888_ANPBitmapFormat  = 1,
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRGB_565_ANPBitmapFormat    = 2
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPBitmapFormat;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPBitmap {
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void*           baseAddr;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPBitmapFormat format;
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         width;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         height;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         rowBytes;
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectF {
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   left;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   top;
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   right;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   bottom;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectI {
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t left;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t top;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t right;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t bottom;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvas;
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrix;
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaint;
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPath;
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRegion;
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypeface;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPMatrixFlags {
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kIdentity_ANPMatrixFlag     = 0,
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kTranslate_ANPMatrixFlag    = 0x01,
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kScale_ANPMatrixFlag        = 0x02,
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAffine_ANPMatrixFlag       = 0x04,
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPerspective_ANPMatrixFlag  = 0x08,
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPMatrixFlag;
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NPN_GetValue
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  queries for a specific ANPInterface.
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Maybe called with NULL for the NPP instance
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue(inst, interface_enum, ANPInterface*)
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kLogInterfaceV0_ANPGetValue         ((NPNVariable)1000)
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kAudioTrackInterfaceV0_ANPGetValue  ((NPNVariable)1001)
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kCanvasInterfaceV0_ANPGetValue      ((NPNVariable)1002)
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kMatrixInterfaceV0_ANPGetValue      ((NPNVariable)1003)
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kPaintInterfaceV0_ANPGetValue       ((NPNVariable)1004)
1042ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kPathInterfaceV0_ANPGetValue        ((NPNVariable)1005)
1052ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kTypefaceInterfaceV0_ANPGetValue    ((NPNVariable)1006)
1062ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kWindowInterfaceV0_ANPGetValue      ((NPNVariable)1007)
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  queries for which drawing model is desired (for the draw event)
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Should be called inside NPP_New(...)
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue(inst, ANPSupportedDrawingModel_EnumValue, uint32_t* bits)
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kSupportedDrawingModel_ANPGetValue  ((NPNVariable)2000)
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NPN_GetValue
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Reqeust to set the drawing model.
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_SetValue(inst, ANPRequestDrawingModel_EnumValue, (void*)foo_DrawingModel)
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kRequestDrawingModel_ANPSetValue    ((NPPVariable)1000)
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  These are used as bitfields in ANPSupportedDrawingModels_EnumValue,
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    and as-is in ANPRequestDrawingModel_EnumValue. The drawing model determines
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    how to interpret the ANPDrawingContext provided in the Draw event and how
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    to interpret the NPWindow->window field.
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPDrawingModels {
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Draw into a bitmap from the browser thread in response to a Draw event.
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        NPWindow->window is reserved (ignore)
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBitmap_ANPDrawingModel = 0,
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPDrawingModel;
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  Interfaces provide additional functionality to the plugin via function ptrs.
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Once an interface is retrived, it is valid for the lifetime of the plugin
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    (just like browserfuncs).
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    All ANPInterfaces begin with an inSize field, which must be set by the
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    caller (plugin) with the number of bytes allocated for the interface.
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    e.g. SomeInterface si; si.inSize = sizeof(si); browser->getvalue(..., &si);
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPInterface {
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    inSize;     // size (in bytes) of this struct
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPLogTypes {
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kError_ANPLogType   = 0,    // error
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kWarning_ANPLogType = 1,    // warning
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDebug_ANPLogType   = 2     // debug only (informational)
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPLogType;
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPLogInterfaceV0 : ANPInterface {
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // dumps printf messages to the log file
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // e.g. interface->log(instance, kWarning_ANPLogType, "value is %d", value);
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*log)(NPP instance, ANPLogType, const char format[], ...);
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrixInterfaceV0 : ANPInterface {
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return a new identity matrix
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrix*  (*newMatrix)();
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Delete a matrix previously allocated by newMatrix()
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteMatrix)(ANPMatrix*);
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrixFlag (*getFlags)(const ANPMatrix*);
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*copy)(ANPMatrix* dst, const ANPMatrix* src);
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the matrix values in a float array (allcoated by the caller),
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        w  = x * [6] + y * [7] + [8];
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        x' = (x * [0] + y * [1] + [2]) / w;
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        y' = (x * [3] + y * [4] + [5]) / w;
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*get3x3)(const ANPMatrix*, float[9]);
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Initialize the matrix from values in a float array,
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         w  = x * [6] + y * [7] + [8];
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         x' = (x * [0] + y * [1] + [2]) / w;
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         y' = (x * [3] + y * [4] + [5]) / w;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*set3x3)(ANPMatrix*, const float[9]);
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setIdentity)(ANPMatrix*);
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preTranslate)(ANPMatrix*, float tx, float ty);
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postTranslate)(ANPMatrix*, float tx, float ty);
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preScale)(ANPMatrix*, float sx, float sy);
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postScale)(ANPMatrix*, float sx, float sy);
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preSkew)(ANPMatrix*, float kx, float ky);
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postSkew)(ANPMatrix*, float kx, float ky);
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preRotate)(ANPMatrix*, float degrees);
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postRotate)(ANPMatrix*, float degrees);
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preConcat)(ANPMatrix*, const ANPMatrix*);
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postConcat)(ANPMatrix*, const ANPMatrix*);
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return true if src is invertible, and if so, return its inverse in dst.
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If src is not invertible, return false and ignore dst.
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*invert)(ANPMatrix* dst, const ANPMatrix* src);
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Transform the x,y pairs in src[] by this matrix, and store the results
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in dst[]. The count parameter is treated as the number of pairs in the
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        array. It is legal for src and dst to point to the same memory, but
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        illegal for the two arrays to partially overlap.
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*mapPoints)(ANPMatrix*, float dst[], const float src[],
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                             int32_t count);
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2164603aa50552a853aa7aedcd809460a83586daa53Mike Reedstruct ANPPathInterfaceV0 : ANPInterface {
2174603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Return a new path */
2184603aa50552a853aa7aedcd809460a83586daa53Mike Reed    ANPPath* (*newPath)();
2194603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2204603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Delete a path previously allocated by ANPPath() */
2214603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*deletePath)(ANPPath*);
2224603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2234603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Make a deep copy of the src path, into the dst path (already allocated
2244603aa50552a853aa7aedcd809460a83586daa53Mike Reed       by the caller).
2254603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2264603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*copy)(ANPPath* dst, const ANPPath* src);
2274603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2284603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Returns true if the two paths are the same (i.e. have the same points)
2294603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2304603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*equal)(const ANPPath* path0, const ANPPath* path1);
2314603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2324603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Remove any previous points, initializing the path back to empty. */
2334603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*reset)(ANPPath*);
2344603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2354603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Return true if the path is empty (has no lines, quads or cubics). */
2364603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*isEmpty)(const ANPPath*);
2374603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2384603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Return the path's bounds in bounds. */
2394603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*getBounds)(const ANPPath*, ANPRectF* bounds);
2404603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2414603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*moveTo)(ANPPath*, float x, float y);
2424603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*lineTo)(ANPPath*, float x, float y);
2434603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*quadTo)(ANPPath*, float x0, float y0, float x1, float y1);
2444603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*cubicTo)(ANPPath*, float x0, float y0, float x1, float y1,
2454603aa50552a853aa7aedcd809460a83586daa53Mike Reed                    float x2, float y2);
2464603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*close)(ANPPath*);
2474603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2484603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /*  Offset the src path by [dx, dy]. If dst is null, apply the
2494603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
2504603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
2514603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
2524603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2534603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*offset)(ANPPath* src, float dx, float dy, ANPPath* dst);
2544603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2554603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /*  Transform the path by the matrix. If dst is null, apply the
2564603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
2574603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
2584603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
2594603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2604603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*transform)(ANPPath* src, const ANPMatrix*, ANPPath* dst);
2614603aa50552a853aa7aedcd809460a83586daa53Mike Reed};
2624603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPColor;
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ANP_MAKE_COLOR(a, r, g, b)  \
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintFlag {
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAntiAlias_ANPPaintFlag         = 1 << 0,
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFilterBitmap_ANPPaintFlag      = 1 << 1,
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDither_ANPPaintFlag            = 1 << 2,
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderlineText_ANPPaintFlag     = 1 << 3,
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStrikeThruText_ANPPaintFlag    = 1 << 4,
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFakeBoldText_ANPPaintFlag      = 1 << 5,
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPPaintFlags;
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintStyles {
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFill_ANPPaintStyle             = 0,
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStroke_ANPPaintStyle           = 1,
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFillAndStroke_ANPPaintStyle    = 2
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintStyle;
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintCaps {
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kButt_ANPPaintCap   = 0,
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintCap  = 1,
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kSquare_ANPPaintCap = 2
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintCap;
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintJoins {
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMiter_ANPPaintJoin = 0,
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintJoin = 1,
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBevel_ANPPaintJoin = 2
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintJoin;
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintAligns {
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kLeft_ANPPaintAlign     = 0,
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kCenter_ANPPaintAlign   = 1,
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRight_ANPPaintAlign    = 2
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintAlign;
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTextEncodings {
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF8_ANPTextEncoding   = 0,
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF16_ANPTextEncoding  = 1,
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTextEncoding;
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTypefaceStyles {
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBold_ANPTypefaceStyle      = 1 << 0,
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kItalic_ANPTypefaceStyle    = 1 << 1
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPTypefaceStyle;
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPFontMetrics {
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The greatest distance above the baseline for any glyph (will be <= 0)
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fTop;
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The recommended distance above the baseline (will be <= 0)
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fAscent;
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The recommended distance below the baseline (will be >= 0)
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fDescent;
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The greatest distance below the baseline for any glyph (will be >= 0)
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fBottom;
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The recommended distance to add between lines of text (will be >= 0)
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fLeading;
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypefaceInterfaceV0 : ANPInterface {
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested name and style. Pass null as the name to return
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the default font for the requested style. Will never return null
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param name     May be NULL. The name of the font family.
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param style    The style (normal, bold, italic) of the typeface.
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Caller must call
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done with the typeface.
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromName)(const char name[], ANPTypefaceStyle);
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested typeface and specified Style. Use this call if you want to
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pick a new style from the same family of the existing typeface.
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If family is NULL, this selects from the default font's family.
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param family  May be NULL. The name of the existing type face.
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param s       The style (normal, bold, italic) of the type face.
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Call must call
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done.
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromTypeface)(const ANPTypeface* family,
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                       ANPTypefaceStyle);
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the owner count of the typeface. A newly created typeface has an
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count of 1. When the owner count is reaches 0, the typeface is
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        deleted.
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t (*getRefCount)(const ANPTypeface*);
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Increment the owner count on the typeface
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*ref)(ANPTypeface*);
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Decrement the owner count on the typeface. When the count goes to 0,
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the typeface is deleted.
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*unref)(ANPTypeface*);
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the style bits for the specified typeface
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypefaceStyle (*getStyle)(const ANPTypeface*);
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaintInterfaceV0 : ANPInterface {
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return a new paint object, which holds all of the color and style
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        attributes that affect how things (geometry, text, bitmaps) are drawn
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in a ANPCanvas.
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The paint that is returned is not tied to any particular plugin
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaint*   (*newPaint)();
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deletePaint)(ANPPaint*);
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintFlags (*getFlags)(const ANPPaint*);
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setFlags)(ANPPaint*, ANPPaintFlags);
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPColor    (*getColor)(const ANPPaint*);
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setColor)(ANPPaint*, ANPColor);
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintStyle (*getStyle)(const ANPPaint*);
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStyle)(ANPPaint*, ANPPaintStyle);
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeWidth)(const ANPPaint*);
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeMiter)(const ANPPaint*);
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintCap (*getStrokeCap)(const ANPPaint*);
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintJoin (*getStrokeJoin)(const ANPPaint*);
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeWidth)(ANPPaint*, float);
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeMiter)(ANPPaint*, float);
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeCap)(ANPPaint*, ANPPaintCap);
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeJoin)(ANPPaint*, ANPPaintJoin);
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTextEncoding (*getTextEncoding)(const ANPPaint*);
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintAlign (*getTextAlign)(const ANPPaint*);
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSize)(const ANPPaint*);
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextScaleX)(const ANPPaint*);
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSkewX)(const ANPPaint*);
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextEncoding)(ANPPaint*, ANPTextEncoding);
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextAlign)(ANPPaint*, ANPPaintAlign);
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSize)(ANPPaint*, float);
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextScaleX)(ANPPaint*, float);
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSkewX)(ANPPaint*, float);
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the typeface ine paint, or null if there is none. This does not
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        modify the owner count of the returned typeface.
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*getTypeface)(const ANPPaint*);
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Set the paint's typeface. If the paint already had a non-null typeface,
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        its owner count is decremented. If the new typeface is non-null, its
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count is incremented.
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*setTypeface)(ANPPaint*, ANPTypeface*);
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the width of the text. If bounds is not null, return the bounds
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of the text in that rectangle.
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*measureText)(ANPPaint*, const void* text, uint32_t byteLength,
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         ANPRectF* bounds);
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the number of unichars specifed by the text.
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If widths is not null, returns the array of advance widths for each
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            unichar.
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If bounds is not null, returns the array of bounds for each unichar.
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int (*getTextWidths)(ANPPaint*, const void* text, uint32_t byteLength,
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         float widths[], ANPRectF bounds[]);
4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return in metrics the spacing values for text, respecting the paint's
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        typeface and pointsize, and return the spacing between lines
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (descent - ascent + leading). If metrics is NULL, it will be ignored.
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*getFontMetrics)(ANPPaint*, ANPFontMetrics* metrics);
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvasInterfaceV0 : ANPInterface {
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return a canvas that will draw into the specified bitmap. Note: the
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        canvas copies the fields of the bitmap, so it need not persist after
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this call, but the canvas DOES point to the same pixel memory that the
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bitmap did, so the canvas should not be used after that pixel memory
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        goes out of scope. In the case of creating a canvas to draw into the
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pixels provided by kDraw_ANPEventType, those pixels are only while
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        handling that event.
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The canvas that is returned is not tied to any particular plugin
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPCanvas*  (*newCanvas)(const ANPBitmap*);
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteCanvas)(ANPCanvas*);
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*save)(ANPCanvas*);
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*restore)(ANPCanvas*);
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*translate)(ANPCanvas*, float tx, float ty);
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*scale)(ANPCanvas*, float sx, float sy);
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*rotate)(ANPCanvas*, float degrees);
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*skew)(ANPCanvas*, float kx, float ky);
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*concat)(ANPCanvas*, const ANPMatrix*);
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipRect)(ANPCanvas*, const ANPRectF*);
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipPath)(ANPCanvas*, const ANPPath*);
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the current matrix on the canvas
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*getTotalMatrix)(ANPCanvas*, ANPMatrix*);
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the current clip bounds in local coordinates, expanding it to
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        account for antialiasing edge effects if aa is true. If the
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getLocalClipBounds)(ANPCanvas*, ANPRectF* bounds, bool aa);
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the current clip bounds in device coordinates in bounds. If the
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getDeviceClipBounds)(ANPCanvas*, ANPRectI* bounds);
4844603aa50552a853aa7aedcd809460a83586daa53Mike Reed
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawColor)(ANPCanvas*, ANPColor);
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPaint)(ANPCanvas*, const ANPPaint*);
4874603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void        (*drawLine)(ANPCanvas*, float x0, float y0, float x1, float y1,
4884603aa50552a853aa7aedcd809460a83586daa53Mike Reed                            const ANPPaint*);
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawRect)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawOval)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPath)(ANPCanvas*, const ANPPath*, const ANPPaint*);
4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawText)(ANPCanvas*, const void* text, uint32_t byteLength,
4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            float x, float y, const ANPPaint*);
4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void       (*drawPosText)(ANPCanvas*, const void* text, uint32_t byteLength,
4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                               const float xy[], const ANPPaint*);
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmap)(ANPCanvas*, const ANPBitmap*, float x, float y,
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                              const ANPPaint*);
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmapRect)(ANPCanvas*, const ANPBitmap*,
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPRectI* src, const ANPRectF* dst,
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPPaint*);
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPWindowInterfaceV0 : ANPInterface {
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Given the window field from the NPWindow struct, and an optional rect
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        describing the subset of the window that will be drawn to (may be null)
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true if the bitmap for that window can be accessed, and if so,
5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        fill out the specified ANPBitmap to point to the window's pixels.
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        When drawing is complete, call unlock(window)
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool    (*lockRect)(void* window, const ANPRectI* inval, ANPBitmap*);
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** The same as lockRect, but takes a region instead of a rect to specify
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the area that will be changed/drawn.
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool    (*lockRegion)(void* window, const ANPRegion* inval, ANPBitmap*);
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Given a successful call to lock(window, inval, &bitmap), call unlock
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        to release access to the pixels, and allow the browser to display the
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        results. If lock returned false, unlock should not be called.
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void    (*unlock)(void* window);
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPSampleFormats {
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnknown_ANPSamleFormat     = 0,
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM16Bit_ANPSampleFormat   = 1,
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM8Bit_ANPSampleFormat    = 2
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPSampleFormat;
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** The audio buffer is passed to the callback proc to request more samples.
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    It is owned by the system, and the callback may read it, but should not
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    maintain a pointer to it outside of the scope of the callback proc.
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioBuffer {
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t     channelCount;
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPSampleFormat  format;
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This buffer is owned by the caller. Inside the callback proc, up to
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "size" bytes of sample data should be written into this buffer. The
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        address is only valid for the scope of a single invocation of the
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        callback proc.
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void*       bufferData;
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** On input, specifies the maximum number of bytes that can be written
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        to "bufferData". On output, specifies the actual number of bytes that
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the callback proc wrote into "bufferData".
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    size;
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPAudioEvents {
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc when the audio-track needs
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        more sample data written to the provided buffer parameter.
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMoreData_ANPAudioEvent = 0,
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc if the audio system runs out
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of sample data. In this event, no buffer parameter will be specified
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (i.e. NULL will be passed to the 3rd parameter).
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderRun_ANPAudioEvent = 1
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPAudioEvent;
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Called to feed sample data to the track. This will be called in a separate
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    thread. However, you may call trackStop() from the callback (but you
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    cannot delete the track).
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    For example, when you have written the last chunk of sample data, you can
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    immediately call trackStop(). This will take effect after the current
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    buffer has been played.
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The "user" parameter is the same value that was passed to newTrack()
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (*ANPAudioCallbackProc)(ANPAudioEvent event, void* user,
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                     ANPAudioBuffer* buffer);
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrack;   // abstract type for audio tracks
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrackInterfaceV0 : ANPInterface {
5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Create a new audio track, or NULL on failure.
5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPAudioTrack*  (*newTrack)(uint32_t sampleRate,    // sampling rate in Hz
5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPSampleFormat,
5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                int channelCount,       // MONO=1, STEREO=2
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPAudioCallbackProc,
5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                void* user);
5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*deleteTrack)(ANPAudioTrack*);
5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*start)(ANPAudioTrack*);
5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*pause)(ANPAudioTrack*);
5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*stop)(ANPAudioTrack*);
5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Returns true if the track is not playing (e.g. pause or stop was called,
5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        or start was never called.
5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool (*isStopped)(ANPAudioTrack*);
5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// HandleEvent
6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPEventTypes {
6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kNull_ANPEventType  = 0,
6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kKey_ANPEventType   = 1,
6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kTouch_ANPEventType = 2,
6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDraw_ANPEventType  = 3,
6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPEventType;
6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyActions {
6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDown_ANPKeyAction  = 0,
6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUp_ANPKeyAction    = 1,
6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyAction;
6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ANPKeyCodes.h"
6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyCode;
6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyModifiers {
6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAlt_ANPKeyModifier     = 1 << 0,
6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kShift_ANPKeyModifier   = 1 << 1,
6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// bit-field containing some number of ANPKeyModifier bits
6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPKeyModifier;
6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTouchActions {
6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDown_ANPTouchAction  = 0,
6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUp_ANPTouchAction    = 1,
6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTouchAction;
6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPDrawContext {
6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPDrawingModel model;
6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // relative to (0,0) in top-left of your plugin
6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPRectI        clip;
6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // use based on the value in model
6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    union {
6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ANPBitmap   bitmap;
6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } data;
6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This is what is passed to NPP_HandleEvent() */
6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPEvent {
6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t        inSize;  // size of this struct in bytes
6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPEventType    eventType;
6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // use based on the value in eventType
6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    union {
6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyAction    action;
6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyCode      nativeCode;
6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         virtualCode;    // windows virtual key code
6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         repeatCount;    // 0 for initial down (or up)
6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         unichar;        // 0 if there is no value
6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } key;
6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPTouchAction  action;
6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         x;  // relative to your "window" (0...width)
6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         y;  // relative to your "window" (0...height)
6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } touch;
6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ANPDrawContext  drawContext;
6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int32_t         other[8];
6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } data;
6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
671