/** -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * 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 the Initial Developer are Copyright (C) 2001 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Stuart Parmenter * Chris Saari * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsISupports.idl" #include "gfxtypes.idl" #include "gfxIFormats.idl" %{C++ #include "nsRect.h" %} native nsRectRef(nsIntRect &); /** * gfxIImageFrame interface * * All x, y, width, height values are in pixels. * * @author Tim Rowley * @author Stuart Parmenter * @version 0.1 */ [scriptable, uuid(f6d00ee7-defc-4101-b2dc-e72cf4c37c3c)] 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 PRInt32 aX, in PRInt32 aY, in PRInt32 aWidth, in PRInt32 aHeight, in gfx_format aFormat, in gfx_depth aDepth); /** * TRUE by default. When set to FALSE, you will no longer be able to make any modifications * to the data of the image. Any attempts will fail. */ attribute boolean mutable; /** * The x-offset of the image. */ readonly attribute PRInt32 x; /** * The y-offset of the image. */ readonly attribute PRInt32 y; /** * The width of the image. */ readonly attribute PRInt32 width; /** * The height of the image. */ readonly attribute PRInt32 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; /** * returns whether the image requires the background to be painted */ readonly attribute boolean needsBackground; /* 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(); /* GIF Specific methods. These should be in a different class or interface. */ /** * Blit this frame into another frame. Used for GIF animation compositing */ void drawTo(in gfxIImageFrame aDst, in PRInt32 aDX, in PRInt32 aDY, in PRInt32 aDWidth, in PRInt32 aDHeight); /** * 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; };