/**************************************************************
 * 
 * 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_GraphicObjectShape_idl__ 
#define __com_sun_star_drawing_GraphicObjectShape_idl__ 
 
#ifndef __com_sun_star_drawing_Shape_idl__ 
#include <com/sun/star/drawing/Shape.idl> 
#endif 
  
#ifndef __com_sun_star_drawing_Text_idl__ 
#include <com/sun/star/drawing/Text.idl> 
#endif 
 
#ifndef __com_sun_star_drawing_ShadowProperties_idl__ 
#include <com/sun/star/drawing/ShadowProperties.idl> 
#endif 
 
#ifndef __com_sun_star_drawing_RotationDescriptor_idl__ 
#include <com/sun/star/drawing/RotationDescriptor.idl> 
#endif 
 
#ifndef __com_sun_star_awt_XBitmap_idl__
#include <com/sun/star/awt/XBitmap.idl>
#endif

#ifndef com_sun_star_graphic_XGraphic_idl
#include <com/sun/star/graphic/XGraphic.idl>
#endif
 
#ifndef __com_sun_star_drawing_ColorMode_idl__
#include <com/sun/star/drawing/ColorMode.idl>
#endif

#ifndef __com_sun_star_container_XIndexContainer_idl__
#include <com/sun/star/container/XIndexContainer.idl>
#endif

//============================================================================= 
 
 module com {  module sun {  module star {  module drawing {  
 
//============================================================================= 
 
/** This service is for a graphic shape.
 */
published service GraphicObjectShape
{ 
	service com::sun::star::drawing::Shape; 
	
	service com::sun::star::drawing::Text; 
	
	service com::sun::star::drawing::ShadowProperties; 
	
	service com::sun::star::drawing::RotationDescriptor; 
 
	//-------------------------------------------------------------------------
	/** This is an url to the source bitmap for this graphic shape.
	*/
	[property] string GraphicURL;

	//-------------------------------------------------------------------------
	/** This is an url to the stream ('in document' or linked graphic) for this graphic shape.
	*/
	[property] string GraphicStreamURL;

	//-------------------------------------------------------------------------
	/** Deprecated. Use graphic property instead!
        This is the bitmap that represents this graphic shape.
	*/
	[optional, property] com::sun::star::awt::XBitmap GraphicObjectFillBitmap;

	//-------------------------------------------------------------------------
	/** If this property is set, the luminance of this graphic shape is adjusted
	    by the given signed percent value.
	*/
	[property] short AdjustLuminance;

	//-------------------------------------------------------------------------
	/** If this property is set, the contrast of this graphic shape is adjusted
	    by the given signed percent value.
	*/
	[property] short AdjustContrast;

	//-------------------------------------------------------------------------
	/** If this property is set, the red channel of this graphic shape is
	    adjusted by the given signed percent value.
	*/
	[property] short AdjustRed;

	//-------------------------------------------------------------------------
	/** If this property is set, the green channel of this graphic shape is
	    adjusted by the given signed percent value.
	*/
	[property] short AdjustGreen;

	//-------------------------------------------------------------------------
	/** If this property is set, the blue channel of this graphic shape is
	    adjusted by the given signed percent value.
	*/
	[property] short AdjustBlue;

	//-------------------------------------------------------------------------
	/** If this property is set, the gama value of this graphic shape is
	    adjusted by the given value.
	*/
	[property] double Gamma;

	//-------------------------------------------------------------------------
	/** If this property is set, the transparency value of this graphic shape is
	    adjusted by the given unsigned percent value.
		100% is fully transparent, 0 % is fully opaque.
	*/
	[property] short Transparency;

	//-------------------------------------------------------------------------
	/** This property selects the color mode that is used for rendering.
	*/
	[property] ColorMode GraphicColorMode;

	//-------------------------------------------------------------------------
	/** This property contains a image map for this graphic.
		@see com::sun::star::image::ImageMap
	*/
	[optional, property] com::sun::star::container::XIndexContainer ImageMap;

	//-------------------------------------------------------------------------
	/** This is the graphic that represents this graphic shape
	*/
	[optional, property] com::sun::star::graphic::XGraphic Graphic;
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
