/**************************************************************
 * 
 * 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_XPolyPolygon2D_idl__
#define __com_sun_star_rendering_XPolyPolygon2D_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif
#ifndef __com_sun_star_lang_IndexOutOfBoundsException_idl__
#include <com/sun/star/lang/IndexOutOfBoundsException.idl>
#endif
#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
#include <com/sun/star/lang/IllegalArgumentException.idl>
#endif
#ifndef __com_sun_star_rendering_FillRule_idl__
#include <com/sun/star/rendering/FillRule.idl>
#endif
#ifndef __com_sun_star_geometry_RealPoint2D_idl__
#include <com/sun/star/geometry/RealPoint2D.idl>
#endif

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

/** Generic interface for poly-polygons in 2D.

    @since OpenOffice 2.0
 */
published interface XPolyPolygon2D : ::com::sun::star::uno::XInterface
{
    /** Add the specified poly-polygon at the given position.

        One can do symbolic path construction with this method. The
        poly-polygons added by this method are not joined in the sense
        that they participate in mutual fill rule calculations like
        the polygons inside a single poly-polygon do. When rendering
        such a poly-polygon without transparency, it will look like the
        constituing poly-polygons rendered separately on top of
        another. Alas, when rendering with transparency, separate
        rendering will combine the alpha of overlapping areas, whereas
        addPolyPolygon results in constant alpha, regardless how many
        internal poly-polygons overlap at a single place.

        @param position
        The poly-polygon will be added at the given position, i.e. the
        upper, left edge of the referenced poly-polygon will be at
        this position relative to the target poly-polygon.

        @param polyPolygon
        The poly-polygon to add. Note that the content of this
        poly-polygon is copied, later changes to polyPolygon will have
        no effect on the poly-polygon it was added to.

        @throws a
        <type>com::sun::star::lang::IllegalArgumentException</type>,
        if the XPolyPolygon2D parameter does not support one of the
        data-providing derivative interfaces
        (<type>XBezierPolyPolygon2D</type>,
        <type>XLinePolyPolygon2D</type>).
     */
    void		addPolyPolygon( [in] ::com::sun::star::geometry::RealPoint2D position, [in] XPolyPolygon2D polyPolygon )
        raises (com::sun::star::lang::IllegalArgumentException);

    //-------------------------------------------------------------------------

    /** Query number of polygons inside this poly-polygon
     */
    long		getNumberOfPolygons();

    //-------------------------------------------------------------------------

    /** Query number of points inside given polygon

        @param polygon
        The index of the polygon to query the number of points
        for. Must be in the range [0,getNumberOfPolygons()-1].
     */
    long		getNumberOfPolygonPoints( [in] long polygon )
        raises (com::sun::star::lang::IndexOutOfBoundsException);

    //-------------------------------------------------------------------------

    /** Query the rule used to determine inside and outside of the
        poly-polygon.
     */
    FillRule	getFillRule();

    //-------------------------------------------------------------------------

    /** Set the rule used to determine inside and outside of the
        poly-polygon.
     */
    void		setFillRule( [in] FillRule fillRule );

    //-------------------------------------------------------------------------

    /** Query whether the specified polygon outline is closed.
     */
    boolean		isClosed( [in] long index )
        raises (com::sun::star::lang::IndexOutOfBoundsException);

    //-------------------------------------------------------------------------

    /** Set the close state of the specified polygon outline. Use -1
        as the index to affect all polygons of this poly-polygon.
     */
    void		setClosed( [in] long index, [in] boolean closedState )
        raises (com::sun::star::lang::IndexOutOfBoundsException);
};

}; }; }; };

#endif
