/**************************************************************
 * 
 * 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_text_VertOrientationFormat_idl__ 
#define __com_sun_star_text_VertOrientationFormat_idl__ 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module text { 
 
//============================================================================= 
 
// DocMerge from xml: struct com::sun::star::text::VertOrientationFormat
/** describes the vertical orientation of an object.
	
	
	
	<p>If <code>VerticalOrientation == VERT_NONE</code>, then the value "YPos"
	describes the distance from the top of the context. Otherwise "YPos"
	is ignored.
	</p>
 */
published struct VertOrientationFormat
{
	// DocMerge from xml: field com::sun::star::text::VertOrientationFormat::YPos
	/** contains the distance from top. Only valid if the property
		VerticalOrientation contains the value VERT_NONE.
	 */
	long YPos; 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: field com::sun::star::text::VertOrientationFormat::VerticalOrientation
	/** determines the vertical alignment of an object.
		The values refer to com::sun::star::VertOrientation.
	 */
	short VerticalOrientation; 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: field com::sun::star::text::VertOrientationFormat::VerticalRelation
	/** determines the reference position of the vertical alignment.@see com::sun::star::text::RelOrientation
	 */
	short VerticalRelation; 
 
}; 
 
//============================================================================= 
 
}; }; }; }; 
 

#endif 
