/* -*- 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_drawing_framework_XPaneBorderPainter_idl__
#define __com_sun_star_drawing_framework_XPaneBorderPainter_idl__

#include <com/sun/star/awt/Rectangle.idl>
#include <com/sun/star/awt/Point.idl>
#include <com/sun/star/rendering/XCanvas.idl>
#include <com/sun/star/drawing/framework/BorderType.idl>

module com { module sun { module star { module drawing { module framework {

/** Paint the border around a rectangular region, typically a pane.

    <p>Calling objects have to be able to derive inner bounding boxes of the
    border from the outer ones and inner ones from outer ones.  This
    conversion and the painting of the border involves three rectangles.
    The inner and outer bounding box of the border.  This is a logical
    bounding box which the paint methods may paint over.  The center box is
    the third rectangle.  This is the actual border between outer and inner
    background color or bitmap and it is used for placing the bitmaps that are used
    paint the border.  The inner sides and corners are places relative to
    this center box, i.e. when not further offsets are given then the upper
    left corner bitmap is painted with its lower right at the upper left of
    the center box.</p>
*/
interface XPaneBorderPainter
{
    /** Enlarge the given rectangle by the size of the specified part of the
        border.  This method can be used to convert an inner bounding box
        into the center box or the outer bounding box.
        @param sPaneBorderStyleName
            The pane style defines the sizes of the border.
        @param aRectangle
            This rectangle will be converted into a larger one.  This should
            be the center box or the inner bounding box of the border.
        @param eBorderType
            The part of the border to add to the given rectangle.
            Use INNER_BORDER to convert an inner bounding box into the
            center box or TOTAL_BORDER to convert it into the outer bounding
            box.  OUTER_BORDER can be used to convert the center box into
            the outer bounding box.
    */
    ::com::sun::star::awt::Rectangle addBorder (
        [in] string sPaneBorderStyleName,
        [in] ::com::sun::star::awt::Rectangle aRectangle,
        [in] BorderType eBorderType);

    /** Shrink the given rectangle by the size of the specified part of the
        border.  This method can be used to convert an outer bounding box
        into the center box or the inner bounding box.
        @param sPaneBorderStyleName
            The pane style defines the sizes of the border.
        @param aRectangle
            This rectangle will be converted into a smaller one that lies
            inside it.  It should be the center box or the outer bounding
            box of the border.
        @param eBorderType
            The part of the border to remove from the given rectangle.
            Use OUTER_BORDER to convert an outer bounding box into the
            center box or TOTAL_BORDER to convert it into the inner bounding
            box.  INNER_BORDER can be used to convert the center box into
            the inner bounding box.
    */
    ::com::sun::star::awt::Rectangle removeBorder (
        [in] string sPaneBorderStyleName,
        [in] ::com::sun::star::awt::Rectangle aRectangle,
        [in] BorderType eBorderType);

    /** Paint the border around a pane.
        @param sPaneBorderStyleName
            The pane style to use for painting the border.
        @param xCanvas
            The canvas onto which the border is painted.
        @param aOuterBorderRectangle
            The outer bounding box of the border.  Use addBorder to convert
            the bounding box of a pane (the inner bounding box of the
            border) into this outer bounding box of the border.
        @param aRepaintArea
            The area in which the border has to be repainted.  The clip
            rectangle.
        @param sTitle
            The pane title.  Supply an empty string for panes without
            title.  It is the responsibility of the caller to supply a title
            only for pane border styles that support a title.
    */
    void paintBorder (
        [in] string sPaneBorderStyleName,
        [in] ::com::sun::star::rendering::XCanvas xCanvas,
        [in] ::com::sun::star::awt::Rectangle aOuterBorderRectangle,
        [in] ::com::sun::star::awt::Rectangle aRepaintArea,
        [in] string sTitle);

    /** Paint the border around a pane where the border includes a call out
        that is anchored at the given point.  Most arguments have the same
        meaning as in the paintBorder().
        @param aCalloutAnchor
            The anchor point of the call out.  It is usually located outside
            the border.
    */
    void paintBorderWithCallout (
        [in] string sPaneBorderStyleName,
        [in] ::com::sun::star::rendering::XCanvas xCanvas,
        [in] ::com::sun::star::awt::Rectangle aOuterBorderRectangle,
        [in] ::com::sun::star::awt::Rectangle aRepaintArea,
        [in] string sTitle,
        [in] ::com::sun::star::awt::Point aCalloutAnchor);

    /** Return the offset of a call out anchor with respect to the outer
        border.  This value is used when the call out is realized by a fixed
        bitmap in order to determine the size and/or location of the outer
        border for a given call out.
    */
    ::com::sun::star::awt::Point getCalloutOffset (
        [in] string sPaneBorderStyleName);
};

}; }; }; }; }; // ::com::sun::star::drawing::framework

#endif

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