//----------------------------------------------------
/**
	\file		ctk/inc/graph.h
	\ingroup	visualization
	\ingroup	all

	\brief		Knihovna vykreslovacich rutin pro graficke displeje
				<<< ALL >>>

	\author		ConTeK s.r.o., Petr Cernin, Pavel Bazika
	\version	01.02
	\date		06.01.2009
*/
//----------------------------------------------------

#ifndef _GRAPH_H_
#define _GRAPH_H_

#include <datadef.h>
#include <display.h>

//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni pixelu

	\param	disp	Kontext displaye
	\param	x		Souradnice X (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y (0 - DISPLAY_ROWS - 1)
*/
//----------------------------------------------------

void grPixel(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni cerneho obdelniku

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	width	Sirka obdelniku
	\param	height	Vyska obdelniku
*/
//----------------------------------------------------

void grBar(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, uint8_t _width, uint8_t _height);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni bileho obdelniku

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	width	Sirka obdelniku
	\param	height	Vyska obdelniku
*/
//----------------------------------------------------

void grClearBar(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, uint8_t _width, uint8_t _height);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni inverzniho obdelniku

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	width	Sirka obdelniku
	\param	height	Vyska obdelniku
*/
//----------------------------------------------------

void grXorBar(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, uint8_t _width, uint8_t _height);


//----------------------------------------------------
/**
	\brief	Funkce pro inverzniho obdelniku se zaoblenymi rohy

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	width	Sirka obdelniku
	\param	height	Vyska obdelniku
*/
//----------------------------------------------------

void grXorRoundBar(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, const uint8_t _width, const uint8_t _height);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni horizontalni usecky

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	width	Delka usecky
*/
//----------------------------------------------------

void grHorzLine(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, const uint8_t _width);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni vertikalni usecky

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	height	Delka usecky
*/
//----------------------------------------------------

void grVertLine(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, const uint8_t _height);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni ramecku

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	width	Sirka ramecku
	\param	height	Vyska ramecku
*/
//----------------------------------------------------

void grRectangle(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, const uint8_t _width, const uint8_t _height);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni textu ulozeneho v pameti RAM

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	text	Ukazatel na text v pameti RAM
	\param	fontId	Id fontu (index do tabulky fontu)
*/
//----------------------------------------------------

void grText_RAM(DISPDESC * const _disp, uint8_t _x, const uint8_t _y, const char_t * _text, const uint8_t _fontId);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni textu ulozeneho v programove pameti

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	text	Ukazatel na text v pameti flash
	\param	fontId	Id fontu (index do tabulky fontu)
*/
//----------------------------------------------------

void grText_P(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, pcharptr_t _text, const uint8_t _fontId);


//----------------------------------------------------
/**
	\brief	Funkce pro vykresleni textu ulozeneho v programove pameti daneho indexem

	\param	disp	Kontext displaye
	\param	x		Souradnice X leveho horniho rohu (0 - DISPLAY_COLS - 1)
	\param	y		Souradnice Y leveho horniho rohu (0 - DISPLAY_ROWS - 1)
	\param	text	Identifikator retezce
	\param	fontId	Id fontu (index do tabulky fontu)
*/
//----------------------------------------------------

void grText_IDX(DISPDESC * const _disp, const uint8_t _x, const uint8_t _y, const stringindex_t _text, const uint8_t _fontId);


//----------------------------------------------------
/**
	\brief	Funkce pro zjisteni sirky textu ulozeneho v RAM

	\param	text	Ukazatel na text v pameti RAM
	\param	fontId	Id fontu (index do tabulky fontu)

	\return	Vraci sirku textu v pixelech
*/
//----------------------------------------------------

uint8_t grTextWidth_RAM(const char_t * _text, const uint8_t _fontId);


//----------------------------------------------------
/**
	\brief	Funkce pro zjisteni sirky textu ulozeneho v programove pameti

	\param	text	Ukazatel na text v pameti programu
	\param	fontId	Id fontu (index do tabulky fontu)

	\return	Vraci sirku textu v pixelech
*/
//----------------------------------------------------

uint8_t grTextWidth_P(pcharptr_t _text, const uint8_t _fontId);


//----------------------------------------------------
/**
	\brief	Vraci vysku znaku fontu

	\param	ch		Vybrany znak
	\param	fontId	Id fontu (index do tabulky fontu)

	\return	Vraci sirku znaku fontu v pixelech.
*/
//----------------------------------------------------

uint8_t grTextHeight(const uint8_t _fontId);


//----------------------------------------------------
/**
	\brief	Funkce vraci sirku znaku fontu

	\param	ch		Vybrany znak
	\param	fontId	Id fontu (index do tabulky fontu)

	\return	Vraci sirku znaku fontu v pixelech.
*/
//----------------------------------------------------

uint8_t grCharWidth(const char_t _ch, const uint8_t _fontId);


#endif // _GRAPH_H_
