/**************************************************************
 *
 * 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_awt_XGraphics_idl__
#define __com_sun_star_awt_XGraphics_idl__

#include <com/sun/star/uno/XInterface.idl>
#include <com/sun/star/util/Color.idl>
#include <com/sun/star/awt/SimpleFontMetric.idl>
#include <com/sun/star/awt/FontDescriptor.idl>
#include <com/sun/star/awt/RasterOperation.idl>
#include <com/sun/star/awt/Gradient.idl>
#include <com/sun/star/awt/Rectangle.idl>
#include <com/sun/star/graphic/XGraphic.idl>

module com {  module sun {  module star {  module awt {

published interface XRegion;
published interface XDisplayBitmap;
published interface XFont;
published interface XDevice;

/** provides the basic output operation of a device.
 */
published interface XGraphics: com::sun::star::uno::XInterface
{
    /** the device of this graphics
     */
    [attribute, readonly] XDevice Device;

    /** the text color used by text operations.
     */
    [attribute] com::sun::star::util::Color TextColor;

    /** the fill color used by text operations.
     */
    [attribute] com::sun::star::util::Color TextFillColor;

    /** the line color.
     */
    [attribute] com::sun::star::util::Color LineColor;

    /** the fill color.
     */
    [attribute] com::sun::star::util::Color FillColor;

    /** the raster operation.

        <p>If the device does not support raster operations,
        this attribute is ignored.</p>
     */
    [attribute] RasterOperation RasterOp;

    /** the font used by text operations.
     */
    [attribute] XFont Font;

    /** the font metric of the current font.
     */
    [attribute, readonly] SimpleFontMetric FontMetric;

    /** creates a new font and sets the font.
     */
    [oneway] void selectFont( [in] FontDescriptor aDescription );

    /** sets the clip region to specified clipping.
     */
    [oneway] void setClipRegion( [in] XRegion Clipping );
 
    /** builds the intersection with the current region.
     */
    [oneway] void intersectClipRegion( [in] XRegion xClipping );

    /** saves all current settings (Font, TextColor, TextFillColor,
        LineColor, FillColor, RasterOp, ClipRegion).
     */
    [oneway] void push();

    /** restores all previous saved settings.
     */
    [oneway] void pop();

    /** clears the given rectangle on the device

        @since Apache OpenOffice 4.0
     */
    [oneway] void clear( [in] Rectangle aRect );

    /** copies a rectangle of pixels from another device into this one.
     */
    [oneway] void copy( [in] XDevice xSource,
             [in] long nSourceX,
             [in] long nSourceY,
             [in] long nSourceWidth,
             [in] long nSourceHeight,
             [in] long nDestX,
             [in] long nDestY,
             [in] long nDestWidth,
             [in] long nDestHeight );

    /** draws a part of the specified bitmap to the output device.
     */
    [oneway] void draw( [in] XDisplayBitmap xBitmapHandle,
             [in] long SourceX,
             [in] long SourceY,
             [in] long SourceWidth,
             [in] long SourceHeight,
             [in] long DestX,
             [in] long DestY,
             [in] long DestWidth,
             [in] long DestHeight );

    /** sets a single pixel in the output device.
     */
    [oneway] void drawPixel( [in] long X,
             [in] long Y );

    /** draws a line in the output device.
     */
    [oneway] void drawLine( [in] long X1,
             [in] long Y1,
             [in] long X2,
             [in] long Y2 );

    /** draws a rectangle in the output device.
     */
    [oneway] void drawRect( [in] long X,
             [in] long Y,
             [in] long Width,
             [in] long Height );

    /** draws a rectangle with rounded corners in the output device.
     */
    [oneway] void drawRoundedRect( [in] long X,
             [in] long Y,
             [in] long Width,
             [in] long Height,
             [in] long nHorzRound,
             [in] long nVertRound );

    /** draws multiple lines in the output device at once.
     */
    [oneway] void drawPolyLine( [in] sequence<long> DataX,
             [in] sequence<long> DataY );

    /** draws a polygon line in the output device.
     */
    [oneway] void drawPolygon( [in] sequence<long> DataX,
             [in] sequence<long> DataY );

    /** draws multiple polygons in the output device at once.
     */
    [oneway] void drawPolyPolygon( [in] sequence< sequence<long> > DataX,
             [in] sequence< sequence<long> > DataY );

    /** draws an ellipse in the output device.
     */
    [oneway] void drawEllipse( [in] long X,
             [in] long Y,
             [in] long Width,
             [in] long Height );

    /** draws an arc (part of a circle) in the output device.
     */
    [oneway] void drawArc( [in] long X,
             [in] long Y,
             [in] long Width,
             [in] long Height,
             [in] long X1,
             [in] long Y1,
             [in] long X2,
             [in] long Y2 );

    /** draws a circular area in the output device.
     */
    [oneway] void drawPie( [in] long X,
             [in] long Y,
             [in] long Width,
             [in] long Height,
             [in] long X1,
             [in] long Y1,
             [in] long X2,
             [in] long Y2 );

    /** draws a chord of a circular area in the output device.

        <p>A chord is a segment of a circle. You get two chords from a
        circle if you intersect the circle with a straight line
        joining two points on the circle.</p>
     */
    [oneway] void drawChord( [in] long nX,
             [in] long nY,
             [in] long nWidth,
             [in] long nHeight,
             [in] long nX1,
             [in] long nY1,
             [in] long nX2,
             [in] long nY2 );

    /** draws a color dispersion in the output device.
     */
    [oneway] void drawGradient( [in] long nX,
             [in] long nY,
             [in] long nWidth,
             [in] long Height,
             [in] Gradient aGradient );

    /** draws text in the output device.
     */
    [oneway] void drawText( [in] long X,
             [in] long Y,
             [in] string Text );

    /** draws texts in the output device using an explicit kerning table.
     */
    [oneway] void drawTextArray( [in] long X,
             [in] long Y,
             [in] string Text,
             [in] sequence<long> Longs );

    /** draws a <type scope="com::sun::star::graphic">XGraphic</type>
        in the output device.

        <p>Note that some devices may not support this operation.</p>

        @since Apache OpenOffice 4.0

        @param  nX
            the X coordinate on the device where the graphic will be drawn

        @param  nY
            the Y coordinate on the device where the graphic will be drawn

        @param  nWidth
            the width of the region on the device

        @param  nHeight
            the height of the region on the device

        @param  nStyle
            the style used to draw the image.
            See <type scope="com::sun::star::awt">ImageDrawMode</type>.

        @param  aGraphic
            the <type scope="com::sun::star::graphic">XGraphic</type>
            to be drawn onto the device
     */
    [oneway] void drawImage( [in] long nX,
                             [in] long nY,
                             [in] long nWidth,
                             [in] long nHeight,
                             [in] short nStyle,
                             [in] ::com::sun::star::graphic::XGraphic aGraphic );

};

}; }; }; };

#endif