[DEBUG] correct distance field

This commit is contained in:
Edouard DUPIN 2018-10-23 22:17:20 +02:00
parent 844aaa90dd
commit efd3b160ad
10 changed files with 90 additions and 166 deletions

View File

@ -30,7 +30,7 @@ void main(void) {
// Smooth // Smooth
gl_FragColor = vec4(f_color[0], f_color[1], f_color[2], f_color[3]*alpha); gl_FragColor = vec4(f_color[0], f_color[1], f_color[2], f_color[3]*alpha);
//gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
// Outline // Outline
/* /*
float mu = smoothstep(outline_center-width, outline_center+width, dist); float mu = smoothstep(outline_center-width, outline_center+width, dist);

View File

@ -132,10 +132,9 @@ void ewol::resource::DistanceFieldFont::init(const etk::String& _fontName) {
m_sizeRatio = ((float)SIZE_GENERATION) / ((float)m_font->getHeight(SIZE_GENERATION)); m_sizeRatio = ((float)SIZE_GENERATION) / ((float)m_font->getHeight(SIZE_GENERATION));
// TODO : basic font use 512 is better ... == > maybe estimate it with the dpi ??? // TODO : basic font use 512 is better ... == > maybe estimate it with the dpi ???
setImageSize(ivec2(256,32)); setImageSize(ivec2(512,32));
// now we can acces directly on the image // now we can acces directly on the image
m_data.clear(etk::Color<>(0x00000000)); m_data.clear(etk::Color<>(0x00000000));
// add error glyph // add error glyph
addGlyph(0); addGlyph(0);
// by default we set only the first AINSI char availlable // by default we set only the first AINSI char availlable
@ -143,7 +142,12 @@ void ewol::resource::DistanceFieldFont::init(const etk::String& _fontName) {
addGlyph(iii); addGlyph(iii);
} }
flush(); flush();
//exportOnFile(); if (true) {
EWOL_ERROR("Save in cache the loaded data ..... ");
egami::store(m_data, "CACHE:///fileFont.bmp"); // ==> for debug test only ...
egami::store(m_data, "CACHE:///fileFont.png");
}
exportOnFile();
} }
ewol::resource::DistanceFieldFont::~DistanceFieldFont() { ewol::resource::DistanceFieldFont::~DistanceFieldFont() {
@ -158,15 +162,25 @@ float ewol::resource::DistanceFieldFont::getDisplayRatio(float _size) {
void ewol::resource::DistanceFieldFont::generateDistanceField(const egami::ImageMono& _input, egami::Image& _output) { void ewol::resource::DistanceFieldFont::generateDistanceField(const egami::ImageMono& _input, egami::Image& _output) {
EWOL_INFO("Generate Distance field font [START]");
EWOL_INFO(" _input.getSize()=" << _input.getSize());
ethread::RecursiveLock lock(m_mutex); ethread::RecursiveLock lock(m_mutex);
int32_t size = _input.getSize().x() * _input.getSize().y(); int32_t size = _input.getSize().x() * _input.getSize().y();
etk::Vector<short> xdist(size); etk::Vector<short> xdist;
etk::Vector<short> ydist(size); etk::Vector<short> ydist;
etk::Vector<double> gx(size); etk::Vector<double> gx;
etk::Vector<double> gy(size); etk::Vector<double> gy;
etk::Vector<double> data(size); etk::Vector<double> data;
etk::Vector<double> outside(size); etk::Vector<double> outside;
etk::Vector<double> inside(size); etk::Vector<double> inside;
xdist.resize(size, 0);
ydist.resize(size, 0);
gx.resize(size, 0.0);
gy.resize(size, 0.0);
data.resize(size, 0.0);
outside.resize(size, 0.0);
inside.resize(size, 0.0);
EWOL_INFO(" size=" << size);
// Convert img into double (data) // Convert img into double (data)
double img_min = 255, img_max = -255; double img_min = 255, img_max = -255;
for (int32_t yyy = 0; yyy < _input.getSize().y(); ++yyy) { for (int32_t yyy = 0; yyy < _input.getSize().y(); ++yyy) {
@ -189,7 +203,6 @@ void ewol::resource::DistanceFieldFont::generateDistanceField(const egami::Image
data[iii] = (_input.get(ivec2(xxx, yyy))-img_min)/img_max; data[iii] = (_input.get(ivec2(xxx, yyy))-img_min)/img_max;
} }
} }
// Compute outside = edtaa3(bitmap); % Transform background (0's) // Compute outside = edtaa3(bitmap); % Transform background (0's)
computegradient(&data[0], _input.getSize().x(), _input.getSize().y(), &gx[0], &gy[0]); computegradient(&data[0], _input.getSize().x(), _input.getSize().y(), &gx[0], &gy[0]);
edtaa3(&data[0], &gx[0], &gy[0], _input.getSize().x(), _input.getSize().y(), &xdist[0], &ydist[0], &outside[0]); edtaa3(&data[0], &gx[0], &gy[0], _input.getSize().x(), _input.getSize().y(), &xdist[0], &ydist[0], &outside[0]);
@ -198,7 +211,6 @@ void ewol::resource::DistanceFieldFont::generateDistanceField(const egami::Image
outside[iii] = 0.0; outside[iii] = 0.0;
} }
} }
// Compute inside = edtaa3(1-bitmap); % Transform foreground (1's) // Compute inside = edtaa3(1-bitmap); % Transform foreground (1's)
for(size_t iii = 0; iii < gx.size(); ++iii) { for(size_t iii = 0; iii < gx.size(); ++iii) {
gx[iii] = 0; gx[iii] = 0;
@ -216,7 +228,7 @@ void ewol::resource::DistanceFieldFont::generateDistanceField(const egami::Image
inside[iii] = 0.0; inside[iii] = 0.0;
} }
} }
EWOL_INFO(" _output=" << _output);
_output.resize(_input.getSize(), etk::Color<>(0)); _output.resize(_input.getSize(), etk::Color<>(0));
_output.clear(etk::Color<>(0)); _output.clear(etk::Color<>(0));
for (int32_t xxx = 0; xxx < _output.getSize().x(); ++xxx) { for (int32_t xxx = 0; xxx < _output.getSize().x(); ++xxx) {
@ -235,6 +247,7 @@ void ewol::resource::DistanceFieldFont::generateDistanceField(const egami::Image
_output.set(ivec2(xxx, yyy), etk::Color<>((int32_t)val,(int32_t)val,(int32_t)val,255)); _output.set(ivec2(xxx, yyy), etk::Color<>((int32_t)val,(int32_t)val,(int32_t)val,255));
} }
} }
EWOL_INFO(" _output=" << _output);
} }
bool ewol::resource::DistanceFieldFont::addGlyph(const char32_t& _val) { bool ewol::resource::DistanceFieldFont::addGlyph(const char32_t& _val) {
@ -247,11 +260,11 @@ bool ewol::resource::DistanceFieldFont::addGlyph(const char32_t& _val) {
GlyphProperty tmpchar; GlyphProperty tmpchar;
tmpchar.m_UVal = _val; tmpchar.m_UVal = _val;
egami::ImageMono imageGlyphRaw; egami::ImageMono imageGlyphRaw;
egami::Image imageGlyphDistanceField; egami::Image imageGlyphDistanceField(ivec2(32,32), egami::colorType::RGBA8);
EWOL_DEBUG("Generate Glyph : " << _val); EWOL_DEBUG("Generate Glyph : " << _val);
if (m_font->getGlyphProperty(SIZE_GENERATION, tmpchar) == true) { if (m_font->getGlyphProperty(SIZE_GENERATION, tmpchar) == true) {
//EWOL_DEBUG("load char : '" << _val << "'=" << _val.get()); //EWOL_DEBUG("load char: '" << _val << "'=" << _val);
hasChange = true; hasChange = true;
// change line if needed ... // change line if needed ...
if (m_lastGlyphPos.x() + tmpchar.m_sizeTexture.x()+m_borderSize*2.0 > m_data.getSize().x()) { if (m_lastGlyphPos.x() + tmpchar.m_sizeTexture.x()+m_borderSize*2.0 > m_data.getSize().x()) {
@ -262,6 +275,7 @@ bool ewol::resource::DistanceFieldFont::addGlyph(const char32_t& _val) {
while(m_lastGlyphPos.y()+tmpchar.m_sizeTexture.y()+m_borderSize*2.0 > m_data.getSize().y()) { while(m_lastGlyphPos.y()+tmpchar.m_sizeTexture.y()+m_borderSize*2.0 > m_data.getSize().y()) {
ivec2 size = m_data.getSize(); ivec2 size = m_data.getSize();
size.setY(size.y()*2); size.setY(size.y()*2);
EWOL_VERBOSE("resize " << m_data.getSize() << " => " << size);
m_data.resize(size, etk::Color<>(0)); m_data.resize(size, etk::Color<>(0));
// change the coordonate on the element in the texture // change the coordonate on the element in the texture
for (size_t jjj = 0; jjj < m_listElement.size(); ++jjj) { for (size_t jjj = 0; jjj < m_listElement.size(); ++jjj) {
@ -275,15 +289,16 @@ bool ewol::resource::DistanceFieldFont::addGlyph(const char32_t& _val) {
m_font->drawGlyph(imageGlyphRaw, SIZE_GENERATION, tmpchar, m_borderSize); m_font->drawGlyph(imageGlyphRaw, SIZE_GENERATION, tmpchar, m_borderSize);
generateDistanceField(imageGlyphRaw, imageGlyphDistanceField); generateDistanceField(imageGlyphRaw, imageGlyphDistanceField);
/*
if (_val == 'Z') { if (_val == 100) {
EWOL_DEBUG("print char: " << _val << " size=" << imageGlyphDistanceField.getSize());
for (int32_t yyy = 0; yyy < imageGlyphDistanceField.getSize().y(); ++yyy) { for (int32_t yyy = 0; yyy < imageGlyphDistanceField.getSize().y(); ++yyy) {
for (int32_t xxx = 0; xxx < imageGlyphDistanceField.getSize().x(); ++xxx) { for (int32_t xxx = 0; xxx < imageGlyphDistanceField.getSize().x(); ++xxx) {
EWOL_DEBUG((int)(imageGlyphDistanceField.get(ivec2(xxx, yyy)).r()) << " "); EWOL_PRINT((int)(imageGlyphDistanceField.get(ivec2(xxx, yyy)).r()) << " ");
} }
} }
} }
*/
m_data.insert(m_lastGlyphPos, imageGlyphDistanceField); m_data.insert(m_lastGlyphPos, imageGlyphDistanceField);
// set image position // set image position
@ -313,7 +328,9 @@ bool ewol::resource::DistanceFieldFont::addGlyph(const char32_t& _val) {
} }
if (hasChange == true) { if (hasChange == true) {
flush(); flush();
//egami::store(m_data, "fileFont.bmp"); // ==> for debug test only ... //EWOL_ERROR("Save in cache the loaded data ..... ");
//egami::store(m_data, "CACHE:///fileFont.bmp"); // ==> for debug test only ...
//egami::store(m_data, "CACHE:///fileFont.png");
} }
return hasChange; return hasChange;
} }
@ -347,7 +364,7 @@ int32_t ewol::resource::DistanceFieldFont::getIndex(char32_t _charcode) {
ewol::GlyphProperty* ewol::resource::DistanceFieldFont::getGlyphPointer(const char32_t& _charcode) { ewol::GlyphProperty* ewol::resource::DistanceFieldFont::getGlyphPointer(const char32_t& _charcode) {
ethread::RecursiveLock lock(m_mutex); ethread::RecursiveLock lock(m_mutex);
//EWOL_DEBUG("Get glyph property for mode: " << _displayMode << " == > wrapping index : " << m_modeWraping[_displayMode]); EWOL_VERBOSE("getGlyphPointer : " << uint32_t(_charcode));
int32_t index = getIndex(_charcode); int32_t index = getIndex(_charcode);
if( index < 0 if( index < 0
|| (size_t)index >= m_listElement.size() ) { || (size_t)index >= m_listElement.size() ) {
@ -389,10 +406,11 @@ void ewol::resource::DistanceFieldFont::exportOnFile() {
doc.add("m_borderSize", ejson::Number(m_borderSize)); doc.add("m_borderSize", ejson::Number(m_borderSize));
doc.add("m_textureBorderSize", ejson::String(m_textureBorderSize)); doc.add("m_textureBorderSize", ejson::String(m_textureBorderSize));
etk::Uri tmpUri = m_fileName; etk::Uri tmpUri = m_fileName;
tmpUri.setScheme("CACHE");
tmpUri.setPath(m_fileName.getPath() + ".json"); tmpUri.setPath(m_fileName.getPath() + ".json");
doc.store(tmpUri); doc.store(tmpUri);
tmpUri.setPath(m_fileName.getPath() + ".bmp"); //tmpUri.setPath(m_fileName.getPath() + ".bmp");
egami::store(m_data, tmpUri); //egami::store(m_data, tmpUri);
tmpUri.setPath(m_fileName.getPath() + ".png"); tmpUri.setPath(m_fileName.getPath() + ".png");
egami::store(m_data, tmpUri); egami::store(m_data, tmpUri);
} }
@ -400,9 +418,11 @@ void ewol::resource::DistanceFieldFont::exportOnFile() {
bool ewol::resource::DistanceFieldFont::importFromFile() { bool ewol::resource::DistanceFieldFont::importFromFile() {
ethread::RecursiveLock lock(m_mutex); ethread::RecursiveLock lock(m_mutex);
etk::Uri tmpUriJson = m_fileName; etk::Uri tmpUriJson = m_fileName;
tmpUriJson.setScheme("CACHE");
tmpUriJson.setPath(m_fileName.getPath() + ".json"); tmpUriJson.setPath(m_fileName.getPath() + ".json");
etk::Uri tmpUriBmp = m_fileName; etk::Uri tmpUriBmp = m_fileName;
tmpUriBmp.setPath(m_fileName.getPath() + ".bmp"); tmpUriBmp.setScheme("CACHE");
tmpUriBmp.setPath(m_fileName.getPath() + ".png");
EWOL_DEBUG("IMPORT: DistanceFieldFont : file : '" << tmpUriJson << "'"); EWOL_DEBUG("IMPORT: DistanceFieldFont : file : '" << tmpUriJson << "'");
// test file existance: // test file existance:
if ( etk::uri::exist(tmpUriJson) == false if ( etk::uri::exist(tmpUriJson) == false
@ -411,8 +431,14 @@ bool ewol::resource::DistanceFieldFont::importFromFile() {
return false; return false;
} }
ejson::Document doc; ejson::Document doc;
doc.load(tmpUriJson); if (doc.load(tmpUriJson) == false) {
return false;
}
egami::Image tmpImage = egami::load(tmpUriBmp);
if (tmpImage.exist() == false) {
return false;
}
m_data = tmpImage;
m_sizeRatio = doc["m_sizeRatio"].toNumber().get(0); m_sizeRatio = doc["m_sizeRatio"].toNumber().get(0);
m_lastGlyphPos = doc["m_lastGlyphPos"].toString().get("0,0"); m_lastGlyphPos = doc["m_lastGlyphPos"].toString().get("0,0");
m_lastRawHeigh = doc["m_lastRawHeigh"].toNumber().get(0); m_lastRawHeigh = doc["m_lastRawHeigh"].toNumber().get(0);
@ -440,6 +466,5 @@ bool ewol::resource::DistanceFieldFont::importFromFile() {
prop.m_exist = tmpObj["m_exist"].toBoolean().get(false); prop.m_exist = tmpObj["m_exist"].toBoolean().get(false);
m_listElement.pushBack(prop); m_listElement.pushBack(prop);
} }
m_data = egami::load(tmpUriBmp);
return m_data.exist(); return m_data.exist();
} }

View File

@ -158,7 +158,7 @@ bool ewol::resource::FontFreeType::drawGlyph(egami::Image& _imageOut,
ewol::GlyphProperty& _property, ewol::GlyphProperty& _property,
int8_t _posInImage) { int8_t _posInImage) {
ethread::RecursiveLock lock(m_mutex); ethread::RecursiveLock lock(m_mutex);
if(false == m_init) { if(m_init == false) {
return false; return false;
} }
// 300dpi (hight quality) 96 dpi (normal quality) // 300dpi (hight quality) 96 dpi (normal quality)

View File

@ -54,13 +54,20 @@ void ewol::resource::ImageDF::init(etk::String _genName, const etk::Uri& _uri, c
void ewol::resource::ImageDF::generateDistanceField(const egami::ImageMono& _input, egami::Image& _output) { void ewol::resource::ImageDF::generateDistanceField(const egami::ImageMono& _input, egami::Image& _output) {
ethread::RecursiveLock lock(m_mutex); ethread::RecursiveLock lock(m_mutex);
int32_t size = _input.getSize().x() * _input.getSize().y(); int32_t size = _input.getSize().x() * _input.getSize().y();
etk::Vector<short> xdist(size); etk::Vector<short> xdist;
etk::Vector<short> ydist(size); etk::Vector<short> ydist;
etk::Vector<double> gx(size); etk::Vector<double> gx;
etk::Vector<double> gy(size); etk::Vector<double> gy;
etk::Vector<double> data(size); etk::Vector<double> data;
etk::Vector<double> outside(size); etk::Vector<double> outside;
etk::Vector<double> inside(size); etk::Vector<double> inside;
xdist.resize(size, 0);
ydist.resize(size, 0);
gx.resize(size, 0.0);
gy.resize(size, 0.0);
data.resize(size, 0.0);
outside.resize(size, 0.0);
inside.resize(size, 0.0);
// Convert img into double (data) // Convert img into double (data)
double img_min = 255, img_max = -255; double img_min = 255, img_max = -255;
for (int32_t yyy = 0; yyy < _input.getSize().y(); ++yyy) { for (int32_t yyy = 0; yyy < _input.getSize().y(); ++yyy) {

View File

@ -1,82 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2010, Edouard DUPIN, all right reserved
* @license BSD v3 (see license file)
*/
#include <appl/debug.hpp>
#include <appl/TestDistanceField.hpp>
#include <ewol/widget/Button.hpp>
#include <ewol/widget/CheckBox.hpp>
#include <ewol/widget/Sizer.hpp>
#include <ewol/widget/Label.hpp>
#include <ewol/widget/Entry.hpp>
#include <ewol/widget/List.hpp>
#include <ewol/widget/ContextMenu.hpp>
#include <ewol/widget/PopUp.hpp>
#include <ewol/widget/Slider.hpp>
#include <ewol/widget/Composer.hpp>
#include <ewol/widget/Menu.hpp>
#include <ewol/widget/meta/FileChooser.hpp>
#include <ewol/widget/meta/Parameter.hpp>
#include <ewol/widget/Manager.hpp>
appl::TestDistanceField::TestDistanceField(){
addObjectType("appl::TestDistanceField");
}
void appl::TestDistanceField::init() {
ewol::Widget::init();
APPL_INFO("Create appl::TestDistanceField (start)");
propertyExpand.set(bvec2(true, true));
propertyFill.set(bvec2(true, true));
APPL_INFO("Create appl::TestDistanceField (end)");
}
void appl::TestDistanceField::calculateSize(const vec2& _availlable) {
// set minimal size
m_size = _availlable;
}
void appl::TestDistanceField::calculateMinMaxSize() {
m_minSize = vec2(256,256);
markToRedraw();
}
void appl::TestDistanceField::onDraw() {
m_text2.draw();
m_text1.draw();
}
void appl::TestDistanceField::onRegenerateDisplay() {
if (false == needRedraw()) {
return;
}
APPL_WARNING("Regenerate...");
m_text1.clear();
m_text1.setPos(vec3(m_size.x()*0.5-20,m_size.y()*0.5+10,0));
m_text1.printDecorated("Text To compare ... Avenue AAVVAA ... Normal generic test");
m_text2.clear();
m_text2.setPos(vec3(m_size.x()*0.5-20,m_size.y()*0.5-10,0));
m_text2.printDecorated("Text To compare ... Avenue AAVVAA ... Test en distance field Mode");
}
bool appl::TestDistanceField::onEventInput(const ewol::event::Input& _event) {
if (_event.getId() == 4) {
setZoom(getZoom() + 0.01f);
} else if (_event.getId() == 5) {
setZoom(getZoom() - 0.01f);
}
return true;
}

View File

@ -1,34 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2010, Edouard DUPIN, all right reserved
* @license BSD v3 (see license file)
*/
#pragma once
#include <appl/debug.hpp>
#include <ewol/widget/Widget.hpp>
#include <ewol/compositing/Text.hpp>
#include <ewol/compositing/TextDF.hpp>
#include <gale/resource/Program.hpp>
#include <ewol/resource/DistanceFieldFont.hpp>
namespace appl {
class TestDistanceField : public ewol::Widget {
ewol::compositing::Text m_text1;
ewol::compositing::TextDF m_text2;
public:
// Constructeur
TestDistanceField();
void init();
public:
DECLARE_FACTORY(TestDistanceField);
virtual ~TestDistanceField() {};
public: // Derived function
virtual void onDraw();
virtual void calculateMinMaxSize();
virtual void calculateSize(const vec2& _availlable);
virtual void onRegenerateDisplay();
virtual bool onEventInput(const ewol::event::Input& _event);
};
}

View File

@ -129,10 +129,14 @@ void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) {
etk::String tmpConstruct; etk::String tmpConstruct;
switch(m_idWidget) { switch(m_idWidget) {
case 0: case 0:
tmpConstruct = "<TestDistanceField />\n";
tmpDescription = "Test Distance Field";
break;
case 1:
tmpConstruct = "<image src='DATA:///sphere.png'/>\n"; tmpConstruct = "<image src='DATA:///sphere.png'/>\n";
tmpDescription = "Test ewol::widget::Image"; tmpDescription = "Test ewol::widget::Image";
break; break;
case 1: case 2:
tmpConstruct = etk::String() tmpConstruct = etk::String()
+ "<select>\n" + "<select>\n"
+ " <option id='1'>plop 1</option>\n" + " <option id='1'>plop 1</option>\n"
@ -143,31 +147,31 @@ void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) {
+ "</select>\n"; + "</select>\n";
tmpDescription = "Test ewol::widget::Select"; tmpDescription = "Test ewol::widget::Select";
break; break;
case 2: case 3:
tmpConstruct = "<ButtonColor/>"; tmpConstruct = "<ButtonColor/>";
tmpDescription = "Test ewol::widget::ButtonColor"; tmpDescription = "Test ewol::widget::ButtonColor";
break; break;
case 3: case 4:
tmpConstruct = "<label>Simple string</label>\n"; tmpConstruct = "<label>Simple string</label>\n";
tmpDescription = "Test ewol::widget::Label"; tmpDescription = "Test ewol::widget::Label";
break; break;
case 4: case 5:
tmpConstruct = "<spin/>\n"; tmpConstruct = "<spin/>\n";
tmpDescription = "Test ewol::widget::Spin"; tmpDescription = "Test ewol::widget::Spin";
break; break;
case 5: case 6:
tmpConstruct = "<checkbox><label>Simple string</label></checkbox>\n"; tmpConstruct = "<checkbox><label>Simple string</label></checkbox>\n";
tmpDescription = "Test ewol::widget::Checkbox"; tmpDescription = "Test ewol::widget::Checkbox";
break; break;
case 6: case 7:
tmpConstruct = "<entry/>\n"; tmpConstruct = "<entry/>\n";
tmpDescription = "Test ewol::widget::Entry"; tmpDescription = "Test ewol::widget::Entry";
break; break;
case 7: case 8:
tmpConstruct = "<slider/>\n"; tmpConstruct = "<slider/>\n";
tmpDescription = "Test ewol::widget::Entry"; tmpDescription = "Test ewol::widget::Entry";
break; break;
case 8: case 9:
tmpConstruct = etk::String() tmpConstruct = etk::String()
+ "<button name='[TEST]Button:TO-TEST' expand='false,false' fill='false,false' >\n" + "<button name='[TEST]Button:TO-TEST' expand='false,false' fill='false,false' >\n"
+ " <label>My <font color='#FF0000'>Button</font> <br/> And Some under line<br/> plop <br/> and an other super long line ...</label>\n" + " <label>My <font color='#FF0000'>Button</font> <br/> And Some under line<br/> plop <br/> and an other super long line ...</label>\n"

View File

@ -60,15 +60,17 @@ void appl::TestDistanceField::onRegenerateDisplay() {
if (false == needRedraw()) { if (false == needRedraw()) {
return; return;
} }
APPL_WARNING("Regenerate..."); APPL_DEBUG("Regenerate...");
m_text1.clear(); m_text1.clear();
m_text1.setPos(vec3(m_size.x()*0.5-20,m_size.y()*0.5+10,0)); m_text1.setPos(vec3(m_size.x()*0.5-20,m_size.y()*0.5+20,0));
m_text1.printDecorated("Text To compare ... Avenue AAVVAA ... Normal generic test"); m_text1.printDecorated("Text To compare ... <br/>Avenue AAVVAA ... Normal generic test");
APPL_DEBUG("Regenerate.2.");
m_text2.clear(); m_text2.clear();
m_text2.setPos(vec3(m_size.x()*0.5-20,m_size.y()*0.5-10,0)); m_text2.setPos(vec3(m_size.x()*0.5-20,m_size.y()*0.5-20,0));
m_text2.printDecorated("Text To compare ... Avenue AAVVAA ... Test en distance field Mode"); m_text2.printDecorated("Text To compare ... <br/>Avenue AAVVAA ... Test en distance field Mode");
APPL_DEBUG("Regenerate.3.");
} }
bool appl::TestDistanceField::onEventInput(const ewol::event::Input& _event) { bool appl::TestDistanceField::onEventInput(const ewol::event::Input& _event) {

View File

@ -21,7 +21,7 @@ namespace appl {
TestDistanceField(); TestDistanceField();
void init(); void init();
public: public:
DECLARE_FACTORY(TestDistanceField); DECLARE_WIDGET_FACTORY(TestDistanceField, "TestDistanceField");
virtual ~TestDistanceField() {}; virtual ~TestDistanceField() {};
public: // Derived function public: // Derived function
virtual void onDraw(); virtual void onDraw();

View File

@ -14,6 +14,7 @@
#include <appl/debug.hpp> #include <appl/debug.hpp>
#include <appl/MainWindows.hpp> #include <appl/MainWindows.hpp>
#include <appl/widget/SizerColor.hpp> #include <appl/widget/SizerColor.hpp>
#include <appl/TestDistanceField.hpp>
namespace appl { namespace appl {
class MainApplication : public ewol::context::Application { class MainApplication : public ewol::context::Application {
public: public:
@ -47,6 +48,7 @@ namespace appl {
_context.setIcon("DATA:///icon.png"); _context.setIcon("DATA:///icon.png");
appl::widget::SizerColor::createManagerWidget(_context.getWidgetManager()); appl::widget::SizerColor::createManagerWidget(_context.getWidgetManager());
appl::TestDistanceField::createManagerWidget(_context.getWidgetManager());
APPL_INFO("==> CREATE ... (END)"); APPL_INFO("==> CREATE ... (END)");
} }