//----------------------------------------------------
/**
	\file		fonts/inc/fonts.h
	\ingroup	font
	\ingroup	all

	\brief		Knihovna fontu
				<<< ALL >>>

	\author		ConTeK s.r.o., Petr Cernin
	\version	01.01
	\date		10.08.2006
*/
//-----------------------------------------------------
#ifndef _FONTS_H_
#define _FONTS_H_			//!< Definice pritomnosti kno

#include <hwmodel.h>
#include <ctktypes.h>
#include <codepage.h>

#if defined(FONT_CODEPAGE) && (FONT_CODEPAGE != SYSTEM_CODEPAGE)
	// je treba konvertovat znakove sady odesilanych retezcu
	#define FONT_CP_CONV
#endif


#define FONT_FLAG_PROPORTIONAL		0x01		//!< Priznak proporcionalniho fontu
#define FONT_FLAG_OFFSETS			0x02		//!< Priznak fontu obsahujiciho tabulku ofsetu


// \struct FONTHDR
// Zahlavni struktury fontu
//
// [Header] [Widths] [Bitmaps]
//
// Blok [Widths] je obsazen pouze tehdy, jestli je font
// proporcionalni, tj. polozka Width zahlavi obsahuje 0
// Blok [Widhts] obsahuje pole sirek vsech znaku z rozsahu
// FirstChar .. LastChar
//
// Blok [Bitmaps] obsahuje pole bitmap jednotlivych znaku
// Jednotlive bitmapy maji velikost 1B * vyska znaku
//
// Maximalni sirka znaku je 8 pixelu

#ifdef MSVC
//#pragma pack(show)
#pragma pack(push,1)
//#pragma pack(show)
#endif // MSVC

typedef struct
{
	uint8_t flags;		//!< Priznaky FONT_FLAG_xx
	uint8_t	height;		//!< Vyska znaku
	uint8_t	width;		//!< sirka znaku, 0=proporcionalni
	uint8_t	firstchar;	//!< Prvni znak v tabulce
	uint8_t	lastchar;	//!< Posledni znak v tabulce
	uint8_t	defchar;	//!< Implicitni znak
	uint8_t	_reserved1;	//!< Reserved
	uint8_t _reserved2;	//!< Reserved

#ifndef MSVC
} __attribute__((packed)) FONTHDR;
#else
} FONTHDR;
#pragma pack(pop)
//#pragma pack(show)
#endif // MSVC

//-----------------------------------------------------
//! Identifikator bezneho maleho fontu
#define FONT_SMALL		0

//-----------------------------------------------------
//! Identifikator velkeho fontu pouziteho pro editaci
#define	FONT_BIG		1


//-----------------------------------------------------
/**
	\brief	Tabulka registrovanych fontu
*/
//-----------------------------------------------------

#ifdef MAX_FONTS
 extern const uint8_t * gFontTable[ MAX_FONTS ];
#endif // MAX_FONTS


//-----------------------------------------------------
//!	\brief	Velky neproporcionalni font, kodova stranka ASCII
//!
//!	\note	Velikost:	968B
//!	\note	sirka:		8
//!	\note	Vyska:		14
//!	\note	Znaky:		0x20 - 0x5F
//!	\note	Impl.znak:	0x3F

extern uint8_t font_8x14alnum[904] PCONST;

//-----------------------------------------------------
//!	\brief	Velky neproporcionalni font, kodova stranka CP1251
//!
//!	\note	Velikost:	3370B
//!	\note	sirka:		8
//!	\note	Vyska:		14
//!	\note	Znaky:		0x20 - 0xDF
//!	\note	Impl.znak:	0x3F

extern uint8_t font_8x14cyr[3370] PCONST;

//-----------------------------------------------------
//!	\brief	Maly uzky proporcionalni font, kodova stranka CP1250
//!
//!	\note	Velikost:	2472B
//!	\note	Sirka:		proporcionalni
//!	\note	Vyska:		10
//!	\note	Znaky:		0x20 - 0xFF
//!	\note	Impl.znak:	0x60

extern uint8_t font_x10narrow[2472] PCONST;

//-----------------------------------------------------
//!	\brief	Maly uzky proporcionalni font, kodova stranka CP1251
//!
//!	\note	Velikost:	2472B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		16
//!	\note	Znaky:		0x20 - 0xFF
//!	\note	Impl.znak:	0x0A

extern uint8_t font_x10cyr[2472] PCONST;

#ifndef AVR
// AVR neumi alokovat tak velke pole

