/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/
#ifndef __com_sun_star_awt_XGraphics_idl__
#define __com_sun_star_awt_XGraphics_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_util_Color_idl__
#include <com/sun/star/util/Color.idl>
#endif

#ifndef __com_sun_star_awt_SimpleFontMetric_idl__
#include <com/sun/star/awt/SimpleFontMetric.idl>
#endif

#ifndef __com_sun_star_awt_FontDescriptor_idl__
#include <com/sun/star/awt/FontDescriptor.idl>
#endif

#ifndef __com_sun_star_awt_RasterOperation_idl__
#include <com/sun/star/awt/RasterOperation.idl>
#endif

#ifndef __com_sun_star_awt_Gradient_idl__
#include <com/sun/star/awt/Gradient.idl>
#endif

//=============================================================================

 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
{
    //-------------------------------------------------------------------------

    /** returns the device of this graphics.
     */
    XDevice getDevice();

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

    /** returns the font metric of the current font.
     */
    SimpleFontMetric getFontMetric();

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

    /** sets the font used by text operations.
     */
    [oneway] void setFont( [in] XFont xNewFont );

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

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

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

    /** sets the text color used by text operations.
     */
    [oneway] void setTextColor( [in] com::sun::star::util::Color nColor );

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

    /** sets the fill color used by text operations.
     */
    [oneway] void setTextFillColor( [in] com::sun::star::util::Color nColor );

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

    /** sets the line color.
     */
    [oneway] void setLineColor( [in] com::sun::star::util::Color nColor );

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

    /** sets the fill color.
     */
    [oneway] void setFillColor( [in] com::sun::star::util::Color nColor );

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

    /** sets the raster operation.

        <p>If the device does not support raster operations
        then this call is ignored.</p>
     */
    [oneway] void setRasterOp( [in] RasterOperation ROP );

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

    /** 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();

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

    /** 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 );

};

//=============================================================================

}; }; }; };

#endif
