/*
 *	DSFML - SFML Library wrapper for the D programming language.
 *	Copyright (C) 2010 Andreas Hollandt
 *
 *	This software is provided 'as-is', without any express or
 *	implied warranty. In no event will the authors be held
 *	liable for any damages arising from the use of this software.
 *
 *	Permission is granted to anyone to use this software for any purpose,
 *	including commercial applications, and to alter it and redistribute
 *	it freely, subject to the following restrictions:
 *
 *	1.  The origin of this software must not be misrepresented;
 *		you must not claim that you wrote the original software.
 *		If you use this software in a product, an acknowledgment
 *		in the product documentation would be appreciated but
 *		is not required.
 *
 *	2.  Altered source versions must be plainly marked as such,
 *		and must not be misrepresented as being the original software.
 *
 *	3.  This notice may not be removed or altered from any
 *		source distribution.
 */

module dsfml.graphics.irendertarget;

import dsfml.system.vector2;
import dsfml.graphics.idrawable;
import dsfml.graphics.rect;
import dsfml.graphics.shader;
import dsfml.graphics.view;
import dsfml.graphics.color;

interface IRenderTarget
{
	/**
	 * 	Clear the entire target with a single color
	 *
	 * 	\param color : Color to use to clear the render target
	 *
	 */
	void clear(Color color = Color());

	/**
	 * 	Draw something into the target
	 *
	 *	\param object : Object to draw
	 *
	 */
	void draw(IDrawable object);

	/**
	 *	Draw something into the target with a shader
	 *
	 * 	\param object : Object to draw
	 * 	\param shader : Shader to apply
	 *
	 */
	void draw(IDrawable object, Shader shader);

	/**
	 * 	Convert a point in target coordinates into view coordinates
	 *
	 * 	\param x :	X coordinate of the point to convert, relative to the target
	 * 	\param y :	Y coordinate of the point to convert, relative to the target
	 * 	\param view : Target view to convert the point to, null to use the currently associated view
	 *
	 * 	\return Converted point
	 *
	 */
	Vector2f convertCoords(uint x, uint y, View view = null);

	/**
	 * 	Save the current OpenGL render states and matrices
	 *
	 */
	void saveGLStates();

	/**
	 * 	Restore the previously saved OpenGL render states and matrices
	 *
	 */
	void restoreGLStates();

@property
{
	/**
	 * 	Get the width of the rendering region of the target
	 *
	 * 	\return Width in pixels
	 *
	 */
	uint width();

	/**
	 * 	Get the height of the rendering region of the target
	 *
	 * 	\return Height in pixels
	 *
	 */
	uint height();

	/**
	 * 	Change the current active view.
	 *
	 * 	\param view : New view to use (pass GetDefaultView() to set the default view)
	 *
	 */
	void view(View view);

	/**
	 * 	Get the current view
	 *
	 * 	\return Current view active in the window
	 *
	 */
	View view();

	/**
	 * 	Get the default view of the window
	 *
	 * 	\return Default view
	 *
	 */
	View defaultView();

	/**
	 * 	Get the viewport of a view applied to this target
	 *
	 * 	\param view Target view
	 *
	 * 	\return Viewport rectangle, expressed in pixels in the current target
	 *
	 */
	IntRect viewport(View view);
}
}