/** -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 2001 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * Stuart Parmenter * Chris Saari */ #include "nsISupports.idl" #include "gfxtypes.idl" #include "gfxIFormats.idl" %{C++ #include "nsRect.h" %} interface gfxIImageFrame; native nsRectRef(nsRect &); /** * gfxIImageFrame interface * * @author Tim Rowley * @author Stuart Parmenter * @version 0.1 */ [scriptable, uuid(51cc27a8-1dd2-11b2-a1aa-dad33ab193b4)] interface gfxIImageFrame : nsISupports { /** * Create a new \a aWidth x \a aHeight sized image. * * @param aX The x-offset from the origin of the gfxIImageContainer parent. * @param aY The y-offset from the origin of the gfxIImageContainer parent. * @param aWidth The width of the image to create. * @param aHeight The height of the image to create. * @param aFormat the width of the image to create. * * @note The data of a new image is unspecified (Whats the word i'm looking for here?). */ void init(in nscoord aX, in nscoord aY, in nscoord aWidth, in nscoord aHeight, in gfx_format aFormat); /** * Blit this frame into another frame. Used for GIF animation compositing * @param mask If true, unlock the mask bits, else unlock image pixels. */ void drawTo(in gfxIImageFrame aDst, in nscoord aDX, in nscoord aDY, in nscoord aDWidth, in nscoord aDHeight); /** * The x-offset of the image. */ readonly attribute nscoord x; /** * The y-offset of the image. */ readonly attribute nscoord y; /** * The width of the image. */ readonly attribute nscoord width; /** * The height of the image. */ readonly attribute nscoord height; /** * The rectangle this frame ocupies. * @param rect this is really an out parameter. */ [noscript] void getRect(in nsRectRef rect); /** * The image data format the image was created with. * @see gfxIFormats */ readonly attribute gfx_format format; /* data accessors */ readonly attribute unsigned long imageBytesPerRow; /** * returns the number of bytes allocated for the image */ readonly attribute unsigned long imageDataLength; // XXX do we copy here? lets not... void getImageData([array, size_is(length)] out PRUint8 bits, out unsigned long length); /** * Sets \a length bytes of \a data in this object. * @param offset The offset from the first pixel in bytes. To set * data beginning with the first (top left) pixel in the image, \a offset * should be 0; to set data beginning with, for example, the sixth pixel in * the first row of a RGBA32 image, the offset should be 20. * @attension should we use PRUint32 instead? */ void setImageData([array, size_is(length), const] in PRUint8 data, in unsigned long length, in long offset); /** * Lock image pixels before addressing the data directly */ void lockImageData(); /** * Unlock image pixels */ void unlockImageData(); /* alpha stuff.. used for _A1 and _A8 formated images */ readonly attribute unsigned long alphaBytesPerRow; /** * returns the number of bytes allocated for the alpha mask */ readonly attribute unsigned long alphaDataLength; // XXX do we copy here? lets not... void getAlphaData([array, size_is(length)] out PRUint8 bits, out unsigned long length); /** * Sets \a length bytes of \a data in this object. */ void setAlphaData([array, size_is(length), const] in PRUint8 data, in unsigned long length, in long offset); /** * Lock alpha pixels before addressing the data directly */ void lockAlphaData(); /** * Unlock alpha pixels */ void unlockAlphaData(); /** * Represents the number of milliseconds until the next frame should be displayed. * @note -1 means that this frame should be displayed forever. */ attribute long timeout; /* frame disposal method, used only by GIFs. Should probably subclass image frame * and image container for GIFs special needs, but for simplicity it is here for the * moment */ attribute long frameDisposalMethod; /* frame background color * GIF specific, should be in a GIF specific frame */ attribute gfx_color backgroundColor; /* frame transparent color * GIF specific, should be in a GIF specific frame */ attribute gfx_color transparentColor; };