/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */
#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>


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.
     */
    void setFont( [in] XFont xNewFont );

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

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

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

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

    /** sets the fill color.
     */
    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>
     */
    void setRasterOp( [in] RasterOperation ROP );

    /** sets the clip region to specified clipping.
     */
    void setClipRegion( [in] XRegion Clipping );

    /** builds the intersection with the current region.
     */
    void intersectClipRegion( [in] XRegion xClipping );

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

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

    /** copies a rectangle of pixels from another device into this one.
     */
    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.
     */
    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.
     */
    void drawPixel( [in] long X,
             [in] long Y );

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

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

    /** draws a rectangle with rounded corners in the output device.
     */
    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.
     */
    void drawPolyLine( [in] sequence<long> DataX,
             [in] sequence<long> DataY );

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

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

    /** draws an ellipse in the output device.
     */
    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.
     */
    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.
     */
    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>
     */
    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.
     */
    void drawGradient( [in] long nX,
             [in] long nY,
             [in] long nWidth,
             [in] long Height,
             [in] Gradient aGradient );

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

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


}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
