/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_rendering_FloatingPointBitmapLayout_idl__
#define __com_sun_star_rendering_FloatingPointBitmapLayout_idl__

#ifndef __com_sun_star_rendering_FloatingPointBitmapFormat_idl__
#include <com/sun/star/rendering/FloatingPointBitmapFormat.idl>
#endif
#ifndef __com_sun_star_rendering_XColorSpace_idl__
#include <com/sun/star/rendering/XColorSpace.idl>
#endif

module com { module sun { module star { module rendering {

/** This structure describes the memory layout of a bitmap having
    floating point color channels.<p>

    This structure collects all necessary information to describe the
    memory layout of a bitmap having floating point color channels<p>

    @since OOo 2.0
 */
struct FloatingPointBitmapLayout
{
    /** Number of scanlines for this bitmap.

    	This value must not be negative
     */
    long				ScanLines;

    /** Number of data bytes per scanline.

    	This value must not be negative
     */
    long 				ScanLineBytes;

    /** Byte offset between the start of two consecutive scanlines.

    	This value is permitted to be negative, denoting a bitmap
    	whose content is flipped at the x axis.
     */
    long				ScanLineStride;

    /** Byte offset between the start of two consecutive planes.

    	This value is permitted to be negative. If this value is zero,
    	the bitmap is assumed to be in chunky format, otherwise it is
    	assumed to be planar.  The difference between chunky and
    	planar layout lies in the way how color channels are
    	interleaved. For a chunky format, all channel data for a
    	single pixel lies consecutively in memory. For a planar
    	layout, the first channel of all pixel is stored consecutive,
    	followed by the second channel, and so forth.<p>
     */
    long				PlaneStride;

    // TODO(F3): Need some specializations of XColorSpace for float
    // and half float formats. This maybe translates to the bitmap
    // layout as well, leading to separate structs for double, float
    // and half float formats, because of the ColorSpace member. Or
    // leave it as it is, forcing the client to query for derived
    // interfaces...

    /// Color space the bitmap colors shall be interpreted within.
    XColorSpace			ColorSpace;

    /** Number of color components per pixel.

    	This value must not be negative
     */
    long			    NumComponents;

    /** Endianness of the pixel values.

    	This value must be one of the <type>Endianness</type> constants
     */
    byte			    Endianness;

    /** Format type of this bitmap.<p>

    	This value must be one of the
    	<type>FloatingPointBitmapFormat</type> constants.<p>
    */
    byte				Format;
};

}; }; }; };

#endif
