NPAPI:DrawImage: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 51: Line 51:
     NPImageFormat format;    /* Format of image pointer */
     NPImageFormat format;    /* Format of image pointer */
     NPSize        dataSize;  /* Data buffer size */
     NPSize        dataSize;  /* Data buffer size */
    /* Clip rectangle, must be used for trusted plugins */
 
     int32_t      x;      /* Expose x relative to 0,0 of plugin window area*/
     /* Plugin window area rectangle relative to 0,0 beginning of buffer image*/
    int32_t      y;      /* Expose y relative to 0,0 of plugin window area */
     NPRect        pluginArea;  
     uint32_t      width; /* Expose width */
 
    uint32_t      height; /* Expose height */
     /* Clip rectangle relative to pluginArea rectangle*/
     /* Position and scale values for plugin area */
     NPRect        clip;
    float        translateX; /* translate X matrix value, (x offset) */
     float        translateY; /* translate Y matrix value, (y offset) */
    /* Defines plugin window size on scaled context, if 1 then size = window size */
    float        scaleX;    /* scale X matrix value */
    float        scaleY;    /* scale Y matrix value */
   } NPImageData;
   } NPImageData;



Revision as of 22:43, 27 April 2010

Status

Under consideration.

Contributors

  • Last modified: April 27, 2010
  • Authors: Oleg Romashin (Nokia), Josh Aas (Mozilla)
  • Contributors:

Overview

This drawing model allows plugins to draw into a buffer.

Event Model Requirements

This drawing model is currently compatible with the following event models:

While this is currently only compatible with the extended X event model, this could change. This drawing model was designed to work on any platform.

NPDrawingModelX

As this will be the first alternative to the default X drawing model, we'll designate the original model:

  • NPDrawingModelX (NPDrawingModel = 4)
  • NPNVsupportsXDrawingBool (NPNVariable = 2004)

NPDrawingModelDrawImage

For documentation on negotiating drawing models, see NPAPI:Models. The drawing model variables for draw image events are:

  • NPDrawingModelDrawImage (NPDrawingModel = 5)
  • NPNVsupportsDrawImageBool (NPNVariable = 3005)

Event Structure

 typedef enum {
   NPImageFormatARGB32     = 0x1,  /* a8r8g8b8 */
   NPImageFormatRGB24      = 0x2,  /* x8r8g8b8 */
   NPImageFormatRGB16_565  = 0x4   /* r5g6b5   */
   /* can be extended */
 } NPImageFormat;
 
 typedef struct _NPImageData
 {
   /* Image data parameters */
   char*         data;       /* image pointer */
   int32_t       stride;     /* Stride of data image pointer */
   NPImageFormat format;     /* Format of image pointer */
   NPSize        dataSize;   /* Data buffer size */
   /* Plugin window area rectangle relative to 0,0 beginning of buffer image*/
   NPRect        pluginArea; 
   /* Clip rectangle relative to pluginArea rectangle*/
   NPRect        clip;
 } NPImageData;

NPImageFormat Type Negotiation

  • NPNVSupportedImageFormats (NPNVariable = ?)
  • NPPVImageFormat (NPPVariable = ?)

Negotiating the image format will work similarly to drawing and event model negotiation, but the value of NPNVsupportsImageFormat will be a bitmap of supported types. Based on the browser's supported formats, the plugin should select a subset which it can handle. The format for any given event will be specified in the event, and will be from the plugin's supported subset.

 NPImageFormat supportedFormats;
 browserFuncs->getvalue(instance, NPNVsupportsImageFormat, &supportedFormats);
 ...
 browserFuncs->setvalue(instance, NPPVImageFormat, (void*)supportedSubset);