[DEV] add font multiple

This commit is contained in:
Edouard DUPIN 2013-06-27 22:45:26 +02:00
parent b7196e577c
commit cad47bd419
7 changed files with 69 additions and 59 deletions

2
external/etk vendored

@ -1 +1 @@
Subproject commit d2099c51e917243edd4bb808f66a32e9df69aa30
Subproject commit c60fe0326dd06a8750494ee995f90209537049ce

2
external/exml vendored

@ -1 +1 @@
Subproject commit 628d28e7e13236326eb5f323eb0ac5f835eefab0
Subproject commit 5fce0e9ef26a8c161d10bbef21abb0faac6a2d8c

View File

@ -134,22 +134,13 @@ bool ewol::userConfig::Load(void)
return true;
}
#define MAX_SAVING_FILE_HISTORY (9)
bool ewol::userConfig::Save(void)
{
// step 1 : Move the file to prevent writing error
//Get the first oldest save :
for (int32_t iii=MAX_SAVING_FILE_HISTORY-1; iii>0 ; iii--) {
if (true==etk::FSNodeExist(l_obj().FileName()+"-"+iii) ) {
etk::FSNodeMove(l_obj().FileName()+"-"+iii,l_obj().FileName()+"-"+(iii+1));
}
}
if (true==etk::FSNodeExist(l_obj().FileName()) ) {
etk::FSNodeMove(l_obj().FileName(),l_obj().FileName()+"-1");
}
etk::FSNodeHistory(l_obj().FileName(), 9);
exml::Document doc;
doc.Append(new exml::Declaration("1.0", "UTF-8", ""));
doc.Append(new exml::Declaration("1.0", unicode::EDN_CHARSET_UTF8, ""));
exml::Element * ElementBase = new exml::Element("config");
doc.Append(ElementBase);
for (int32_t iii=0; iii<l_obj().List().Size() ; iii++) {

View File

@ -20,7 +20,7 @@ void ewol::config::Init(void)
{
// reset font properties
l_fontConfigFolder = "DATA::fonts";
l_fontConfigName = "Arial";
l_fontConfigName = "Arial;Helvetica";
l_fontConfigSize = 10;
ewol::FreeTypeInit();
}

View File

@ -23,7 +23,7 @@ namespace ewol
void FontFolder(const etk::UString& _folder);
/**
* @brief Set the defaut font for all the widgets and basics display.
* @param[in] _fontName The font name requested (not case sensitive) ex "Arial".
* @param[in] _fontName The font name requested (not case sensitive) ex "Arial" or multiple separate by ';' ex : "Arial;Helvetica".
* @param[in] _size The default size of the font default=10.
*/
void FontSetDefault(const etk::UString& _fontName, int32_t _size);

View File

@ -131,49 +131,67 @@ ewol::TexturedFont::TexturedFont(etk::UString fontName) :
#endif
}
etk::FSNode myFolder(fontBaseFolder);
EWOL_INFO("try to find font named : '" << m_name << "' in : '" << myFolder <<"'");
// find the real Font name :
etk::Vector<etk::UString> output;
myFolder.FolderGetRecursiveFiles(output);
for (int32_t iii=0; iii<output.Size(); iii++) {
//EWOL_DEBUG(" file : " << output[iii]);
if( true == output[iii].EndWith(m_name+"-"+"bold"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"b"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"bd"+".ttf", false)
|| true == output[iii].EndWith(m_name+"bold"+".ttf", false)
|| true == output[iii].EndWith(m_name+"bd"+".ttf", false)
|| true == output[iii].EndWith(m_name+"b"+".ttf", false)) {
EWOL_INFO(" find Font [Bold] : " << output[iii]);
m_fileName[ewol::font::Bold] = output[iii];
} else if( true == output[iii].EndWith(m_name+"-"+"oblique"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"italic"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"Light"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"i"+".ttf", false)
|| true == output[iii].EndWith(m_name+"oblique"+".ttf", false)
|| true == output[iii].EndWith(m_name+"italic"+".ttf", false)
|| true == output[iii].EndWith(m_name+"light"+".ttf", false)
|| true == output[iii].EndWith(m_name+"i"+".ttf", false)) {
EWOL_INFO(" find Font [Italic] : " << output[iii]);
m_fileName[ewol::font::Italic] = output[iii];
} else if( true == output[iii].EndWith(m_name+"-"+"bolditalic"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"boldoblique"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"bi"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"z"+".ttf", false)
|| true == output[iii].EndWith(m_name+"bolditalic"+".ttf", false)
|| true == output[iii].EndWith(m_name+"boldoblique"+".ttf", false)
|| true == output[iii].EndWith(m_name+"bi"+".ttf", false)
|| true == output[iii].EndWith(m_name+"z"+".ttf", false)) {
EWOL_INFO(" find Font [Bold-Italic] : " << output[iii]);
m_fileName[ewol::font::BoldItalic] = output[iii];
} else if( true == output[iii].EndWith(m_name+"-"+"regular"+".ttf", false)
|| true == output[iii].EndWith(m_name+"-"+"r"+".ttf", false)
|| true == output[iii].EndWith(m_name+"regular"+".ttf", false)
|| true == output[iii].EndWith(m_name+"r"+".ttf", false)
|| true == output[iii].EndWith(m_name+".ttf", false)) {
EWOL_INFO(" find Font [Regular] : " << output[iii]);
m_fileName[ewol::font::Regular] = output[iii];
etk::Vector<etk::UString> split = m_name.Split(';');
EWOL_INFO("try to find font named : '" << split << "' in : '" << myFolder <<"'");
//EWOL_CRITICAL("parse string : " << split);
for (int32_t jjj=0; jjj<split.Size(); jjj++) {
EWOL_INFO(" try with : '" << split[jjj] << "'");
bool hasFindAFont = false;
for (int32_t iii=0; iii<output.Size(); iii++) {
//EWOL_DEBUG(" file : " << output[iii]);
if( true == output[iii].EndWith(split[jjj]+"-"+"bold"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"b"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"bd"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"bold"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"bd"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"b"+".ttf", false)) {
EWOL_INFO(" find Font [Bold] : " << output[iii]);
m_fileName[ewol::font::Bold] = output[iii];
hasFindAFont=true;
} else if( true == output[iii].EndWith(split[jjj]+"-"+"oblique"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"italic"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"Light"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"i"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"oblique"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"italic"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"light"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"i"+".ttf", false)) {
EWOL_INFO(" find Font [Italic] : " << output[iii]);
m_fileName[ewol::font::Italic] = output[iii];
hasFindAFont=true;
} else if( true == output[iii].EndWith(split[jjj]+"-"+"bolditalic"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"boldoblique"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"bi"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"z"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"bolditalic"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"boldoblique"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"bi"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"z"+".ttf", false)) {
EWOL_INFO(" find Font [Bold-Italic] : " << output[iii]);
m_fileName[ewol::font::BoldItalic] = output[iii];
hasFindAFont=true;
} else if( true == output[iii].EndWith(split[jjj]+"-"+"regular"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"-"+"r"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"regular"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+"r"+".ttf", false)
|| true == output[iii].EndWith(split[jjj]+".ttf", false)) {
EWOL_INFO(" find Font [Regular] : " << output[iii]);
m_fileName[ewol::font::Regular] = output[iii];
hasFindAFont=true;
}
}
if (hasFindAFont==true) {
EWOL_INFO(" Find this font : '" << split[jjj] << "'");
break;
} else if (jjj==split.Size()-1) {
EWOL_ERROR("Find NO font in the LIST ... " << split);
}
}
// try to find the reference mode :
ewol::font::mode_te refMode = ewol::font::Regular;
for(int32_t iii=3; iii>=0; iii--) {
@ -181,6 +199,7 @@ ewol::TexturedFont::TexturedFont(etk::UString fontName) :
refMode = (ewol::font::mode_te)iii;
}
}
EWOL_DEBUG(" Set reference mode : " << refMode);
// generate the wrapping on the preventing error
for(int32_t iii=3; iii>=0; iii--) {

View File

@ -430,20 +430,20 @@ ewol::Widget* widget::Button::GetWidgetNamed(const etk::UString& _widgetName)
}
bool widget::Button::LoadXML(exml::Element* _node)
bool widget::Button::LoadXML(exml::Element* _element)
{
if (NULL==_node) {
if (NULL==_element) {
return false;
}
// parse generic properties :
ewol::Widget::LoadXML(_node);
ewol::Widget::LoadXML(_element);
// remove previous element :
SetSubWidget(NULL);
SetSubWidgetToggle(NULL);
// parse all the elements :
for(int32_t iii=0; iii< _node->Size(); iii++) {
exml::Element* pNode = _node->GetElement(iii);
for(int32_t iii=0; iii< _element->Size(); iii++) {
exml::Element* pNode = _element->GetElement(iii);
if (pNode==NULL) {
// trash here all that is not element
continue;