//-----------------------------------------------------
//!	\brief	Font typu Tahoma s vyskou 80
//!
//!	\note	Velikost:	42296B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		80
//!	\note	Znaky:		0x20 - 0x7F
//!	\note	Impl.znak:	0x0A

extern uint8_t font_tahoma80[42296] PCONST;

#endif // AVR

//-----------------------------------------------------
//!	\brief	Font typu Tahoma s vyskou 58
//!
//!	\note	Velikost:	21176B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		58
//!	\note	Znaky:		0x20 - 0x7F
//!	\note	Impl.znak:	0x0A

extern uint8_t font_tahoma58[21176] PCONST;

//-----------------------------------------------------
//!	\brief	Font typu Tahoma s vyskou 64
//!
//!	\note	Velikost:	24744B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		64
//!	\note	Znaky:		0x20 - 0x7F
//!	\note	Impl.znak:	0x0A

extern uint8_t font_tahoma64[24744] PCONST;

//-----------------------------------------------------
//!	\brief	Font typu Aral s Vyskou 22
//!
//!	\note	Velikost:	9348B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		22
//!	\note	Znaky:		0x20 - 0xFF
//!	\note	Impl.znak:	0x0A

extern uint8_t font_arial22[9348] PCONST;

//-----------------------------------------------------
//!	\brief	Font fixedsys s Vyskou 20
//!
//!	\note	Velikost:	8968B
//!	\note	Sirka:		10
//!	\note	Vyska:		20
//!	\note	Znaky:		0x20 - 0xFF
//!	\note	Impl.znak:	0x0A

extern uint8_t font_fixedsys20[8968] PCONST;

//-----------------------------------------------------
//!	\brief	Font system s velikosti 20
//!
//!	\note	Velikost:	8160B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		20
//!	\note	Znaky:		0x20 - 0xFF
//!	\note	Impl.znak:	0x0A

extern uint8_t font_system20[8160] PCONST;

//-----------------------------------------------------
//!	\brief	Font Tahoma bold s vyskou 16
//!
//!	\note	Velikost:	5176B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		16
//!	\note	Znaky:		0x20 - 0xFF
//!	\note	Impl.znak:	0x0A

extern uint8_t font_tahoma10_bold[5176] PCONST;

//-----------------------------------------------------
//!	\brief Font inons64
//!
//!	\note	Velikost:	5015B
//!	\note	Sirka:		proportional
//!	\note	Vyska:		55
//!	\note	Znaky:		0x20 - 0x32
//!	\note	Impl.znak:	0x0A

extern uint8_t font_icons64[5015] PCONST;

#define FONTICON_TOOLS			0x21
#define FONTICON_RECYCLE		0x22
#define FONTICON_ACCEPT			0x23
#define FONTICON_INFO			0x24
#define FONTICON_SYNCHRONIZE	0x25
#define FONTICON_DENIED			0x26
#define FONTICON_QUESTION		0x27
#define FONTICON_EXCLAMATION	0x28
#define FONTICON_FORBIDDEN		0x29
#define FONTICON_DOWNLOAD		0x2A
#define FONTICON_UPLOAD			0x2B
#define FONTICON_TEMP0			0x2C
#define FONTICON_TEMP1			0x2D
#define FONTICON_TEMP2			0x2E
#define FONTICON_TEMP3			0x2F
#define FONTICON_TEMP4			0x30
#define FONTICON_TEMP5			0x31
#define FONTICON_TEMP6			0x32


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

	\param	_ch			Znak
	\param	_fontId		Identifikator fontu v globalni tabulce fontu

	\return		Sirka znaku, v pripade chyby 0
*/
//----------------------------------------------------

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


//----------------------------------------------------
/**
	\brief	Funkce vraci bitmapu znaku v danem fontu

	\param	_ch			Znak
	\param	_fontId		Identifikator fontu v globalni tabulce fontu
	\param	_width		[out] Sirka vysledne bitmapy
	\param	_height		[out] Vyska vysledne bitmapy

	\return		Ukazatel na bitmapu, v pripade chyby NULL
*/
//----------------------------------------------------

const pvoidptr_t FontGetCharBitmap(const char_t _ch, const uint8_t _fontId, uint8_t * const _width, uint8_t * const _height);


//----------------------------------------------------
/**
	\brief	Inicializace fontu

	\return	TRUE, pokud se inicializace zdarila
*/
//----------------------------------------------------

bool_t FontInitialize(void);


//----------------------------------------------------
/**
	\brief	Finalizace fontu
*/
//----------------------------------------------------

void FontFinalize(void);

#endif // #ifndef _FONTS_H_
