/**************************************************************
 * 
 * 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_drawing_GluePoint_idl__ 
#define __com_sun_star_drawing_GluePoint_idl__ 
 
#ifndef __com_sun_star_awt_Point_idl__ 
#include <com/sun/star/awt/Point.idl> 
#endif 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module drawing {  
 
//============================================================================= 
 
// DocMerge from xml: struct com::sun::star::drawing::GluePoint
/** A <type>GluePoint</type> could be attached to a shape or to a page.
	
	
	
	<p>If a <type>GluePoint</type> is attached to a shape, it is moved when
	the shape moves.
	The ends of connectors can be attached to <type>GluePoint</type>.</p>

	@deprecated
	@see GluePoint2
 */
published struct GluePoint
{
	// DocMerge from xml: field com::sun::star::drawing::GluePoint::Position
	/** This is the position of this <type>GluePoint</type>.
	 */
	com::sun::star::awt::Point Position; 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: field com::sun::star::drawing::GluePoint::EscapeDirection
	/** This is the direction in which the connector line leaves the
		<type>GluePoint</type>.
	 */
	short EscapeDirection; 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: field com::sun::star::drawing::GluePoint::PositionAbsolute
	/** If this is <TRUE/>, then the position of this <type>GluePoint</type> is
		absolute on	a page and is not relative to a shape.
	 */
	boolean PositionAbsolute; 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: field com::sun::star::drawing::GluePoint::Alignment
	/** The alignment of a <code>GluePoint</code> defines how the position of
		the point is affected by resizing the parent <code>Shape</code>.
	 */
	short Alignment; 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 

