/**************************************************************
 * 
 * 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_graphic_GraphicRendererVCL_idl
#define com_sun_star_graphic_GraphicRendererVCL_idl

#include <com/sun/star/beans/XPropertySet.idl>
#include <com/sun/star/graphic/XGraphicRenderer.idl>
#include <com/sun/star/awt/Rectangle.idl>

module com { module sun { module star { module graphic
{

/** Service that describes the necessary interfaces and properties
	to render a graphic container of <type>XGraphic</type> type
	
	<p>To render a <type>XGraphic</type> container, just create an 
	instance of this service, set the appropriate properties and use
	the	<type>XGraphicRenderer</type> interface to initiate the rendering 
	process itself</p>
 */
service GraphicRendererVCL
{
	/** Interface to initiate the rendering process
	*/
	interface ::com::sun::star::graphic::XGraphicRenderer;

    /** The property interface by which the properties of all
        supported services are exchanged
    */
    interface ::com::sun::star::beans::XPropertySet;

	/** Holds the device onto which the <type>XGraphic</type>
		container should be rendered
		
		<p>In case of using VCL Devices, this property should
		hold a <type scope="com::sun::star::awt">XDevice</type>
		interface</p>
	*/
	[property] any Device;
	
	/** Specifies the destination rectangle, into which the graphic
	content is to be rendered onto the device
	*/
	[property] ::com::sun::star::awt::Rectangle DestinationRect;

	
	/** Additional properties for rendering, unspecified at the moment
	*/
	[optional, property] any RenderData;
};

} ; } ; } ; } ; 

#endif
