diff --git a/Makefile b/Makefile index a9b2208d..65a3b247 100644 --- a/Makefile +++ b/Makefile @@ -104,10 +104,10 @@ X11FLAGS+= -DEWOL_X11_MODE__XF86V -lXxf86vm CXXFLAGS= $(X11FLAGS) -D__PLATFORM__=$(PLATFORM) ifeq ("$(DEBUG)", "0") + CXXFLAGS+= -O2 +else # Enable debug (cgdb ***) CXXFLAGS+= -g -O0 -else - CXXFLAGS+= -O2 endif # display all flags CXXFLAGS+= -Wall diff --git a/Sources/base/guiX11.cpp b/Sources/base/guiX11.cpp index 660533eb..7d0adb0c 100644 --- a/Sources/base/guiX11.cpp +++ b/Sources/base/guiX11.cpp @@ -46,6 +46,9 @@ #include +#undef __class__ +#define __class__ "guiAbstraction" + #if defined(EWOL_X11_MODE__XF86V) // attributes for a single buffered visual in RGBA format with at least 4 bits per color and a 16 bit depth buffer static int attrListSgl[] = { diff --git a/Sources/etk/etkTypes.h b/Sources/etk/etkTypes.h index 0b40e213..bc722f9b 100644 --- a/Sources/etk/etkTypes.h +++ b/Sources/etk/etkTypes.h @@ -71,6 +71,26 @@ extern "C" typedef etkPointAndPositionDouble position_ts; typedef etkPointAndPositionDouble size_ts; typedef etkPointAndPositionInt intSize_ts; + + typedef struct { + float x; + float y; + float z; + }coord3D_ts; + typedef struct { + float x; + float y; + }coord2D_ts; + typedef struct { + float u; + float v; + }texCoord_ts; + typedef struct { + float red; + float green; + float blue; + float alpha; + }color_ts; } diff --git a/Sources/ewol.cpp b/Sources/ewol.cpp index 5996638c..0a26817c 100644 --- a/Sources/ewol.cpp +++ b/Sources/ewol.cpp @@ -41,6 +41,8 @@ #error you need to specify a platform ... #endif +#undef __class__ +#define __class__ "ewol" void ewol::Init(int argc, char *argv[]) { diff --git a/Sources/ewolFont.cpp b/Sources/ewolFont.cpp index 9b07de6c..81f7fd25 100644 --- a/Sources/ewolFont.cpp +++ b/Sources/ewolFont.cpp @@ -27,136 +27,6 @@ #include #include -extern "C" -{ - typedef struct { - position_ts posStart; - position_ts posStop; - intSize_ts size; - }UTF8Element_ts; -} - -static UTF8Element_ts listOfElement[0x80]; - -static int32_t TextureIdNormal = -1; -static int32_t TextureIdBold = -1; -static int32_t TextureIdBoldItalic = -1; -static int32_t TextureIdItalic = -1; - -static bool isInit = false; - -int32_t ewol::LoadFont(etk::File fontFileName) -{ - if (true == isInit) { - EWOL_ERROR("Font is already loaded..."); - return 0; - } - if (fontFileName.GetExtention() != "ebt") { - EWOL_ERROR("Not the coorect extention of the file" << fontFileName); - return 0; - } - if (false == fontFileName.Exist()) { - EWOL_ERROR("File does not Exist ... " << fontFileName); - return 0; - } - - FILE* File=fopen(fontFileName.GetCompleateName().c_str(),"r"); - if(NULL == File) { - EWOL_ERROR("Can not find the file name=\"" << fontFileName << "\""); - return 0; - } - - char elementLine[2048]; - int32_t lineID=1; - while (NULL != fgets(elementLine, 2048, File) ) - { - if ( '\n' != elementLine[0] // EOL - && '\0' != elementLine[0] // EOF - && '#' != elementLine[0] // Comment line - ) - { - if (0 == strncmp("name:", elementLine, 5)) { - char extractString[256] = ""; - sscanf(elementLine, "name:%s", extractString); - EWOL_INFO("Find font name : \"" << extractString << "\""); - } else if (0 == strncmp("normal:", elementLine, 7)) { - char extractString[256] = ""; - sscanf(elementLine, "normal:%s", extractString); - etk::String elementName = fontFileName.GetFolder(); - elementName += '/'; - elementName += extractString; - EWOL_INFO("Find normal font image : \"" << elementName << "\""); - TextureIdNormal = ewol::LoadTexture(elementName); - } else if (0 == strncmp("bold-italic:", elementLine, 12)) { - char extractString[256] = ""; - sscanf(elementLine, "bold-italic:%s", extractString); - etk::String elementName = fontFileName.GetFolder(); - elementName += '/'; - elementName += extractString; - EWOL_INFO("Find bold-italic font image : \"" << elementName << "\""); - TextureIdBoldItalic = ewol::LoadTexture(elementName); - } else if (0 == strncmp("bold:", elementLine, 5)) { - char extractString[256] = ""; - sscanf(elementLine, "bold:%s", extractString); - etk::String elementName = fontFileName.GetFolder(); - elementName += '/'; - elementName += extractString; - EWOL_INFO("Find bold font image : \"" << elementName << "\""); - TextureIdBold = ewol::LoadTexture(elementName); - } else if (0 == strncmp("italic:", elementLine, 7)) { - char extractString[256] = ""; - sscanf(elementLine, "italic:%s", extractString); - etk::String elementName = fontFileName.GetFolder(); - elementName += '/'; - elementName += extractString; - EWOL_INFO("Find italic font image : \"" << elementName << "\""); - TextureIdItalic = ewol::LoadTexture(elementName); - } else if (0 == strncmp("0x00", elementLine, 4)) { - int32_t GlyphPositionX; - int32_t GlyphPositionY; - int32_t GlyphSizeX; - int32_t GlyphSizeY; - sscanf(elementLine, "0x00 (%d,%d) (%d,%d)", &GlyphPositionX, &GlyphPositionY, &GlyphSizeX, &GlyphSizeY); - EWOL_INFO("Find default font glyph : (" << GlyphPositionX << "," << GlyphPositionY << ") (" << GlyphSizeX << "," << GlyphSizeY << ") "); - for (int32_t iii=0; iii< 0x80; iii++) { - listOfElement[iii].posStart.x = (double)GlyphPositionX / 512.0; - listOfElement[iii].posStart.y = (double)GlyphPositionY / 512.0; - listOfElement[iii].posStop.x = (double)(GlyphPositionX+GlyphSizeX) / 512.0; - listOfElement[iii].posStop.y = (double)(GlyphPositionY+GlyphSizeY) / 512.0; - listOfElement[iii].size.x = GlyphSizeX; - listOfElement[iii].size.y = GlyphSizeY; - } - } else if (0 == strncmp("0x", elementLine, 2)) { - uint32_t utf8Value; - int32_t GlyphPositionX; - int32_t GlyphPositionY; - int32_t GlyphSizeX; - int32_t GlyphSizeY; - sscanf(elementLine, "0x%x (%d,%d) (%d,%d)", &utf8Value, &GlyphPositionX, &GlyphPositionY, &GlyphSizeX, &GlyphSizeY); - //EWOL_INFO("Find pos font glyph : " << utf8Value << " (" << GlyphPositionX << "," << GlyphPositionY << ") (" << GlyphSizeX << "," << GlyphSizeY << ") "); - if (utf8Value < 0x80) { - listOfElement[utf8Value].posStart.x = (double)GlyphPositionX / 512.0; - listOfElement[utf8Value].posStart.y = (double)GlyphPositionY / 512.0; - listOfElement[utf8Value].posStop.x = (double)(GlyphPositionX+GlyphSizeX) / 512.0; - listOfElement[utf8Value].posStop.y = (double)(GlyphPositionY+GlyphSizeY) / 512.0; - listOfElement[utf8Value].size.x = GlyphSizeX; - listOfElement[utf8Value].size.y = GlyphSizeY; - } else { - EWOL_ERROR("not manage glyph with ID > 0x7F line : " << lineID << "\"" << elementLine << "\""); - } - } else { - EWOL_ERROR("error when parsing the line : " << lineID << "\"" << elementLine << "\""); - } - } - - lineID++; - } - - isInit = true; - // return the font Id : - return 0; -} - #include #include @@ -168,32 +38,349 @@ int32_t ewol::LoadFont(etk::File fontFileName) # include #endif -void ewol::DrawText(double x, double y, const char * myString) + +#undef __class__ +#define __class__ "ewol::Font" + + +extern "C" { - char * tmpVal = (char*)myString; - glColor4f(1.0, 1.0, 1.0, 1.0); + typedef struct { + position_ts posStart; + position_ts posStop; + intSize_ts size; + }UTF8Element_ts; +} + + +namespace ewol +{ + class Font + { + public: + Font(etk::File newFile) + { + m_loadedOK = false; + m_filename = newFile; + for (int32_t iii; iii 0x7F line : " << lineID); + } + }; + + public: + void SetModeFile(ewol::fontMode_te displayMode, etk::String newFile) + { + if (displayMode < FONT_MODE_NUMBER) { + m_bitmapName[displayMode] = newFile; + } + }; + + void LoadMode(ewol::fontMode_te displayMode) + { + if (displayMode < FONT_MODE_NUMBER) { + if (m_bitmapName[displayMode] == "") { + EWOL_ERROR("Can not load en empty file for the Font : " << m_filename ); + return; + } + if (m_textureLoaded[displayMode] == true) { + EWOL_WARNING("Mode of font is alredy loaded : " << m_filename ); + return; + } + etk::String elementName = m_filename.GetFolder(); + elementName += '/'; + elementName += m_bitmapName[displayMode]; + EWOL_INFO("load text font image : \"" << elementName << "\""); + m_textureId[displayMode] = ewol::LoadTexture(elementName); + m_textureLoaded[displayMode] = true; + } + }; + + etk::File GetFileName(void) + { + return m_filename; + }; + etk::String GetName(void) + { + return m_fontName; + }; + bool IsLoaded(ewol::fontMode_te displayMode) + { + return m_textureLoaded[displayMode]; + }; + private: + etk::File m_filename; + bool m_loadedOK; + etk::String m_fontName; + uint32_t m_textureId[FONT_MODE_NUMBER]; + bool m_textureLoaded[FONT_MODE_NUMBER]; + etk::String m_bitmapName[FONT_MODE_NUMBER]; + UTF8Element_ts m_listOfElement[0x80]; + public: + UTF8Element_ts * GetPointerOnElement(void) + { + return m_listOfElement; + }; + uint32_t GetOglId(ewol::fontMode_te displayMode) + { + return m_textureId[displayMode]; + }; + }; +}; + +static etk::VectorType listLoadedFonts; + + + +// load a font in momory, can be done many time for a specific fontname, if you specify true the font will be loaded in memory, otherwise, font is loaded only when needed the first time +bool ewol::AddFont(etk::File fontFileName, bool bold, bool italic, bool boldItalic) +{ + for (int32_t iii=0; iiiGetFileName() == fontFileName) { + if (true == bold) { + listLoadedFonts[iii]->LoadMode(FONT_MODE_BOLD); + } + if (true == italic) { + listLoadedFonts[iii]->LoadMode(FONT_MODE_ITALIC); + } + if (true == boldItalic) { + listLoadedFonts[iii]->LoadMode(FONT_MODE_BOLD_ITALIC); + } + return true; + } + } + if (fontFileName.GetExtention() != "ebt") { + EWOL_ERROR("Not the correct extention of the file" << fontFileName << "supported only *.ebt" ); + return false; + } + ewol::Font * tmpFont = new ewol::Font(fontFileName); + if (false == tmpFont->loadedOK()) { + EWOL_ERROR("An error apear when loading Font file : " << fontFileName); + return false; + } + if (true == bold) { + tmpFont->LoadMode(FONT_MODE_BOLD); + } + if (true == italic) { + tmpFont->LoadMode(FONT_MODE_ITALIC); + } + if (true == boldItalic) { + tmpFont->LoadMode(FONT_MODE_BOLD_ITALIC); + } + listLoadedFonts.PushBack(tmpFont); + return true; +} + + +// get the name of the font +etk::String ewol::GetFontName(int32_t Id) +{ + if(Id=0) { + return listLoadedFonts[Id]->GetName(); + } + return "No-Name"; +} + +int32_t ewol::GetFontIdWithFileName(etk::File fontFileName) +{ + for (int32_t iii=0; iiiGetFileName() == fontFileName) { + return iii; + } + } + return -1; +} + +int32_t ewol::GetFontIdWithName(etk::String fontName) +{ + for (int32_t iii=0; iiiGetName() == fontName) { + return iii; + } + } + return -1; +} + +// get the size of a long string in UTF8 (note that \n and \r represent unknown char...) +int32_t ewol::GetStringWidth(int32_t fontID, ewol::fontMode_te displayMode, int32_t size, const char * utf8String) +{ + return 0; +} + +// get the size of a specific char in UTF8 +int32_t ewol::GetCharWidth(int32_t fontID, ewol::fontMode_te displayMode, int32_t size, const char * utf8String) +{ + return 0; +} + +// draw the text without background +void ewol::DrawText(int32_t fontID, + ewol::fontMode_te displayMode, + int32_t size, + coord3D_ts & drawPosition, + color_ts textColorFg, + const char * utf8String) +{ + if(fontID>=listLoadedFonts.Size() || fontID < 0) { + EWOL_WARNING("try to display text with an fontID that does not existed " << fontID); + return; + } + if (false == listLoadedFonts[fontID]->IsLoaded(displayMode)) { + listLoadedFonts[fontID]->LoadMode(displayMode); + if (false == listLoadedFonts[fontID]->IsLoaded(displayMode)) { + EWOL_ERROR("Can not load Font mode : " << displayMode << "of font " << listLoadedFonts[fontID]->GetName() ); + return; + } + } + UTF8Element_ts * listOfElement = listLoadedFonts[fontID]->GetPointerOnElement(); + char * tmpVal = (char*)utf8String; + + glColor4f(textColorFg.red, textColorFg.green, textColorFg.blue, textColorFg.alpha); glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, TextureIdBold); + glBindTexture(GL_TEXTURE_2D, listLoadedFonts[fontID]->GetOglId(displayMode)); while(*tmpVal != '\0') { int32_t tmpChar = (int32_t)*tmpVal; if (tmpChar >= 0x80) { tmpChar = 0; } - glBegin(GL_QUADS); - glTexCoord2f(listOfElement[tmpChar].posStart.x, listOfElement[tmpChar].posStart.y); - glVertex3f(x, y, 0.0); - glTexCoord2f(listOfElement[tmpChar].posStop.x, listOfElement[tmpChar].posStart.y); - glVertex3f(x + listOfElement[tmpChar].size.x, y, 0.0); - glTexCoord2f(listOfElement[tmpChar].posStop.x, listOfElement[tmpChar].posStop.y); - glVertex3f(x + listOfElement[tmpChar].size.x, y + listOfElement[tmpChar].size.y, 0.0); - glTexCoord2f(listOfElement[tmpChar].posStart.x, listOfElement[tmpChar].posStop.y); - glVertex3f(x , y + listOfElement[tmpChar].size.y, 0.0); - glEnd(); + if (tmpChar != 0x20) { + /* + EWOL_DEBUG(" Draw TEX (" << listOfElement[tmpChar].posStart.x*512 << "," << listOfElement[tmpChar].posStart.y*512 << ")"); + EWOL_DEBUG(" (" << listOfElement[tmpChar].posStop.x*512 << "," << listOfElement[tmpChar].posStop.y*512 << ")"); + EWOL_DEBUG(" display (" << drawPosition.x << "," << drawPosition.y << ")"); + EWOL_DEBUG(" (" << drawPosition.x + listOfElement[tmpChar].size.x << "," << drawPosition.y + listOfElement[tmpChar].size.y << ")"); + */ + glBegin(GL_QUADS); + glTexCoord2f(listOfElement[tmpChar].posStart.x, listOfElement[tmpChar].posStart.y); glVertex3f(drawPosition.x, drawPosition.y, 0.0); + glTexCoord2f(listOfElement[tmpChar].posStop.x, listOfElement[tmpChar].posStart.y); glVertex3f(drawPosition.x + listOfElement[tmpChar].size.x, drawPosition.y, 0.0); + glTexCoord2f(listOfElement[tmpChar].posStop.x, listOfElement[tmpChar].posStop.y); glVertex3f(drawPosition.x + listOfElement[tmpChar].size.x, drawPosition.y + listOfElement[tmpChar].size.y, 0.0); + glTexCoord2f(listOfElement[tmpChar].posStart.x, listOfElement[tmpChar].posStop.y); glVertex3f(drawPosition.x, drawPosition.y + listOfElement[tmpChar].size.y, 0.0); + glEnd(); + } tmpVal++; - x += listOfElement[tmpChar].size.x; + drawPosition.x += listOfElement[tmpChar].size.x; } glDisable(GL_TEXTURE_2D); } +// draw the text with a sp\Ufffffffffy background +void ewol::DrawTextWithBg( int32_t fontID, + ewol::fontMode_te displayMode, + int32_t size, + coord3D_ts & drawPosition, + color_ts textColorFg, + color_ts textColorBg, + const char * utf8String) +{ + +} + + + + + diff --git a/Sources/ewolFont.h b/Sources/ewolFont.h index 8d8f2069..648bb626 100644 --- a/Sources/ewolFont.h +++ b/Sources/ewolFont.h @@ -32,6 +32,42 @@ namespace ewol { + typedef enum { + FONT_MODE_NORMAL=0, + FONT_MODE_BOLD, + FONT_MODE_ITALIC, + FONT_MODE_BOLD_ITALIC, + FONT_MODE_NUMBER, + }fontMode_te; + + // load a font in momory, can be done many time for a specific fontname, if you specify true the font will be loaded in memory, otherwise, font is loaded only when needed the first time + bool AddFont(etk::File fontFileName, bool bold=false, bool italic=false, bool boldItalic=false); + // get the name of the font + etk::String GetFontName(int32_t Id); + int32_t GetFontIdWithFileName(etk::File fontFileName); + int32_t GetFontIdWithName(etk::String fontName); + + // get the size of a long string in UTF8 (note that \n and \r represent unknown char...) + int32_t GetStringWidth(int32_t fontID, ewol::fontMode_te displayMode, int32_t size, const char * utf8String); + // get the size of a specific char in UTF8 + int32_t GetCharWidth( int32_t fontID, ewol::fontMode_te displayMode, int32_t size, const char * utf8String);// only one element in the UTF8 string ... + // draw the text without background + void DrawText( int32_t fontID, + ewol::fontMode_te displayMode, + int32_t size, + coord3D_ts & drawPosition, + color_ts textColorFg, + const char * utf8String); + // draw the text with a spécify background + void DrawTextWithBg(int32_t fontID, + ewol::fontMode_te displayMode, + int32_t size, + coord3D_ts & drawPosition, + color_ts textColorFg, + color_ts textColorBg, + const char * utf8String); + + int32_t LoadFont(etk::File fontFileName); void DrawText(double x, double y, const char * myString); }; diff --git a/Sources/ewolOObject.cpp b/Sources/ewolOObject.cpp index ec605489..9468fcbc 100644 --- a/Sources/ewolOObject.cpp +++ b/Sources/ewolOObject.cpp @@ -28,6 +28,8 @@ #include +#undef __class__ +#define __class__ "ewol::OObject2DColored" diff --git a/Sources/ewolOObject.h b/Sources/ewolOObject.h index 8bdbdc25..dd32c1fe 100644 --- a/Sources/ewolOObject.h +++ b/Sources/ewolOObject.h @@ -31,25 +31,6 @@ namespace ewol { extern "C" { - typedef struct { - float x; - float y; - float z; - }coord3D_ts; - typedef struct { - float x; - float y; - }coord2D_ts; - typedef struct { - float u; - float v; - }texCoord_ts; - typedef struct { - float red; - float green; - float blue; - float alpha; - }color_ts; typedef struct { int32_t f; int32_t s; diff --git a/Sources/ewolTexture.cpp b/Sources/ewolTexture.cpp index 178bda38..693db394 100644 --- a/Sources/ewolTexture.cpp +++ b/Sources/ewolTexture.cpp @@ -62,6 +62,10 @@ extern "C" } modeBitmap_te; }; + +#undef __class__ +#define __class__ "ewol::Bitmap" + class Bitmap { private: @@ -83,11 +87,10 @@ class Bitmap FILE *File=NULL; // Get the fileSize ... - if (fileName.Size() < sizeof(bitmapFileHeader_ts) + sizeof(bitmapInfoHeader_ts) ) { + if (fileName.Size() < (int32_t)(sizeof(bitmapFileHeader_ts) + sizeof(bitmapInfoHeader_ts) ) ) { EWOL_ERROR("not enought data in the file named=\"" << fileName << "\""); return; } - unsigned int ImageIdx=0; File=fopen(fileName.GetCompleateName().c_str(),"rb"); if(NULL == File) { EWOL_ERROR("Can not find the file name=\"" << fileName << "\""); @@ -153,7 +156,9 @@ class Bitmap if(0 != m_InfoHeader.biSizeImage) { m_data=new uint8_t[m_InfoHeader.biSizeImage]; - fread(m_data,m_InfoHeader.biSizeImage,1,File); + if (fread(m_data,m_InfoHeader.biSizeImage,1,File) != 1){ + EWOL_CRITICAL("Can not read the file with the good size..."); + } // allocate the destination data ... m_dataGenerate=new uint8_t[m_width*m_height*4]; } @@ -164,7 +169,6 @@ class Bitmap case BITS_16_R5G6B5: { uint16_t * pointer = (uint16_t*)m_data; - uint8_t * pointerdst = m_dataGenerate; for(int32_t yyy=0; yyy> 8); @@ -179,7 +183,6 @@ class Bitmap case BITS_16_X1R5G5B5: { uint16_t * pointer = (uint16_t*)m_data; - uint8_t * pointerdst = m_dataGenerate; for(int32_t yyy=0; yyy> 7); @@ -308,8 +311,31 @@ class Bitmap #include #include +class LoadedTexture +{ + public: + etk::File m_filename; + int32_t m_nbTimeLoaded; + int32_t m_imageSize; // must be x=y ... + uint32_t m_openGlTextureID; +}; + +etk::VectorType listLoadedTexture; + + +#undef __class__ +#define __class__ "ewol" + int32_t ewol::LoadTexture(etk::File fileName) { + if (listLoadedTexture.Size()!=0) { + for (int32_t iii=0; iiim_filename == fileName) { + listLoadedTexture[iii]->m_nbTimeLoaded++; + return listLoadedTexture[iii]->m_openGlTextureID; + } + } + } etk::String fileExtention = fileName.GetExtention(); if (fileExtention == "bmp") { if (false == fileName.Exist()) { @@ -319,6 +345,10 @@ int32_t ewol::LoadTexture(etk::File fileName) Bitmap myBitmap(fileName); myBitmap.Display(); if (myBitmap.LoadOK() == true) { + if (myBitmap.Width()!= myBitmap.Height()) { + EWOL_ERROR("Texture can not have Width=" << myBitmap.Width() << "px different of height=" << myBitmap.Height() << "px in file:" << fileName); + return -1; + } GLuint textureid; glGenTextures(1, &textureid); glBindTexture(GL_TEXTURE_2D, textureid); @@ -331,18 +361,56 @@ int32_t ewol::LoadTexture(etk::File fileName) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, myBitmap.Width(), myBitmap.Height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, myBitmap.Data()); + LoadedTexture *tmpTex = new LoadedTexture(); + if (NULL != tmpTex) { + tmpTex->m_filename = fileName; + tmpTex->m_nbTimeLoaded = 1; + tmpTex->m_imageSize = myBitmap.Width(); + tmpTex->m_openGlTextureID = textureid; + listLoadedTexture.PushBack(tmpTex); + } else { + EWOL_ERROR("Allocation ERROR... "); + } return textureid; } else { return -1; } } else { - EWOL_ERROR("Extention not manage " << fileName); + EWOL_ERROR("Extention not managed " << fileName << " Sopported extention : .bmp"); return -1; } } -void ewol::UnLoadTexture(int32_t textureID) +void ewol::UnLoadTexture(uint32_t textureID) { - + if (listLoadedTexture.Size()!=0) { + for (int32_t iii=0; iiim_openGlTextureID == textureID) { + listLoadedTexture[iii]->m_nbTimeLoaded--; + if (0 == listLoadedTexture[iii]->m_nbTimeLoaded) { + EWOL_DEBUG("Remove openGL texture ID=" << textureID << " file:" << listLoadedTexture[iii]->m_filename); + glDeleteTextures(1,&listLoadedTexture[iii]->m_openGlTextureID); + delete(listLoadedTexture[iii]); + listLoadedTexture[iii] = NULL; + listLoadedTexture.Erase(iii); + return; + } + } + } + } + EWOL_CRITICAL("Can not find TextureId=" << textureID << " in the list of texture loaded...==> to remove it ..."); } + +int32_t ewol::GetTextureSize(uint32_t textureID) +{ + if (listLoadedTexture.Size()!=0) { + for (int32_t iii=0; iiim_openGlTextureID == textureID) { + return listLoadedTexture[iii]->m_imageSize; + } + } + } + EWOL_ERROR("Can not find TextureId=" << textureID << " in the list of texture loaded..."); + return -1; +} \ No newline at end of file diff --git a/Sources/ewolTexture.h b/Sources/ewolTexture.h index 108d9698..ecfdcab5 100644 --- a/Sources/ewolTexture.h +++ b/Sources/ewolTexture.h @@ -32,7 +32,8 @@ namespace ewol { int32_t LoadTexture(etk::File fileName); - void UnLoadTexture(int32_t textureID); + void UnLoadTexture(uint32_t textureID); + int32_t GetTextureSize(uint32_t textureID); }; #endif diff --git a/Sources/ewolWidget.cpp b/Sources/ewolWidget.cpp index b06d06a4..8e5ddc6f 100644 --- a/Sources/ewolWidget.cpp +++ b/Sources/ewolWidget.cpp @@ -24,6 +24,8 @@ #include +#undef __class__ +#define __class__ "ewol::Widget" ewol::Widget::Widget(void) { diff --git a/Sources/ewolWindows.cpp b/Sources/ewolWindows.cpp index 7a6c1d87..c7c5fbbe 100644 --- a/Sources/ewolWindows.cpp +++ b/Sources/ewolWindows.cpp @@ -32,6 +32,10 @@ #include +#undef __class__ +#define __class__ "ewol::Windows" + + //list of local events : const char * ewolEventWindowsClose = "ewol Windows close"; const char * ewolEventWindowsMinimize = "ewol Windows minimize"; @@ -124,6 +128,7 @@ void ewol::Windows::SysDraw(void) static int32_t texID4 = -1; static int32_t texID5 = -1; static int32_t texID6 = -1; + static int32_t fontID = -1; if (false == isinit) { isinit=true; @@ -166,7 +171,9 @@ void ewol::Windows::SysDraw(void) myOObject.Rectangle(200, 300, 900, 54, 0.0, 0.0, 0.0, 1.0); myOObject.Rectangle(200, 300, 900, 13, 0.0, 1.0, 0.0, 1.0); myOObject.Rectangle(200, 343, 900, 11, 1.0, 0.0, 0.0, 1.0); - int32_t fontID = ewol::LoadFont("dataTest/TextMonospace.ebt"); + if (true == ewol::AddFont("dataTest/TextMonospace.ebt", true, true, true) ) { + fontID = GetFontIdWithFileName("dataTest/TextMonospace.ebt"); + } } @@ -275,8 +282,21 @@ void ewol::Windows::SysDraw(void) } - ewol::DrawText(200, 300, "APet9_$*µ:/?,>< \"#',;KkgGyYf"); + coord3D_ts drawPosition = { 200.0, 300.0, 0.0}; + color_ts textColorFg = { 1.0, 1.0, 1.0, 1.0}; + ewol::DrawText(fontID, FONT_MODE_NORMAL, 54, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf"); + drawPosition = { 200.0, 350.0, 0.0}; + textColorFg = { 1.0, 0.0, 0.0, 1.0}; + ewol::DrawText(fontID, FONT_MODE_BOLD, 54, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf"); + + drawPosition = { 200.0, 400.0, 0.0}; + textColorFg = { 0.0, 1.0, 0.0, 1.0}; + ewol::DrawText(fontID, FONT_MODE_ITALIC, 54, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf"); + + drawPosition = { 200.0, 450.0, 0.0}; + textColorFg = { 0.0, 0.0, 1.0, 1.0}; + ewol::DrawText(fontID, FONT_MODE_BOLD_ITALIC, 54, drawPosition, textColorFg,"APet9_$*:/?,>< \"#',;KkgGyYf"); } diff --git a/dataTest/TextMonospace.ebt b/dataTest/TextMonospace.ebt index 1e503329..8bfca011 100644 --- a/dataTest/TextMonospace.ebt +++ b/dataTest/TextMonospace.ebt @@ -6,7 +6,7 @@ italic:TextMonospaceItalic.bmp # comment line ... # size 54 largeur 33 space between letter 12 # unknow UTF8 code of the letter and start coordonate and size ==> 0x54 (33,45) (33,54) -0x00 (99,458) (33,54) # Error : Unknow the UTF8 element ... +0x00 (99,453) (33,54) # Error : Unknow the UTF8 element ... # hexa UTF8 code of the letter and start coordonate and size ==> 0x54 (33,45) (33,54) # ABCDEFGHIJKLMN 0x20 (0,7) (33,54) # space ... @@ -100,10 +100,10 @@ italic:TextMonospaceItalic.bmp 0x5D (264,335) (33,54) # ] 0x3D (297,335) (33,54) # = 0x7D (330,335) (33,54) # } -#0x (363,335) (33,54) # -#0x (396,335) (33,54) # -#0x (429,335) (33,54) # -#0x (462,335) (33,54) # +#0x (363,335) (33,54) # o chap +#0x (396,335) (33,54) # u chap +#0x (429,335) (33,54) # e chap +#0x (462,335) (33,54) # a chap #$£*µ%!§:/ #0x (0,391) (33,54) # i chap #0x (33,391) (33,54) # o trema