| /* Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef _NP_EXTENSIONS_H_ |
| #define _NP_EXTENSIONS_H_ |
| |
| // Use the shorter include path here so that this file can be used in non- |
| // Chromium projects, such as the Native Client SDK. |
| #include "npapi.h" |
| |
| #include <stddef.h> // For size_t |
| |
| /* |
| * A fake "enum" value for getting browser-implemented Pepper extensions. |
| * The variable returns a pointer to an NPNExtensions structure. */ |
| #define NPNVPepperExtensions ((NPNVariable) 4000) |
| |
| /* |
| * A fake "enum" value for getting plugin-implemented Pepper extensions. |
| * The variable returns a pointer to an NPPExtensions structure. */ |
| #define NPPVPepperExtensions ((NPPVariable) 4001) |
| |
| typedef void NPDeviceConfig; |
| typedef void NPDeviceContext; |
| typedef void NPUserData; |
| |
| /* unique id for each device interface */ |
| typedef int32_t NPDeviceID; |
| |
| /* Events -------------------------------------------------------------------*/ |
| |
| typedef enum { |
| NPMouseButton_None = -1, |
| NPMouseButton_Left = 0, |
| NPMouseButton_Middle = 1, |
| NPMouseButton_Right = 2 |
| } NPMouseButtons; |
| |
| typedef enum { |
| NPEventType_Undefined = -1, |
| NPEventType_MouseDown = 0, |
| NPEventType_MouseUp = 1, |
| NPEventType_MouseMove = 2, |
| NPEventType_MouseEnter = 3, |
| NPEventType_MouseLeave = 4, |
| NPEventType_MouseWheel = 5, |
| NPEventType_RawKeyDown = 6, |
| NPEventType_KeyDown = 7, |
| NPEventType_KeyUp = 8, |
| NPEventType_Char = 9, |
| NPEventType_Minimize = 10, |
| NPEventType_Focus = 11, |
| NPEventType_Device = 12 |
| } NPEventTypes; |
| |
| typedef enum { |
| NPEventModifier_ShiftKey = 1 << 0, |
| NPEventModifier_ControlKey = 1 << 1, |
| NPEventModifier_AltKey = 1 << 2, |
| NPEventModifier_MetaKey = 1 << 3, |
| NPEventModifier_IsKeyPad = 1 << 4, |
| NPEventModifier_IsAutoRepeat = 1 << 5, |
| NPEventModifier_LeftButtonDown = 1 << 6, |
| NPEventModifier_MiddleButtonDown = 1 << 7, |
| NPEventModifier_RightButtonDown = 1 << 8 |
| } NPEventModifiers; |
| |
| typedef struct _NPKeyEvent |
| { |
| uint32_t modifier; |
| uint32_t normalizedKeyCode; |
| } NPKeyEvent; |
| |
| typedef struct _NPCharacterEvent |
| { |
| uint32_t modifier; |
| uint16_t text[4]; |
| uint16_t unmodifiedText[4]; |
| } NPCharacterEvent; |
| |
| typedef struct _NPMouseEvent |
| { |
| uint32_t modifier; |
| int32_t button; |
| int32_t x; |
| int32_t y; |
| int32_t clickCount; |
| } NPMouseEvent; |
| |
| typedef struct _NPMouseWheelEvent |
| { |
| uint32_t modifier; |
| float deltaX; |
| float deltaY; |
| float wheelTicksX; |
| float wheelTicksY; |
| uint32_t scrollByPage; |
| } NPMouseWheelEvent; |
| |
| typedef struct _NPDeviceEvent { |
| uint32_t device_uid; |
| uint32_t subtype; |
| /* uint8_t generic[0]; */ |
| } NPDeviceEvent; |
| |
| typedef struct _NPMinimizeEvent { |
| int32_t value; |
| } NPMinimizeEvent; |
| |
| typedef struct _NPFocusEvent { |
| int32_t value; |
| } NPFocusEvent; |
| |
| typedef struct _NPPepperEvent |
| { |
| uint32_t size; |
| int32_t type; |
| double timeStampSeconds; |
| union { |
| NPKeyEvent key; |
| NPCharacterEvent character; |
| NPMouseEvent mouse; |
| NPMouseWheelEvent wheel; |
| NPMinimizeEvent minimize; |
| NPFocusEvent focus; |
| NPDeviceEvent device; |
| } u; |
| } NPPepperEvent; |
| |
| /* 2D -----------------------------------------------------------------------*/ |
| |
| #define NPPepper2DDevice 1 |
| |
| typedef struct _NPDeviceContext2DConfig { |
| } NPDeviceContext2DConfig; |
| |
| typedef struct _NPDeviceContext2D |
| { |
| /* Internal value used by the browser to identify this device. */ |
| void* reserved; |
| |
| /* A pointer to the pixel data. This data is 8-bit values in BGRA order in |
| * memory. Each row will start |stride| bytes after the previous one. |
| * |
| * THIS DATA USES PREMULTIPLIED ALPHA. This means that each color channel has |
| * been multiplied with the corresponding alpha, which makes compositing |
| * easier. If any color channels have a value greater than the alpha value, |
| * you'll likely get crazy colors and weird artifacts. */ |
| void* region; |
| |
| /* Length of each row of pixels in bytes. This may be larger than width * 4 |
| * if there is padding at the end of each row to help with alignment. */ |
| int32_t stride; |
| |
| /* The dirty region that the plugin has painted into the buffer. This |
| * will be initialized to the size of the plugin image in |
| * initializeContextPtr. The plugin can change the values to only |
| * update portions of the image. */ |
| struct { |
| int32_t left; |
| int32_t top; |
| int32_t right; |
| int32_t bottom; |
| } dirty; |
| } NPDeviceContext2D; |
| |
| typedef struct _NPDeviceBuffer { |
| void* ptr; |
| size_t size; |
| } NPDeviceBuffer; |
| |
| /* completion callback for flush device */ |
| typedef void (*NPDeviceFlushContextCallbackPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| NPError err, |
| NPUserData* userData); |
| |
| /* query single capabilities of device */ |
| typedef NPError ( |
| *NPDeviceQueryCapabilityPtr)(NPP instance, |
| int32_t capability, |
| int32_t *value); |
| /* query config (configuration == a set of capabilities) */ |
| typedef NPError ( |
| *NPDeviceQueryConfigPtr)(NPP instance, |
| const NPDeviceConfig* request, |
| NPDeviceConfig* obtain); |
| /* device initialization */ |
| typedef NPError (*NPDeviceInitializeContextPtr)( |
| NPP instance, |
| const NPDeviceConfig* config, |
| NPDeviceContext* context); |
| /* peek at device state */ |
| typedef NPError (*NPDeviceGetStateContextPtr) ( |
| NPP instance, |
| NPDeviceContext* context, |
| int32_t state, |
| intptr_t* value); |
| /* poke device state */ |
| typedef NPError (*NPDeviceSetStateContextPtr) ( |
| NPP instance, |
| NPDeviceContext* context, |
| int32_t state, |
| intptr_t value); |
| /* flush context, if callback, userData are NULL */ |
| /* this becomes a blocking call */ |
| typedef NPError (*NPDeviceFlushContextPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| NPDeviceFlushContextCallbackPtr callback, |
| void* userData); |
| /* destroy device context. Application responsible for */ |
| /* freeing context, if applicable */ |
| typedef NPError (*NPDeviceDestroyContextPtr)( |
| NPP instance, |
| NPDeviceContext* context); |
| /* Create a buffer associated with a particular context. The usage of the */ |
| /* buffer is device specific. The lifetime of the buffer is scoped with the */ |
| /* lifetime of the context. */ |
| typedef NPError (*NPDeviceCreateBufferPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| size_t size, |
| int32_t* id); |
| /* Destroy a buffer associated with a particular context. */ |
| typedef NPError (*NPDeviceDestroyBufferPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| int32_t id); |
| /* Map a buffer id to its address. */ |
| typedef NPError (*NPDeviceMapBufferPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| int32_t id, |
| NPDeviceBuffer* buffer); |
| |
| |
| /* forward decl typdef structs */ |
| typedef struct NPDevice NPDevice; |
| typedef struct NPNExtensions NPNExtensions; |
| |
| // DEPRECATED: this typedef is just for the NaCl code until they switch to NPNExtensions. |
| // PLEASE REMOVE THIS WHEN THE NACL CODE IS UPDATED. |
| typedef struct NPNExtensions NPExtensions; |
| |
| |
| /* New experimental device API. */ |
| |
| /* Mode for calls to NPDeviceSynchronizeContext. */ |
| typedef enum { |
| /* Get or set locally cached state without synchronizing or communicating */ |
| /* with the service process (or thread). */ |
| NPDeviceSynchronizationMode_Cached, |
| |
| /* Exchanges state with service process (or thread). Does not wait for any */ |
| /* progress before returning. */ |
| NPDeviceSynchronizationMode_Immediate, |
| |
| /* Exchanges state with service process (or thread). Blocks caller until */ |
| /* further progress can be made. */ |
| NPDeviceSynchronizationMode_Flush |
| } NPDeviceSynchronizationMode; |
| |
| /* Get the number of configs supported by a given device. */ |
| typedef NPError (*NPDeviceGetNumConfigsPtr)(NPP instance, |
| int32_t* numConfigs); |
| |
| /* Get attribute values from a config. NPDeviceGetConfigs might return */ |
| /* multiple configs. This function can be used to examine them to */ |
| /* find the most suitable. For example, NPDeviceGetConfigs might return one */ |
| /* config with antialiasing enabled and one without. This can be determined */ |
| /* using this function. */ |
| /* Inputs: */ |
| /* config: The config index to extract the attributes from. */ |
| /* attribList: Array of input config attribute / value pairs */ |
| /* terminated with NPAttrib_End. */ |
| /* Outputs: */ |
| /* attribList: The values paired up with each attribute are filled in */ |
| /* on return. */ |
| typedef NPError (*NPDeviceGetConfigAttribsPtr)(NPP instance, |
| int32_t config, |
| int32_t* attribList); |
| |
| /* Create a device context based on a particular device configuration and a */ |
| /* list config input attributes. */ |
| /* Inputs: */ |
| /* config: The device configuration to use. */ |
| /* attribList: NULL or an array of context specific attribute / value */ |
| /* pairs terminated with NPAttrib_End. */ |
| /* Outputs: */ |
| /* context: The created context. */ |
| typedef NPError (*NPDeviceCreateContextPtr)(NPP instance, |
| int32_t config, |
| const int32_t* attribList, |
| NPDeviceContext** context); |
| |
| /* Destroy a context. */ |
| /* Inputs: */ |
| /* context: The context to destroy. */ |
| /*typedef NPError (*NPDestroyContext)(NPP instance, */ |
| /* NPDeviceContext* context); */ |
| |
| /* This type should be cast to the type associated with the particular */ |
| /* callback type */ |
| typedef void (*NPDeviceGenericCallbackPtr)(void); |
| |
| /* Register a callback with a context. Callbacks are never invoked after the */ |
| /* associated context has been destroyed. The semantics of the particular */ |
| /* callback type determine which thread the callback is invoked on. It might */ |
| /* be the plugin thread, the thread RegisterCallback is invoked on or a */ |
| /* special thread created for servicing callbacks, such as an audio thread */ |
| /* Inputs: */ |
| /* callbackType: The device specific callback type */ |
| /* callback: The callback to invoke. The signature varies by type. Use */ |
| /* NULL to unregister the callback for a particular type. */ |
| /* callbackData: A value that is passed to the callback function. Other */ |
| /* callback arguments vary by type. */ |
| typedef NPError (*NPDeviceRegisterCallbackPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| int32_t callbackType, |
| NPDeviceGenericCallbackPtr callback, |
| void* callbackData); |
| |
| /* Callback for NPDeviceSynchronizeContext. */ |
| /* Inputs: */ |
| /* instance: The associated plugin instance. */ |
| /* context: The context that was flushed. */ |
| /* error: Indicates success of flush operation. */ |
| /* data: The completion callback data that was passed to */ |
| /* NPDeviceSynchronizeContext. */ |
| typedef void (*NPDeviceSynchronizeContextCallbackPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| NPError error, |
| void* data); |
| |
| /* Synchronize the state of a device context. Takes lists of input and output */ |
| /* attributes. Generally, the input attributes are copied into the context */ |
| /* and the output attributes are filled in the state of the context either */ |
| /* after (before) the synchronization depending on whether it is synchronous */ |
| /* (asynchronous). The get the state of the context after an asynchronous */ |
| /* synchronization, call this function a second time with Cached mode after */ |
| /* the callback has been invoked. */ |
| /* Inputs: */ |
| /* context: The context to synchronize. */ |
| /* mode: The type of synchronization to perform. */ |
| /* inputAttribList: NULL or an array of input synchronization attribute / */ |
| /* value pairs terminated with NPAttrib_End. */ |
| /* outputAttribList: NULL or an array of output synchronization */ |
| /* attributes / uninitialized value pairs terminated */ |
| /* with NPAttrib_End. */ |
| /* callback: NULL for synchronous operation or completion callback function */ |
| /* for asynchronous operation. */ |
| /* callbackData: Argument passed to callback function. */ |
| /* Outputs: */ |
| /* outputAttribList: The values paired up with each attribute are filled */ |
| /* in on return for synchronous operation. */ |
| typedef NPError (*NPDeviceSynchronizeContextPtr)( |
| NPP instance, |
| NPDeviceContext* context, |
| NPDeviceSynchronizationMode mode, |
| const int32_t* inputAttribList, |
| int32_t* outputAttribList, |
| NPDeviceSynchronizeContextCallbackPtr callback, |
| void* callbackData); |
| |
| /* All attributes shared between devices, with the exception of */ |
| /* NPDeviceContextAttrib_End, have bit 31 set. Device specific attributes */ |
| /* have the bit clear. */ |
| enum { |
| /* Used to terminate arrays of attribute / value pairs. */ |
| NPAttrib_End = 0, |
| |
| /* Error status of context. Non-zero means error. Shared by all devices, */ |
| /* though error values are device specific. */ |
| NPAttrib_Error = 0x80000000 |
| }; |
| |
| /* generic device interface */ |
| struct NPDevice { |
| NPDeviceQueryCapabilityPtr queryCapability; |
| NPDeviceQueryConfigPtr queryConfig; |
| NPDeviceInitializeContextPtr initializeContext; |
| NPDeviceSetStateContextPtr setStateContext; |
| NPDeviceGetStateContextPtr getStateContext; |
| NPDeviceFlushContextPtr flushContext; |
| NPDeviceDestroyContextPtr destroyContext; |
| NPDeviceCreateBufferPtr createBuffer; |
| NPDeviceDestroyBufferPtr destroyBuffer; |
| NPDeviceMapBufferPtr mapBuffer; |
| |
| /* Experimental device API */ |
| NPDeviceGetNumConfigsPtr getNumConfigs; |
| NPDeviceGetConfigAttribsPtr getConfigAttribs; |
| NPDeviceCreateContextPtr createContext; |
| /* NPDeviceDestroyContextPtr destroyContext; */ |
| NPDeviceRegisterCallbackPtr registerCallback; |
| NPDeviceSynchronizeContextPtr synchronizeContext; |
| /* NPDeviceCreateBufferPtr createBuffer; */ |
| /* NPDeviceDestroyBufferPtr destroyBuffer; */ |
| /* NPDeviceMapBufferPtr mapBuffer; */ |
| }; |
| |
| /* returns NULL if deviceID unavailable / unrecognized */ |
| typedef NPDevice* (*NPAcquireDevicePtr)( |
| NPP instance, |
| NPDeviceID device); |
| |
| /* Updates the number of find results for the current search term. If |
| * there are no matches 0 should be passed in. Only when the plugin has |
| * finished searching should it pass in the final count with finalResult set to |
| * true. */ |
| typedef void (*NPNumberOfFindResultsChangedPtr)( |
| NPP instance, |
| int total, |
| bool finalResult); |
| |
| /* Updates the index of the currently selected search item. */ |
| typedef void (*NPSelectedFindResultChangedPtr)( |
| NPP instance, |
| int index); |
| |
| /* Theming -----------------------------------------------------------------*/ |
| typedef int32_t NPWidgetID; |
| |
| typedef enum { |
| NPWidgetTypeScrollbar = 0 |
| } NPWidgetType; |
| |
| typedef struct _NPScrollbarCreateParams { |
| bool vertical; |
| } NPScrollbarCreateParams; |
| |
| typedef struct _NPRect32 |
| { |
| uint32_t top; |
| uint32_t left; |
| uint32_t bottom; |
| uint32_t right; |
| } NPRect32; |
| |
| typedef struct _NPScrollbarTickMarks { |
| uint32_t count; |
| NPRect32* tickmarks; |
| } NPScrollbarTickMarks; |
| |
| typedef enum { |
| NPWidgetPropertyLocation = 0, // variable is NPRect*. |
| NPWidgetPropertyDirtyRect = 1, // Get only. variable is NPRec*. |
| NPWidgetPropertyScrollbarThickness = 2, // Get only. variable is int32_t*. |
| NPWidgetPropertyScrollbarValue = 3, // variable is int32_t*. |
| NPWidgetPropertyScrollbarDocumentSize = 4, // Set only. variable is int32_t*. |
| // Set only. variable is NPScrollbarTickMarks*. |
| NPWidgetPropertyScrollbarTickMarks = 5, |
| // Set only. variable is bool* (true for forward, false for backward). |
| NPWidgetPropertyScrollbarScrollByLine = 6, |
| // Set only. variable is bool* (true for forward, false for backward). |
| NPWidgetPropertyScrollbarScrollByPage = 7, |
| // Set only. variable is bool* (true for forward, false for backward). |
| NPWidgetPropertyScrollbarScrollByDocument = 8, |
| // Set only. variable is int32_t* (positive forward, negative backward). |
| NPWidgetPropertyScrollbarScrollByPixels = 9 |
| } NPWidgetProperty; |
| |
| // Creates a widget. If it returns NPERR_NO_ERROR then id will contain a unique |
| // identifer for the widget that's used for the next functions. |
| typedef NPError (*NPCreateWidgetPtr) ( |
| NPP instance, |
| NPWidgetType type, |
| void* params, // Widget specific. |
| NPWidgetID* id); |
| |
| // Destroys a widget. |
| typedef NPError (*NPDestroyWidgetPtr) ( |
| NPP instance, |
| NPWidgetID id); |
| |
| // Paint the dirty rectangle of the given widget into context. |
| typedef NPError (*NPPaintWidgetPtr) ( |
| NPP instance, |
| NPWidgetID id, |
| NPDeviceContext2D* context, |
| NPRect* dirty); |
| |
| // Pass in a pepper event to a plugin. It'll return true iff it uses it. |
| typedef bool (*NPHandleWidgetEventPtr) ( |
| NPP instance, |
| NPWidgetID id, |
| NPPepperEvent* event); |
| |
| // Gets a property of the widget. "value" varies depending on the variable. |
| typedef NPError (*NPGetWidgetPropertyPtr) ( |
| NPP instance, |
| NPWidgetID id, |
| NPWidgetProperty property, |
| void* value); |
| |
| // Sets a property of the widget. |
| typedef NPError (*NPSetWidgetPropertyPtr) ( |
| NPP instance, |
| NPWidgetID id, |
| NPWidgetProperty property, |
| void* value); |
| |
| typedef struct _NPWidgetExtensions { |
| NPCreateWidgetPtr createWidget; |
| NPDestroyWidgetPtr destroyWidget; |
| NPPaintWidgetPtr paintWidget; |
| NPHandleWidgetEventPtr handleWidgetEvent; |
| NPGetWidgetPropertyPtr getWidgetProperty; |
| NPSetWidgetPropertyPtr setWidgetProperty; |
| } NPWidgetExtensions; |
| |
| typedef NPWidgetExtensions* (*NPGetWidgetExtensionsPtr)( |
| NPP instance); |
| |
| |
| /* Supports opening files anywhere on the system after prompting the user to |
| * pick one. |
| * |
| * This API is asynchronous. It will return immediately and the user will be |
| * prompted in parallel to pick a file. The plugin may continue to receive |
| * events while the open file dialog is up, and may continue to paint. Plugins |
| * may want to ignore input events between the call and the callback to avoid |
| * reentrant behavior. If the return value is not NPERR_NO_ERROR, the callback |
| * will NOT be executed. |
| * |
| * It is an error to call BrowseForFile before a previous call has executed |
| * the callback. |
| * |
| * Setting the flags to "Open" requires that the file exist to allow picking. |
| * Setting the flags to "Save" allows selecting nonexistant files (which will |
| * then be created), and will prompt the user if they want to overwrite an |
| * existing file if it exists. |
| * |
| * The plugin may specify a comma-separated list of possible mime types in |
| * the "extensions" parameter. If no extensions are specified, the dialog box |
| * will default to allowing all extensions. The first extension in the list |
| * will be the default. |
| * |
| * TODO(brettw) On Windows the extensions traditionally include a text |
| * description with the extension in the popup, do we want to allow this? |
| * We should probably also allow the ability to put "All files" in the |
| * list on Windows. |
| * |
| * Once the user has picked a file or has canceled the dialog box, the given |
| * callback will be called with the results of the operation and the passed in |
| * "user data" pointer. If the user successfully picked a file, the filename |
| * will be non-NULL and will contain a pointer to an array of strings, one for |
| * each file picked (the first file will be file_paths[0]). This buffer will |
| * become invalid as soon as the call completes, so it is the plugin's |
| * responsibility to copy the filename(sp if it needs future access to them. |
| * A NULL file_paths in the callback means the user canceled the dialog box. |
| * |
| * The filename will be in UTF-8. It may not actually correspond to the actual |
| * file on disk on a Linux system, because we'll do our best to convert it from |
| * the filesystem's locale to UTF-8. Instead, the string will be appropriate for |
| * displaying to the user which file they picked. |
| * */ |
| typedef enum { |
| NPChooseFile_Open = 1, |
| NPChooseFile_OpenMultiple = 2, |
| NPChooseFile_Save = 3 |
| } NPChooseFileMode; |
| typedef void (*NPChooseFileCallback)(const char** filePaths, |
| uint32_t pathCount, |
| void* userData); |
| typedef NPError (*NPChooseFilePtr)( |
| NPP instance, |
| const char* mimeTypes, |
| NPChooseFileMode mode, |
| NPChooseFileCallback callback, |
| void* userData); |
| |
| typedef enum { |
| NPCursorTypePointer = 0, |
| NPCursorTypeCross = 1, |
| NPCursorTypeHand = 2, |
| NPCursorTypeIBeam = 3, |
| NPCursorTypeWait = 4, |
| NPCursorTypeHelp = 5, |
| NPCursorTypeEastResize = 6, |
| NPCursorTypeNorthResize = 7, |
| NPCursorTypeNorthEastResize = 8, |
| NPCursorTypeNorthWestResize = 9, |
| NPCursorTypeSouthResize = 10, |
| NPCursorTypeSouthEastResize = 11, |
| NPCursorTypeSouthWestResize = 12, |
| NPCursorTypeWestResize = 13, |
| NPCursorTypeNorthSouthResize = 14, |
| NPCursorTypeEastWestResize = 15, |
| NPCursorTypeNorthEastSouthWestResize = 16, |
| NPCursorTypeNorthWestSouthEastResize = 17, |
| NPCursorTypeColumnResize = 18, |
| NPCursorTypeRowResize = 19, |
| NPCursorTypeMiddlePanning = 20, |
| NPCursorTypeEastPanning = 21, |
| NPCursorTypeNorthPanning = 22, |
| NPCursorTypeNorthEastPanning = 23, |
| NPCursorTypeNorthWestPanning = 24, |
| NPCursorTypeSouthPanning = 25, |
| NPCursorTypeSouthEastPanning = 26, |
| NPCursorTypeSouthWestPanning = 27, |
| NPCursorTypeWestPanning = 28, |
| NPCursorTypeMove = 29, |
| NPCursorTypeVerticalText = 30, |
| NPCursorTypeCell = 31, |
| NPCursorTypeContextMenu = 32, |
| NPCursorTypeAlias = 33, |
| NPCursorTypeProgress = 34, |
| NPCursorTypeNoDrop = 35, |
| NPCursorTypeCopy = 36, |
| NPCursorTypeNone = 37, |
| NPCursorTypeNotAllowed = 38, |
| NPCursorTypeZoomIn = 39, |
| NPCursorTypeZoomOut = 40 |
| } NPCursorType; |
| |
| // Temporary SetCursor API. |
| typedef NPError (*NPSetCursorPtr)( |
| NPP instance, |
| NPCursorType type); |
| |
| /* unique id for each font */ |
| typedef int NPFontID; |
| |
| typedef enum { |
| NPCharsetAnsi = 0, |
| NPCharsetDefault = 1, |
| NPCharsetSymbol = 2, |
| NPCharsetMac = 77, |
| NPCharsetShiftJIS = 128, |
| NPCharsetHangul = 129, |
| NPCharsetJohab = 130, |
| NPCharsetGB2312 =134, |
| NPCharsetChineseBIG5 = 136, |
| NPCharsetGreek = 161, |
| NPCharsetTurkish = 162, |
| NPCharsetVietnamese = 163, |
| NPCharsetHebrew = 177, |
| NPCharsetArabic = 178, |
| NPCharsetBaltic = 186, |
| NPCharsetRussian = 204, |
| NPCharsetThai = 222, |
| NPCharsetEastEurope = 238, |
| NPCharsetOEM = 255 |
| } NPCharset; |
| |
| typedef enum { |
| NPPitchDefault, |
| NPPitchFixed |
| } NPPitch; |
| |
| typedef enum { |
| NPFamilyDefault, |
| NPFamilyRoman, |
| NPFamilyScript |
| } NPFamily; |
| |
| typedef struct _NPFontDescription { |
| const char* face; |
| int weight; |
| bool italic; |
| NPPitch pitch; |
| NPFamily family; |
| NPCharset charset; |
| } NPFontDescription; |
| |
| // Return a font which best matches the given properties. |
| typedef NPError (*NPMatchFontWithFallbackPtr) ( |
| NPP instance, |
| const NPFontDescription* description, |
| NPFontID* id); |
| |
| // Loads a specified font table for the given font. |
| // table: the table in *big-endian* format, or 0 for the whole font file. |
| // output: a buffer of size output_length that gets the data. can be 0, in |
| // which case output_length will be set to the required size in bytes. |
| // output_length: size of output, if it's not 0. |
| typedef NPError (*GetFontTablePtr) ( |
| NPP instance, |
| NPFontID id, |
| uint32_t table, |
| void* output, |
| size_t* output_length); |
| |
| // Destroys a font. |
| typedef NPError (*NPDestroyFontPtr) ( |
| NPP instance, |
| NPFontID id); |
| |
| typedef struct _NPFontExtensions { |
| NPMatchFontWithFallbackPtr matchFontWithFallback; |
| GetFontTablePtr getFontTable; |
| NPDestroyFontPtr destroyFont; |
| } NPFontExtensions; |
| |
| typedef NPFontExtensions* (*NPGetFontExtensionsPtr)( |
| NPP instance); |
| |
| /* Pepper extensions */ |
| struct NPNExtensions { |
| /* Device interface acquisition */ |
| NPAcquireDevicePtr acquireDevice; |
| /* Find */ |
| NPNumberOfFindResultsChangedPtr numberOfFindResultsChanged; |
| NPSelectedFindResultChangedPtr selectedFindResultChanged; |
| /* File I/O extensions */ |
| NPChooseFilePtr chooseFile; |
| /* Widget */ |
| NPGetWidgetExtensionsPtr getWidgetExtensions; |
| /* Cursor */ |
| NPSetCursorPtr setCursor; |
| /* Font */ |
| NPGetFontExtensionsPtr getFontExtensions; |
| }; |
| |
| /* 3D -----------------------------------------------------------------------*/ |
| |
| #define NPPepper3DDevice 2 |
| |
| typedef struct _NPDeviceContext3DConfig { |
| int32_t commandBufferSize; |
| } NPDeviceContext3DConfig; |
| |
| typedef enum _NPDeviceContext3DError { |
| // No error has ocurred. |
| NPDeviceContext3DError_NoError, |
| |
| // The size of a command was invalid. |
| NPDeviceContext3DError_InvalidSize, |
| |
| // An offset was out of bounds. |
| NPDeviceContext3DError_OutOfBounds, |
| |
| // A command was not recognized. |
| NPDeviceContext3DError_UnknownCommand, |
| |
| // The arguments to a command were invalid. |
| NPDeviceContext3DError_InvalidArguments, |
| |
| // The 3D context was lost, for example due to a power management event. The |
| // context must be destroyed and a new one created. |
| NPDeviceContext3DError_LostContext, |
| |
| // Any other error. |
| NPDeviceContext3DError_GenericError |
| } NPDeviceContext3DError; |
| |
| typedef struct _NPDeviceContext3D NPDeviceContext3D; |
| |
| typedef void (*NPDeviceContext3DRepaintPtr)(NPP npp, |
| NPDeviceContext3D* context); |
| |
| // TODO(apatrick): this need not be exposed when we switch over to the new |
| // device API. It's layout can also be implementation dependent. |
| typedef struct _NPDeviceContext3D |
| { |
| void* reserved; |
| |
| // If true, then a flush will only complete once the get offset has advanced |
| // on the GPU thread. If false, then the get offset might have changed but |
| // the GPU thread will respond as quickly as possible without guaranteeing |
| // having made any progress in executing pending commands. Set to true |
| // to ensure that progress is made or when flushing in a loop waiting for the |
| // GPU to reach a certain state, for example in advancing beyond a particular |
| // token. Set to false when flushing to query the current state, for example |
| // whether an error has occurred. |
| bool waitForProgress; |
| |
| // Buffer in which commands are stored. |
| void* commandBuffer; |
| int32_t commandBufferSize; |
| |
| // Offset in command buffer reader has reached. Synchronized on flush. |
| int32_t getOffset; |
| |
| // Offset in command buffer writer has reached. Synchronized on flush. |
| int32_t putOffset; |
| |
| // Last processed token. Synchronized on flush. |
| int32_t token; |
| |
| // Callback invoked on the main thread when the context must be repainted. |
| // TODO(apatrick): move this out of the context struct like the rest of the |
| // fields. |
| NPDeviceContext3DRepaintPtr repaintCallback; |
| |
| // Error status. Synchronized on flush. |
| NPDeviceContext3DError error; |
| } NPDeviceContext3D; |
| |
| |
| /* Begin 3D specific portion of experimental device API */ |
| |
| /* Device buffer ID reserved for command buffer */ |
| enum { |
| NP3DCommandBufferId = 0 |
| }; |
| |
| /* 3D attributes */ |
| enum { |
| /* Example GetConfigAttribs attributes. See EGL 1.4 spec. */ |
| /* These may be passed to GetConfigAttribs. */ |
| NP3DAttrib_BufferSize = 0x3020, |
| NP3DAttrib_AlphaSize = 0x3021, |
| NP3DAttrib_BlueSize = 0x3022, |
| NP3DAttrib_GreenSize = 0x3023, |
| NP3DAttrib_RedSize = 0x3024, |
| NP3DAttrib_DepthSize = 0x3025, |
| NP3DAttrib_StencilSize = 0x3026, |
| NP3DAttrib_SurfaceType = 0x3033, |
| |
| /* Example CreateContext attributes. See EGL 1.4 spec. */ |
| /* These may be passed to CreateContext. */ |
| NP3DAttrib_SwapBehavior = 0x3093, |
| NP3DAttrib_MultisampleResolve = 0x3099, |
| |
| /* Size of command buffer in 32-bit entries. */ |
| /* This may be passed to CreateContext as an input or SynchronizeContext as */ |
| /* an output. */ |
| NP3DAttrib_CommandBufferSize = 0x10000000, |
| |
| /* These may be passed to SynchronizeContext. */ |
| |
| /* Offset in command buffer writer has reached. In / out.*/ |
| NP3DAttrib_PutOffset, |
| |
| /* Offset in command buffer reader has reached. Out only. */ |
| NP3DAttrib_GetOffset, |
| |
| /* Last processed token. Out only. */ |
| NP3DAttrib_Token |
| }; |
| |
| /* 3D callbacks */ |
| enum { |
| /* This callback is invoked whenever the plugin must repaint everything. */ |
| /* This might be because the window manager must repaint a window or */ |
| /* the context has been lost, for example a power management event. */ |
| NP3DCallback_Repaint = 1 |
| }; |
| |
| /* Flags for NPConfig3DOutAttrib_SurfaceType */ |
| enum { |
| NP3DSurfaceType_MultisampleResolveBox = 0x0200, |
| NP3DSurfaceType_SwapBehaviorPreserved = 0x0400 |
| }; |
| |
| /* Values for NPConfig3DInAttrib_SwapBehavior */ |
| enum { |
| NP3DSwapBehavior_Preserved = 0x3094, |
| NP3DSwapBehavior_Destroyed = 0x3095 |
| }; |
| |
| /* Values for NPConfig3DInAttrib_MultisampleResolve */ |
| enum { |
| NP3DMultisampleResolve_Default = 0x309A, |
| NP3DMultisampleResolve_Box = 0x309B |
| }; |
| |
| /* End 3D specific API */ |
| |
| /* Audio --------------------------------------------------------------------*/ |
| |
| #define NPPepperAudioDevice 3 |
| |
| /* min & max sample frame count */ |
| typedef enum { |
| NPAudioMinSampleFrameCount = 64, |
| NPAudioMaxSampleFrameCount = 32768 |
| } NPAudioSampleFrameCounts; |
| |
| /* supported sample rates */ |
| typedef enum { |
| NPAudioSampleRate44100Hz = 44100, |
| NPAudioSampleRate48000Hz = 48000, |
| NPAudioSampleRate96000Hz = 96000 |
| } NPAudioSampleRates; |
| |
| /* supported sample formats */ |
| typedef enum { |
| NPAudioSampleTypeInt16 = 0, |
| NPAudioSampleTypeFloat32 = 1 |
| } NPAudioSampleTypes; |
| |
| /* supported channel layouts */ |
| /* there is code that depends on these being the actual number of channels */ |
| typedef enum { |
| NPAudioChannelNone = 0, |
| NPAudioChannelMono = 1, |
| NPAudioChannelStereo = 2, |
| NPAudioChannelThree = 3, |
| NPAudioChannelFour = 4, |
| NPAudioChannelFive = 5, |
| NPAudioChannelFiveOne = 6, |
| NPAudioChannelSeven = 7, |
| NPAudioChannelSevenOne = 8 |
| } NPAudioChannels; |
| |
| /* audio context states */ |
| typedef enum { |
| NPAudioContextStateCallback = 0, |
| NPAudioContextStateUnderrunCounter = 1 |
| } NPAudioContextStates; |
| |
| /* audio context state values */ |
| typedef enum { |
| NPAudioCallbackStop = 0, |
| NPAudioCallbackStart = 1 |
| } NPAudioContextStateValues; |
| |
| /* audio query capabilities */ |
| typedef enum { |
| NPAudioCapabilitySampleRate = 0, |
| NPAudioCapabilitySampleType = 1, |
| NPAudioCapabilitySampleFrameCount = 2, |
| NPAudioCapabilitySampleFrameCount44100Hz = 3, |
| NPAudioCapabilitySampleFrameCount48000Hz = 4, |
| NPAudioCapabilitySampleFrameCount96000Hz = 5, |
| NPAudioCapabilityOutputChannelMap = 6, |
| NPAudioCapabilityInputChannelMap = 7 |
| } NPAudioCapabilities; |
| |
| typedef struct _NPDeviceContextAudio NPDeviceContextAudio; |
| |
| /* user supplied callback function */ |
| typedef void (*NPAudioCallback)(NPDeviceContextAudio *context); |
| |
| typedef struct _NPDeviceContextAudioConfig { |
| int32_t sampleRate; |
| int32_t sampleType; |
| int32_t outputChannelMap; |
| int32_t inputChannelMap; |
| int32_t sampleFrameCount; |
| uint32_t startThread; |
| uint32_t flags; |
| NPAudioCallback callback; |
| void *userData; |
| } NPDeviceContextAudioConfig; |
| |
| struct _NPDeviceContextAudio { |
| NPDeviceContextAudioConfig config; |
| void *outBuffer; |
| void *inBuffer; |
| void *reserved; |
| }; |
| |
| /* Printing related APIs ---------------------------------------------------*/ |
| |
| /* Defines a contiguous range of pages to be printed. Page numbers use a |
| * zero-based index. */ |
| typedef struct _NPPrintPageNumberRange { |
| int32_t firstPageNumber; |
| int32_t lastPageNumber; |
| } NPPrintPageNumberRange; |
| |
| /* Being a print operation. Returns the total number of pages to print at the |
| * given printableArea size and DPI. printableArea is in points (a point is 1/72 |
| * of an inch). The plugin is expected to remember the values of printableArea |
| * and printerDPI for use in subsequent print interface calls. These values |
| * should be cleared in printEnd. */ |
| typedef NPError (*NPPPrintBeginPtr) ( |
| NPP instance, |
| NPRect* printableArea, |
| int32_t printerDPI, |
| int32_t* numPages); |
| /* Returns the required raster dimensions for the given page. */ |
| typedef NPError (*NPPGetRasterDimensionsPtr) ( |
| NPP instance, |
| int32_t pageNumber, |
| int32_t* widthInPixels, |
| int32_t* heightInPixels); |
| /* Prints the specified page This allows the plugin to print a raster output. */ |
| typedef NPError (*NPPPrintPageRasterPtr) ( |
| NPP instance, |
| int32_t pageNumber, |
| NPDeviceContext2D* printSurface); |
| /* Ends the print operation */ |
| typedef NPError (*NPPPrintEndPtr) (NPP instance); |
| /* Prints the specified pages as PDF. The plugin allocates the output buffer |
| * pointed to by pdf_output using the browser-supplied NPN_MemAlloc function. |
| * The caller is expected to free the output buffer upon success.*/ |
| typedef NPError (*NPPrintPagesAsPDFPtr)(NPP instance, |
| NPPrintPageNumberRange* page_ranges, |
| int32_t page_range_count, |
| unsigned char** pdf_output, |
| int32_t* output_size); |
| |
| |
| /* TODO(sanjeevr) : Provide a vector interface for printing. We need to decide |
| * on a vector format that can support embedded fonts. A vector format will |
| * greatly reduce the size of the required output buffer. */ |
| |
| typedef struct _NPPPrintExtensions { |
| NPPPrintBeginPtr printBegin; |
| NPPGetRasterDimensionsPtr getRasterDimensions; |
| NPPPrintPageRasterPtr printPageRaster; |
| NPPPrintEndPtr printEnd; |
| NPPrintPagesAsPDFPtr printPagesAsPDF; |
| } NPPPrintExtensions; |
| |
| /* Returns NULL if the plugin does not support print extensions */ |
| typedef NPPPrintExtensions* (*NPPGetPrintExtensionsPtr)(NPP instance); |
| |
| /* Find ---------------------------------------------------------------------*/ |
| |
| /* Finds the given UTF-8 text starting at the current selection. The number of |
| * results will be updated asynchronously via numberOfFindResultsChanged. Note |
| * that multiple StartFind calls can happen before StopFind is called in the |
| * case of the search term changing. */ |
| typedef NPError (*NPPStartFindPtr) ( |
| NPP instance, |
| const char* text, |
| bool caseSensitive); |
| |
| /* Go to the next/previous result. */ |
| typedef NPError (*NPPSelectFindResultPtr) ( |
| NPP instance, |
| bool forward); |
| |
| /* Tells the plugin that the find operation has stopped, so it should clear |
| * any highlighting. */ |
| typedef NPError (*NPPStopFindPtr) ( |
| NPP instance); |
| |
| typedef struct _NPPFindExtensions { |
| NPPStartFindPtr startFind; |
| NPPSelectFindResultPtr selectFindResult; |
| NPPStopFindPtr stopFind; |
| } NPPFindExtensions; |
| |
| /* Returns NULL if the plugin does not support find extensions. */ |
| typedef NPPFindExtensions* (*NPPGetFindExtensionsPtr)(NPP instance); |
| |
| /* Zooms a plugin to the given factor. If text_only is true, then only the text |
| * should be zoomed. */ |
| typedef NPError (*NPPZoomPtr) ( |
| NPP instance, |
| float factor, |
| bool text_only); |
| |
| typedef NPError (*NPPWidgetPropertyChangedPtr) ( |
| NPP instance, |
| NPWidgetID id, |
| NPWidgetProperty property); |
| |
| /* type of selection */ |
| typedef enum { |
| NPSelectionTypeAny = 0, |
| NPSelectionTypePlainText = 1, |
| NPSelectionTypeHTML = 2 |
| } NPSelectionType; |
| |
| /* Gets the selection. NPERR_GENERIC_ERROR is returned if nothing is selected. |
| * 'type' is both an input and output parameter. The caller can request a |
| * specific type, and if the plugin can't provide it, it will return |
| * NPERR_GENERIC_ERROR. Or the caller can specify NPSelectionTypeAny to let the |
| * plugin pick the best format for the data. The result is returned in a buffer |
| * that's owned by the caller and which is allocated using NPN_MemAlloc. If no |
| * data is available, NPERR_GENERIC_ERROR is returned. */ |
| typedef NPError (*NPPGetSelectionPtr) ( |
| NPP instance, |
| NPSelectionType* type, |
| void** data); |
| |
| typedef struct _NPPExtensions { |
| NPPGetPrintExtensionsPtr getPrintExtensions; |
| NPPGetFindExtensionsPtr getFindExtensions; |
| NPPZoomPtr zoom; |
| NPPWidgetPropertyChangedPtr widgetPropertyChanged; |
| NPPGetSelectionPtr getSelection; |
| } NPPExtensions; |
| |
| #endif /* _NP_EXTENSIONS_H_ */ |