/**************************************************************
 * 
 * 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_Caret_idl__
#define __com_sun_star_rendering_Caret_idl__

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

/** This structure contains the caret information.<p>

    This structure is used from the <type>XTextLayout</type> interface
    to transport information regarding a text caret.<p>

    @since OOo 2.0
 */
published struct Caret
{
    /** This contains the main caret index.<p>

        The main caret index corresponds to the insert position when
        inserting text in the layout's main text direction.
     */
    long        MainCaretIndex;

    /** This contains the secondary caret index.<p>

        The secondary caret index, when different from the main caret
        index, corresponds to the insert position when inserting text
        at a direction change opposite to the layout's main text
        direction.
     */
    long        SecondaryCaretIndex;

    /** The angle of the caret.<p>

        This member contains the rotation angle of the caret in
        degrees, with 0 denoting an unrotated caret (the unrotated
        caret orientation depends on the writing mode, horizontally or
        vertically). The rotation angle is positive for
        counter-clockwise rotations.<p>
     */
    double		CaretAngle;
};

}; }; }; };

#endif
