#ifndef _CGFX_HPP_
#define _CGFX_HPP_

/*** SDL Header Files ***/
#include <SDL.h>
#include <SDL2_rotozoom.h>

/*** DLL Header File ***/
#include "dllExport.h"

/*** Custom Header Files ***/
#include "../UtilityEngine/cString.hpp"

using UtilityEngine::cString;

namespace EXPORT_FROM_MYDLL FXEngine {
	/* Singleton */
	class cGFX
	{
	private:
		cGFX();
		~cGFX();
	
	public:
		static cGFX& Inst();
		static void Delete();

		void StringDefault( const cString& text, const SDL_Rect& pos, const SDL_Colour& colour ) const;
		void StringDefault( const cString& text, const SDL_Rect& pos, const SDL_Colour& colour, SDL_Texture* texture ) const;

		void Box( const SDL_Rect& rect, const SDL_Colour& colour ) const;
		void Box( const SDL_Rect& rect, const SDL_Colour& colour, SDL_Texture* texture ) const;
		
		void RoundedBox( const SDL_Rect& rect, const unsigned long int rad, const SDL_Colour& colour ) const;
		void RoundedBox( const SDL_Rect& rect, const unsigned long int rad, const SDL_Colour& colour, SDL_Texture* texture ) const;

		void Pixel( const unsigned long int x, const unsigned long int y, const SDL_Colour& colour ) const;
		void Pixel( const unsigned long int x, const unsigned long int y, const SDL_Colour& colour, SDL_Texture* texture ) const;

		void Rectangle( const SDL_Rect& rect, const SDL_Colour& colour ) const;
		void Rectangle( const SDL_Rect& rect, const SDL_Colour& colour, SDL_Texture* texture ) const;

		void ZoomIn( SDL_Texture* texture, const double zoomx, const double zoomy, const unsigned long int smooth = SMOOTHING_ON ) const;
	
	private:
		static cGFX* sp_inst;// = nullptr
	};/// END CLASS DEFINITION cGFX
}/// END NAMESPACE DEFINITION FXEngine
#endif/// END IFNDEF _CGFX_HPP_