/**************************************************************
 *
 * 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 OpenOffice 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
