android_npapi.h revision d3fd788536f3fe65035a8fbba4ede47701716c43
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2008, The Android Open Source Project
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  Defines the android-specific types and functions as part of npapi
27a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    In particular, defines the window and event types that are passed to
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue, NPP_SetWindow and NPP_HandleEvent.
30a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    To minimize what native libraries the plugin links against, some
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    functionality is provided via function-ptrs (e.g. time, sound)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef android_npapi_H
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define android_npapi_H
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdint.h>
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npapi.h"
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// General types
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPBitmapFormats {
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnknown_ANPBitmapFormat    = 0,
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRGBA_8888_ANPBitmapFormat  = 1,
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRGB_565_ANPBitmapFormat    = 2
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPBitmapFormat;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
52a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPPixelPacking {
53a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t AShift;
54a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t ABits;
55a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t RShift;
56a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t RBits;
57a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t GShift;
58a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t GBits;
59a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t BShift;
60a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    uint8_t BBits;
61a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed};
62a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPBitmap {
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void*           baseAddr;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPBitmapFormat format;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         width;
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         height;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t         rowBytes;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectF {
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   left;
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   top;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   right;
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   bottom;
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRectI {
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t left;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t top;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t right;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t bottom;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvas;
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrix;
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaint;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPath;
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPRegion;
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypeface;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPMatrixFlags {
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kIdentity_ANPMatrixFlag     = 0,
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kTranslate_ANPMatrixFlag    = 0x01,
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kScale_ANPMatrixFlag        = 0x02,
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAffine_ANPMatrixFlag       = 0x04,
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPerspective_ANPMatrixFlag  = 0x08,
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPMatrixFlag;
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NPN_GetValue
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  queries for a specific ANPInterface.
105a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Maybe called with NULL for the NPP instance
107a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue(inst, interface_enum, ANPInterface*)
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kLogInterfaceV0_ANPGetValue         ((NPNVariable)1000)
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kAudioTrackInterfaceV0_ANPGetValue  ((NPNVariable)1001)
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kCanvasInterfaceV0_ANPGetValue      ((NPNVariable)1002)
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kMatrixInterfaceV0_ANPGetValue      ((NPNVariable)1003)
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kPaintInterfaceV0_ANPGetValue       ((NPNVariable)1004)
1152ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kPathInterfaceV0_ANPGetValue        ((NPNVariable)1005)
1162ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kTypefaceInterfaceV0_ANPGetValue    ((NPNVariable)1006)
1172ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed#define kWindowInterfaceV0_ANPGetValue      ((NPNVariable)1007)
118a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define kBitmapInterfaceV0_ANPGetValue      ((NPNVariable)1008)
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  queries for which drawing model is desired (for the draw event)
121a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Should be called inside NPP_New(...)
123a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_GetValue(inst, ANPSupportedDrawingModel_EnumValue, uint32_t* bits)
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kSupportedDrawingModel_ANPGetValue  ((NPNVariable)2000)
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
12956ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger// NPN_SetValue
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger/** Request to set the drawing model.
132a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPN_SetValue(inst, ANPRequestDrawingModel_EnumValue, (void*)foo_DrawingModel)
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define kRequestDrawingModel_ANPSetValue    ((NPPVariable)1000)
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  These are used as bitfields in ANPSupportedDrawingModels_EnumValue,
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    and as-is in ANPRequestDrawingModel_EnumValue. The drawing model determines
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    how to interpret the ANPDrawingContext provided in the Draw event and how
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    to interpret the NPWindow->window field.
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPDrawingModels {
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Draw into a bitmap from the browser thread in response to a Draw event.
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        NPWindow->window is reserved (ignore)
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBitmap_ANPDrawingModel = 0,
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPDrawingModel;
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger/** Request to receive/disable events. If the pointer is NULL then all input will
15156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    be disabled. Otherwise, the input type will be enabled iff its corresponding
15256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    bit in the EventFlags bit field is set.
15356ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
15456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    NPN_SetValue(inst, ANPAcceptEvents, (void*)EventFlags)
15556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */
15656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger#define kAcceptEvents_ANPSetValue           ((NPPVariable)1001)
15756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
15856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger/*  The EventFlags are a set of bits used to determine which types of input the
15956ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    plugin wishes to receive. For example, if the value is 0x03 then both key
16056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    and touch events will be provided to the plugin.
16156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger */
16256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergerenum ANPEventFlag {
1633d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kKey_ANPEventFlag           = 0x01,
1643d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kTouch_ANPEventFlag         = 0x02,
1653d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kVisibleRect_ANPEventFlag   = 0x04,
16656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger};
16756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergertypedef uint32_t ANPEventFlags;
16856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*  Interfaces provide additional functionality to the plugin via function ptrs.
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Once an interface is retrived, it is valid for the lifetime of the plugin
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    (just like browserfuncs).
172a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    All ANPInterfaces begin with an inSize field, which must be set by the
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    caller (plugin) with the number of bytes allocated for the interface.
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    e.g. SomeInterface si; si.inSize = sizeof(si); browser->getvalue(..., &si);
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPInterface {
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    inSize;     // size (in bytes) of this struct
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPLogTypes {
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kError_ANPLogType   = 0,    // error
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kWarning_ANPLogType = 1,    // warning
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDebug_ANPLogType   = 2     // debug only (informational)
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPLogType;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPLogInterfaceV0 : ANPInterface {
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // dumps printf messages to the log file
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // e.g. interface->log(instance, kWarning_ANPLogType, "value is %d", value);
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*log)(NPP instance, ANPLogType, const char format[], ...);
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
194a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedstruct ANPBitmapInterfaceV0 : ANPInterface {
195a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    /** Returns true if the specified bitmap format is supported, and if packing
196a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed        is non-null, sets it to the packing info for that format.
197a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed     */
198a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    bool (*getPixelPacking)(ANPBitmapFormat, ANPPixelPacking* packing);
199a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed};
200a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPMatrixInterfaceV0 : ANPInterface {
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return a new identity matrix
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrix*  (*newMatrix)();
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Delete a matrix previously allocated by newMatrix()
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteMatrix)(ANPMatrix*);
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPMatrixFlag (*getFlags)(const ANPMatrix*);
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*copy)(ANPMatrix* dst, const ANPMatrix* src);
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the matrix values in a float array (allcoated by the caller),
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        w  = x * [6] + y * [7] + [8];
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        x' = (x * [0] + y * [1] + [2]) / w;
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        y' = (x * [3] + y * [4] + [5]) / w;
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*get3x3)(const ANPMatrix*, float[9]);
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Initialize the matrix from values in a float array,
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        where the values are treated as follows:
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         w  = x * [6] + y * [7] + [8];
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         x' = (x * [0] + y * [1] + [2]) / w;
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         y' = (x * [3] + y * [4] + [5]) / w;
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*set3x3)(ANPMatrix*, const float[9]);
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setIdentity)(ANPMatrix*);
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preTranslate)(ANPMatrix*, float tx, float ty);
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postTranslate)(ANPMatrix*, float tx, float ty);
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preScale)(ANPMatrix*, float sx, float sy);
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postScale)(ANPMatrix*, float sx, float sy);
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preSkew)(ANPMatrix*, float kx, float ky);
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postSkew)(ANPMatrix*, float kx, float ky);
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preRotate)(ANPMatrix*, float degrees);
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postRotate)(ANPMatrix*, float degrees);
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*preConcat)(ANPMatrix*, const ANPMatrix*);
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*postConcat)(ANPMatrix*, const ANPMatrix*);
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return true if src is invertible, and if so, return its inverse in dst.
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If src is not invertible, return false and ignore dst.
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*invert)(ANPMatrix* dst, const ANPMatrix* src);
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Transform the x,y pairs in src[] by this matrix, and store the results
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in dst[]. The count parameter is treated as the number of pairs in the
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        array. It is legal for src and dst to point to the same memory, but
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        illegal for the two arrays to partially overlap.
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*mapPoints)(ANPMatrix*, float dst[], const float src[],
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                             int32_t count);
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2544603aa50552a853aa7aedcd809460a83586daa53Mike Reedstruct ANPPathInterfaceV0 : ANPInterface {
2554603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Return a new path */
2564603aa50552a853aa7aedcd809460a83586daa53Mike Reed    ANPPath* (*newPath)();
2574603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2584603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Delete a path previously allocated by ANPPath() */
2594603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*deletePath)(ANPPath*);
2604603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2614603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Make a deep copy of the src path, into the dst path (already allocated
2624603aa50552a853aa7aedcd809460a83586daa53Mike Reed       by the caller).
2634603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2644603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*copy)(ANPPath* dst, const ANPPath* src);
2654603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2664603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Returns true if the two paths are the same (i.e. have the same points)
2674603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2684603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*equal)(const ANPPath* path0, const ANPPath* path1);
2694603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2704603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Remove any previous points, initializing the path back to empty. */
2714603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*reset)(ANPPath*);
2724603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2734603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Return true if the path is empty (has no lines, quads or cubics). */
2744603aa50552a853aa7aedcd809460a83586daa53Mike Reed    bool (*isEmpty)(const ANPPath*);
2754603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2764603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /* Return the path's bounds in bounds. */
2774603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*getBounds)(const ANPPath*, ANPRectF* bounds);
2784603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2794603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*moveTo)(ANPPath*, float x, float y);
2804603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*lineTo)(ANPPath*, float x, float y);
2814603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*quadTo)(ANPPath*, float x0, float y0, float x1, float y1);
2824603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*cubicTo)(ANPPath*, float x0, float y0, float x1, float y1,
2834603aa50552a853aa7aedcd809460a83586daa53Mike Reed                    float x2, float y2);
2844603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*close)(ANPPath*);
2854603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2864603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /*  Offset the src path by [dx, dy]. If dst is null, apply the
2874603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
2884603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
2894603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
2904603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2914603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*offset)(ANPPath* src, float dx, float dy, ANPPath* dst);
2924603aa50552a853aa7aedcd809460a83586daa53Mike Reed
2934603aa50552a853aa7aedcd809460a83586daa53Mike Reed    /*  Transform the path by the matrix. If dst is null, apply the
2944603aa50552a853aa7aedcd809460a83586daa53Mike Reed        change directly to the src path. If dst is not null, write the
2954603aa50552a853aa7aedcd809460a83586daa53Mike Reed        changed path into dst, and leave the src path unchanged. In that case
2964603aa50552a853aa7aedcd809460a83586daa53Mike Reed        dst must have been previously allocated by the caller.
2974603aa50552a853aa7aedcd809460a83586daa53Mike Reed     */
2984603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void (*transform)(ANPPath* src, const ANPMatrix*, ANPPath* dst);
2994603aa50552a853aa7aedcd809460a83586daa53Mike Reed};
3004603aa50552a853aa7aedcd809460a83586daa53Mike Reed
301a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed/** ANPColor is always defined to have the same packing on all platforms, and
302a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    it is always unpremultiplied.
3030fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger
304a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    This is in contrast to 32bit format(s) in bitmaps, which are premultiplied,
305a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    and their packing may vary depending on the platform, hence the need for
306a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed    ANPBitmapInterface::getPixelPacking()
307a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed */
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPColor;
309a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_ASHIFT     24
310a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_RSHIFT     16
311a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_GSHIFT     8
312a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed#define ANPColor_BSHIFT     0
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ANP_MAKE_COLOR(a, r, g, b)  \
314a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                   (((a) << ANPColor_ASHIFT) |  \
315a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((r) << ANPColor_RSHIFT) |  \
316a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((g) << ANPColor_GSHIFT) |  \
317a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed                    ((b) << ANPColor_BSHIFT))
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintFlag {
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAntiAlias_ANPPaintFlag         = 1 << 0,
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFilterBitmap_ANPPaintFlag      = 1 << 1,
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDither_ANPPaintFlag            = 1 << 2,
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderlineText_ANPPaintFlag     = 1 << 3,
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStrikeThruText_ANPPaintFlag    = 1 << 4,
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFakeBoldText_ANPPaintFlag      = 1 << 5,
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPPaintFlags;
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintStyles {
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFill_ANPPaintStyle             = 0,
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kStroke_ANPPaintStyle           = 1,
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kFillAndStroke_ANPPaintStyle    = 2
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintStyle;
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintCaps {
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kButt_ANPPaintCap   = 0,
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintCap  = 1,
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kSquare_ANPPaintCap = 2
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintCap;
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintJoins {
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMiter_ANPPaintJoin = 0,
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRound_ANPPaintJoin = 1,
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBevel_ANPPaintJoin = 2
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintJoin;
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPPaintAligns {
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kLeft_ANPPaintAlign     = 0,
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kCenter_ANPPaintAlign   = 1,
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kRight_ANPPaintAlign    = 2
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPPaintAlign;
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTextEncodings {
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF8_ANPTextEncoding   = 0,
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUTF16_ANPTextEncoding  = 1,
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTextEncoding;
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTypefaceStyles {
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kBold_ANPTypefaceStyle      = 1 << 0,
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kItalic_ANPTypefaceStyle    = 1 << 1
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPTypefaceStyle;
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
369b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reedtypedef uint32_t ANPFontTableTag;
370b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPFontMetrics {
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The greatest distance above the baseline for any glyph (will be <= 0)
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fTop;
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The recommended distance above the baseline (will be <= 0)
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fAscent;
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The recommended distance below the baseline (will be >= 0)
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fDescent;
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The greatest distance below the baseline for any glyph (will be >= 0)
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fBottom;
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //! The recommended distance to add between lines of text (will be >= 0)
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float   fLeading;
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPTypefaceInterfaceV0 : ANPInterface {
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested name and style. Pass null as the name to return
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the default font for the requested style. Will never return null
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param name     May be NULL. The name of the font family.
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param style    The style (normal, bold, italic) of the typeface.
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Caller must call
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done with the typeface.
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromName)(const char name[], ANPTypefaceStyle);
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return a new reference to the typeface that most closely matches the
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        requested typeface and specified Style. Use this call if you want to
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pick a new style from the same family of the existing typeface.
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If family is NULL, this selects from the default font's family.
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param family  May be NULL. The name of the existing type face.
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @param s       The style (normal, bold, italic) of the type face.
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        @return reference to the closest-matching typeface. Call must call
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                unref() when they are done.
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*createFromTypeface)(const ANPTypeface* family,
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                       ANPTypefaceStyle);
408a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the owner count of the typeface. A newly created typeface has an
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count of 1. When the owner count is reaches 0, the typeface is
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        deleted.
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t (*getRefCount)(const ANPTypeface*);
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Increment the owner count on the typeface
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*ref)(ANPTypeface*);
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Decrement the owner count on the typeface. When the count goes to 0,
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the typeface is deleted.
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*unref)(ANPTypeface*);
423a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the style bits for the specified typeface
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypefaceStyle (*getStyle)(const ANPTypeface*);
427b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
428b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    /** Return the number of tables in the font
429b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed     */
430b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    uint32_t (*countTables)(const ANPTypeface*);
431b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
432b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    /** Copy into tags[] (allocated by the caller) the list of table tags in
433b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        the font, and return the number. This will be the same as CountTables()
434b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        or 0 if an error occured.
435b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed     */
436b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    uint32_t (*getTableTags)(const ANPTypeface*, ANPFontTableTag tags[]);
437b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
438b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    /** Given a table tag, return the size of its contents, or 0 if not present
439b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed     */
440b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    uint32_t (*getTableSize)(const ANPTypeface*, ANPFontTableTag);
441b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
442b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    /** Copy the contents of a table into data (allocated by the caller). Note
443b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        that the contents of the table will be in their native endian order
444b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        (which for most truetype tables is big endian). If the table tag is
445b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        not found, or there is an error copying the data, then 0 is returned.
446b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        If this happens, it is possible that some or all of the memory pointed
447b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        to by data may have been written to, even though an error has occured.
448b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed
449b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        @param fontID the font to copy the table from
450b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        @param tag  The table tag whose contents are to be copied
451b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        @param offset The offset in bytes into the table's contents where the
452b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed                copy should start from.
453b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        @param length The number of bytes, starting at offset, of table data
454b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed                to copy.
455b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        @param data storage address where the table contents are copied to
456b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed        @return the number of bytes actually copied into data. If offset+length
457b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed                exceeds the table's size, then only the bytes up to the table's
458b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed                size are actually copied, and this is the value returned. If
459b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed                offset > the table's size, or tag is not a valid table,
460b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed                then 0 is returned.
461b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed     */
462b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed    uint32_t (*getTableData)(const ANPTypeface*, ANPFontTableTag,
463b91f67b5c82b6d5f399a629b1434fc40a271737cMike Reed                             uint32_t offset, uint32_t length, void* data);
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPPaintInterfaceV0 : ANPInterface {
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return a new paint object, which holds all of the color and style
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        attributes that affect how things (geometry, text, bitmaps) are drawn
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        in a ANPCanvas.
470a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The paint that is returned is not tied to any particular plugin
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaint*   (*newPaint)();
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deletePaint)(ANPPaint*);
476a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintFlags (*getFlags)(const ANPPaint*);
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setFlags)(ANPPaint*, ANPPaintFlags);
479a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPColor    (*getColor)(const ANPPaint*);
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setColor)(ANPPaint*, ANPColor);
482a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintStyle (*getStyle)(const ANPPaint*);
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStyle)(ANPPaint*, ANPPaintStyle);
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeWidth)(const ANPPaint*);
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getStrokeMiter)(const ANPPaint*);
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintCap (*getStrokeCap)(const ANPPaint*);
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintJoin (*getStrokeJoin)(const ANPPaint*);
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeWidth)(ANPPaint*, float);
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeMiter)(ANPPaint*, float);
4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeCap)(ANPPaint*, ANPPaintCap);
4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setStrokeJoin)(ANPPaint*, ANPPaintJoin);
494a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTextEncoding (*getTextEncoding)(const ANPPaint*);
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPPaintAlign (*getTextAlign)(const ANPPaint*);
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSize)(const ANPPaint*);
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextScaleX)(const ANPPaint*);
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float       (*getTextSkewX)(const ANPPaint*);
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextEncoding)(ANPPaint*, ANPTextEncoding);
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextAlign)(ANPPaint*, ANPPaintAlign);
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSize)(ANPPaint*, float);
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextScaleX)(ANPPaint*, float);
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*setTextSkewX)(ANPPaint*, float);
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the typeface ine paint, or null if there is none. This does not
5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        modify the owner count of the returned typeface.
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPTypeface* (*getTypeface)(const ANPPaint*);
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Set the paint's typeface. If the paint already had a non-null typeface,
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        its owner count is decremented. If the new typeface is non-null, its
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        owner count is incremented.
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*setTypeface)(ANPPaint*, ANPTypeface*);
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the width of the text. If bounds is not null, return the bounds
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of the text in that rectangle.
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*measureText)(ANPPaint*, const void* text, uint32_t byteLength,
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         ANPRectF* bounds);
522a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return the number of unichars specifed by the text.
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If widths is not null, returns the array of advance widths for each
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            unichar.
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        If bounds is not null, returns the array of bounds for each unichar.
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int (*getTextWidths)(ANPPaint*, const void* text, uint32_t byteLength,
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                         float widths[], ANPRectF bounds[]);
530a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Return in metrics the spacing values for text, respecting the paint's
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        typeface and pointsize, and return the spacing between lines
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (descent - ascent + leading). If metrics is NULL, it will be ignored.
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float (*getFontMetrics)(ANPPaint*, ANPFontMetrics* metrics);
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPCanvasInterfaceV0 : ANPInterface {
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return a canvas that will draw into the specified bitmap. Note: the
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        canvas copies the fields of the bitmap, so it need not persist after
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this call, but the canvas DOES point to the same pixel memory that the
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bitmap did, so the canvas should not be used after that pixel memory
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        goes out of scope. In the case of creating a canvas to draw into the
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pixels provided by kDraw_ANPEventType, those pixels are only while
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        handling that event.
546a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        The canvas that is returned is not tied to any particular plugin
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        instance, but it must only be accessed from one thread at a time.
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPCanvas*  (*newCanvas)(const ANPBitmap*);
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*deleteCanvas)(ANPCanvas*);
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*save)(ANPCanvas*);
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*restore)(ANPCanvas*);
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*translate)(ANPCanvas*, float tx, float ty);
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*scale)(ANPCanvas*, float sx, float sy);
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*rotate)(ANPCanvas*, float degrees);
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*skew)(ANPCanvas*, float kx, float ky);
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*concat)(ANPCanvas*, const ANPMatrix*);
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipRect)(ANPCanvas*, const ANPRectF*);
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*clipPath)(ANPCanvas*, const ANPPath*);
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the current matrix on the canvas
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*getTotalMatrix)(ANPCanvas*, ANPMatrix*);
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the current clip bounds in local coordinates, expanding it to
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        account for antialiasing edge effects if aa is true. If the
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getLocalClipBounds)(ANPCanvas*, ANPRectF* bounds, bool aa);
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Return the current clip bounds in device coordinates in bounds. If the
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        current clip is empty, return false and ignore the bounds argument.
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool        (*getDeviceClipBounds)(ANPCanvas*, ANPRectI* bounds);
5754603aa50552a853aa7aedcd809460a83586daa53Mike Reed
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawColor)(ANPCanvas*, ANPColor);
5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPaint)(ANPCanvas*, const ANPPaint*);
5784603aa50552a853aa7aedcd809460a83586daa53Mike Reed    void        (*drawLine)(ANPCanvas*, float x0, float y0, float x1, float y1,
5794603aa50552a853aa7aedcd809460a83586daa53Mike Reed                            const ANPPaint*);
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawRect)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawOval)(ANPCanvas*, const ANPRectF*, const ANPPaint*);
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawPath)(ANPCanvas*, const ANPPath*, const ANPPaint*);
5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawText)(ANPCanvas*, const void* text, uint32_t byteLength,
5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            float x, float y, const ANPPaint*);
5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void       (*drawPosText)(ANPCanvas*, const void* text, uint32_t byteLength,
5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                               const float xy[], const ANPPaint*);
5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmap)(ANPCanvas*, const ANPBitmap*, float x, float y,
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                              const ANPPaint*);
5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void        (*drawBitmapRect)(ANPCanvas*, const ANPBitmap*,
5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPRectI* src, const ANPRectF* dst,
5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                  const ANPPaint*);
5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPWindowInterfaceV0 : ANPInterface {
5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Given the window field from the NPWindow struct, and an optional rect
5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        describing the subset of the window that will be drawn to (may be null)
5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true if the bitmap for that window can be accessed, and if so,
5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        fill out the specified ANPBitmap to point to the window's pixels.
599a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        When drawing is complete, call unlock(window)
6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool    (*lockRect)(void* window, const ANPRectI* inval, ANPBitmap*);
6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** The same as lockRect, but takes a region instead of a rect to specify
6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the area that will be changed/drawn.
6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool    (*lockRegion)(void* window, const ANPRegion* inval, ANPBitmap*);
6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Given a successful call to lock(window, inval, &bitmap), call unlock
6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        to release access to the pixels, and allow the browser to display the
6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        results. If lock returned false, unlock should not be called.
6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void    (*unlock)(void* window);
6123d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    /** Given (x,y) coordinates in the document space the currently visible
6133d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger        window will be shifted so that window's upper left corner will be as
6143d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger        closely aligned to the coordinates as possible.
6153d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger     */
6163d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    void    (*scrollTo)(NPP instance, int32_t x, int32_t y);
6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPSampleFormats {
6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnknown_ANPSamleFormat     = 0,
6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM16Bit_ANPSampleFormat   = 1,
6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kPCM8Bit_ANPSampleFormat    = 2
6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPSampleFormat;
6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** The audio buffer is passed to the callback proc to request more samples.
6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    It is owned by the system, and the callback may read it, but should not
6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    maintain a pointer to it outside of the scope of the callback proc.
6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioBuffer {
6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t     channelCount;
6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RO - repeat what was specified in newTrack()
6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPSampleFormat  format;
6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This buffer is owned by the caller. Inside the callback proc, up to
6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "size" bytes of sample data should be written into this buffer. The
6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        address is only valid for the scope of a single invocation of the
6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        callback proc.
6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void*       bufferData;
6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** On input, specifies the maximum number of bytes that can be written
6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        to "bufferData". On output, specifies the actual number of bytes that
6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        the callback proc wrote into "bufferData".
6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t    size;
6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPAudioEvents {
6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc when the audio-track needs
6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        more sample data written to the provided buffer parameter.
6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kMoreData_ANPAudioEvent = 0,
6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** This event is passed to the callback proc if the audio system runs out
6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        of sample data. In this event, no buffer parameter will be specified
6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (i.e. NULL will be passed to the 3rd parameter).
6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUnderRun_ANPAudioEvent = 1
6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPAudioEvent;
6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** Called to feed sample data to the track. This will be called in a separate
6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    thread. However, you may call trackStop() from the callback (but you
6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    cannot delete the track).
666a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    For example, when you have written the last chunk of sample data, you can
6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    immediately call trackStop(). This will take effect after the current
6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    buffer has been played.
670a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The "user" parameter is the same value that was passed to newTrack()
6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (*ANPAudioCallbackProc)(ANPAudioEvent event, void* user,
6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                     ANPAudioBuffer* buffer);
6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrack;   // abstract type for audio tracks
6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPAudioTrackInterfaceV0 : ANPInterface {
6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*  Create a new audio track, or NULL on failure.
6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPAudioTrack*  (*newTrack)(uint32_t sampleRate,    // sampling rate in Hz
6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPSampleFormat,
6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                int channelCount,       // MONO=1, STEREO=2
6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                ANPAudioCallbackProc,
6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                void* user);
6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*deleteTrack)(ANPAudioTrack*);
6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*start)(ANPAudioTrack*);
6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*pause)(ANPAudioTrack*);
6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void (*stop)(ANPAudioTrack*);
6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /** Returns true if the track is not playing (e.g. pause or stop was called,
6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        or start was never called.
6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool (*isStopped)(ANPAudioTrack*);
6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project///////////////////////////////////////////////////////////////////////////////
6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// HandleEvent
6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPEventTypes {
7013d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kNull_ANPEventType          = 0,
7023d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger    kKey_ANPEventType           = 1,
703d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kMouse_ANPEventType         = 2,
704d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kTouch_ANPEventType         = 3,
705d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kDraw_ANPEventType          = 4,
706d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kLifecycle_ANPEventType     = 5,
707d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kVisibleRect_ANPEventType   = 6,
7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPEventType;
7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyActions {
7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kDown_ANPKeyAction  = 0,
7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kUp_ANPKeyAction    = 1,
7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyAction;
7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ANPKeyCodes.h"
7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPKeyCode;
7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPKeyModifiers {
7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kAlt_ANPKeyModifier     = 1 << 0,
7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    kShift_ANPKeyModifier   = 1 << 1,
7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// bit-field containing some number of ANPKeyModifier bits
7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef uint32_t ANPKeyModifier;
7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
727d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergerenum ANPMouseActions {
728d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kDown_ANPMouseAction  = 0,
729d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger    kUp_ANPMouseAction    = 1,
730d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger};
731d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenbergertypedef int32_t ANPMouseAction;
732d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger
7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum ANPTouchActions {
73456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kDown_ANPTouchAction   = 0,
73556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kUp_ANPTouchAction     = 1,
73656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kMove_ANPTouchAction   = 2,
73756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger    kCancel_ANPTouchAction = 3,
7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int32_t ANPTouchAction;
7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
741a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergerenum ANPLifecycleActions {
742a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger    kPause_ANPLifecycleAction      = 0,
743a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger    kResume_ANPLifecycleAction     = 1,
744a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger    kGainFocus_ANPLifecycleAction  = 2,
745a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger    kLooseFocus_ANPLifecycleAction = 3,
7460fae426bf2862e6ba2745a999ecb25d172c6860aDerek Sollenberger    kFreeMemory_ANPLifecycleAction = 4,
747a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger};
748a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenbergertypedef uint32_t ANPLifecycleAction;
749a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger
7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This is what is passed to NPP_HandleEvent() */
7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct ANPEvent {
7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    uint32_t        inSize;  // size of this struct in bytes
7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ANPEventType    eventType;
7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // use based on the value in eventType
7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    union {
7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyAction    action;
7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyCode      nativeCode;
7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         virtualCode;    // windows virtual key code
7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         repeatCount;    // 0 for initial down (or up)
7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         unichar;        // 0 if there is no value
7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } key;
7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        struct {
765d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            ANPMouseAction  action;
766d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            int32_t         x;  // relative to your "window" (0...width)
767d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger            int32_t         y;  // relative to your "window" (0...height)
768d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger        } mouse;
769d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger        struct {
7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPTouchAction  action;
7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            ANPKeyModifier  modifiers;
7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         x;  // relative to your "window" (0...width)
7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            int32_t         y;  // relative to your "window" (0...height)
7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } touch;
775a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger        struct {
776a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger            ANPLifecycleAction  action;
777a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger        } lifecycle;
778535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger        struct {
779535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            ANPDrawingModel model;
780535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            // relative to (0,0) in top-left of your plugin
781535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            ANPRectI        clip;
782535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            // use based on the value in model
783535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            union {
784535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger                ANPBitmap   bitmap;
785535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger            } data;
786535c54975bd9f79f3ab3f02f8d1b831d8ade7c51Derek Sollenberger        } draw;
7873d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger        struct {
78860feb0579c2d9cafa9d48b8d01ccdb7d1173d54dMike Reed            ANPRectI    rect;       // in global document coordinates
78960feb0579c2d9cafa9d48b8d01ccdb7d1173d54dMike Reed            float       zoomScale;  // 1.0 means no zoom scale
7903d709e1f628a1547fba1e4cab0c91a55f7ed7e7aDerek Sollenberger        } visibleRect;
7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int32_t         other[8];
7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } data;
7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
797