[DEV] add distance field for theme image just a big test

This commit is contained in:
Edouard DUPIN 2014-01-19 19:16:51 +01:00
parent 10f9e7c60f
commit 50c9be054d
15 changed files with 476 additions and 43 deletions

24
data/texturedDF.frag Normal file
View File

@ -0,0 +1,24 @@
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
// Input :
uniform sampler2D EW_texID;
uniform float EW_SoftEdgeMin;
uniform float EW_SoftEdgeMax;
uniform int EW_SoftEdge;
varying vec2 f_texcoord;
varying vec4 f_color;
void main(void) {
vec4 color = texture2D(EW_texID, f_texcoord );
float dist = color.r;
float width = fwidth(dist);
float alpha = smoothstep(0.5-width, 0.5+width, dist);
// Smooth
gl_FragColor = vec4(f_color[0], f_color[1], f_color[2], f_color[3]*alpha);
}

22
data/texturedDF.vert Normal file
View File

@ -0,0 +1,22 @@
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
// Input :
attribute vec3 EW_coord3d;
attribute vec2 EW_texture2d;
attribute vec4 EW_color;
uniform mat4 EW_MatrixTransformation;
// output :
varying vec4 f_color;
varying vec2 f_texcoord;
void main(void) {
gl_Position = EW_MatrixTransformation * vec4(EW_coord3d, 1.0);
// set texture output coord
f_texcoord = EW_texture2d;
// set output color :
f_color = EW_color;
}

2
external/egami vendored

@ -1 +1 @@
Subproject commit cd88edc7085edbef3d78bee02104c697a0713057
Subproject commit 2fe76f92055c61a11e84bafbecc4aa0488e0b16e

2
external/etk vendored

@ -1 +1 @@
Subproject commit 7d28c888f7d4d9b3aa92274db82ffeaa63a6a681
Subproject commit 7f26881c3e8e26b1813b039b6ffd973a5126d1a4

View File

@ -12,7 +12,9 @@
#undef __class__
#define __class__ "ewol::compositing::Image"
ewol::compositing::Image::Image(const std::string& _imageName) :
ewol::compositing::Image::Image(const std::string& _imageName, bool _df) :
m_filename(_imageName),
m_requestSize(2,2),
m_position(0.0, 0.0, 0.0),
m_clippingPosStart(0.0, 0.0, 0.0),
m_clippingPosStop(0.0, 0.0, 0.0),
@ -25,21 +27,29 @@ ewol::compositing::Image::Image(const std::string& _imageName) :
m_GLColor(-1),
m_GLtexture(-1),
m_GLtexID(-1),
m_resource(NULL) {
m_distanceFieldMode(_df),
m_resource(NULL),
m_resourceDF(NULL) {
setSource(_imageName);
loadProgram();
}
ewol::compositing::Image::~Image(void) {
ewol::resource::TextureFile::release(m_resource);
ewol::resource::ImageDF::release(m_resourceDF);
ewol::resource::Program::release(m_GLprogram);
}
void ewol::compositing::Image::loadProgram(void) {
// get the shader resource :
m_GLPosition = 0;
m_GLprogram = ewol::resource::Program::keep("DATA:textured3D.prog");
if (NULL!=m_GLprogram) {
ewol::resource::Program::release(m_GLprogram);
if (m_distanceFieldMode == true) {
m_GLprogram = ewol::resource::Program::keep("DATA:texturedDF.prog");
} else {
m_GLprogram = ewol::resource::Program::keep("DATA:textured3D.prog");
}
if (m_GLprogram != NULL) {
m_GLPosition = m_GLprogram->getAttribute("EW_coord3d");
m_GLColor = m_GLprogram->getAttribute("EW_color");
m_GLtexture = m_GLprogram->getAttribute("EW_texture2d");
@ -53,7 +63,8 @@ void ewol::compositing::Image::draw(bool _disableDepthTest) {
//EWOL_WARNING("Nothink to draw...");
return;
}
if (m_resource == NULL) {
if ( m_resource == NULL
&& m_resourceDF == NULL) {
// this is a normale case ... the user can choice to have no image ...
return;
}
@ -71,7 +82,17 @@ void ewol::compositing::Image::draw(bool _disableDepthTest) {
m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat);
// TextureID
m_GLprogram->setTexture0(m_GLtexID, m_resource->getId());
if (m_resource != NULL) {
if (m_distanceFieldMode == true) {
EWOL_ERROR("FONT type error Request distance field and display normal ...");
}
m_GLprogram->setTexture0(m_GLtexID, m_resource->getId());
} else {
if (m_distanceFieldMode == false) {
EWOL_ERROR("FONT type error Request normal and display distance field ...");
}
m_GLprogram->setTexture0(m_GLtexID, m_resourceDF->getId());
}
// position :
m_GLprogram->sendAttribute(m_GLPosition, m_coord);
// Texture :
@ -229,39 +250,67 @@ void ewol::compositing::Image::printPart(const vec2& _size,
void ewol::compositing::Image::setSource(const std::string& _newFile, const vec2& _size) {
clear();
ewol::resource::TextureFile* resource = m_resource;
ewol::resource::ImageDF* resourceDF = m_resourceDF;
m_filename = _newFile;
m_requestSize = _size;
m_resource = NULL;
m_resourceDF = NULL;
ivec2 tmpSize(_size.x(),_size.y());
// note that no image can be loaded...
if (_newFile != "") {
// link to new one
m_resource = ewol::resource::TextureFile::keep(_newFile, tmpSize);
if (NULL == m_resource) {
EWOL_ERROR("Can not get Image resource");
if (m_distanceFieldMode == false) {
m_resource = ewol::resource::TextureFile::keep(m_filename, tmpSize);
if (NULL == m_resource) {
EWOL_ERROR("Can not get Image resource");
}
} else {
m_resourceDF = ewol::resource::ImageDF::keep(_newFile, tmpSize);
if (NULL == m_resourceDF) {
EWOL_ERROR("Can not get Image resource DF");
}
}
}
if (m_resource == NULL) {
if ( m_resource == NULL
&& m_resourceDF == NULL) {
if (resource != NULL) {
EWOL_WARNING("Retrive previous resource");
m_resource = resource;
}
} else {
if (resource != NULL) {
ewol::resource::TextureFile::release(resource);
if (resourceDF != NULL) {
EWOL_WARNING("Retrive previous resource (DF)");
m_resourceDF = resourceDF;
}
} else {
ewol::resource::TextureFile::release(resource);
ewol::resource::ImageDF::release(resourceDF);
}
}
bool ewol::compositing::Image::hasSources(void) {
return m_resource != NULL;
return (m_resource != NULL || m_resourceDF != NULL);
}
vec2 ewol::compositing::Image::getRealSize(void) {
if (NULL == m_resource) {
if ( m_resource == NULL
&& m_resourceDF == NULL) {
return vec2(0,0);
}
return m_resource->getRealSize();
if (m_resource != NULL) {
return m_resource->getRealSize();
}
return m_resourceDF->getRealSize();
}
void ewol::compositing::Image::setDistanceFieldMode(bool _mode) {
if (m_distanceFieldMode == _mode) {
return;
}
m_distanceFieldMode = _mode;
// Force reload input
setSource(m_filename, m_requestSize);
loadProgram();
}

View File

@ -13,11 +13,14 @@
#include <ewol/compositing/Compositing.h>
#include <ewol/resource/Program.h>
#include <ewol/resource/Image.h>
#include <ewol/resource/ImageDF.h>
namespace ewol {
namespace compositing {
class Image : public ewol::Compositing {
private:
std::string m_filename;
ivec2 m_requestSize;
vec3 m_position; //!< The current position to draw
vec3 m_clippingPosStart; //!< Clipping start position
vec3 m_clippingPosStop; //!< Clipping stop position
@ -33,7 +36,9 @@ namespace ewol {
int32_t m_GLtexture; //!< openGL id on the element (Texture position)
int32_t m_GLtexID; //!< openGL id on the element (texture ID)
private:
bool m_distanceFieldMode; //!< select distance field mode
ewol::resource::TextureFile* m_resource; //!< texture resources
ewol::resource::ImageDF* m_resourceDF; //!< texture resources
std::vector<vec3 > m_coord; //!< internal coord of the object
std::vector<vec2 > m_coordTex; //!< internal texture coordinate for every point
std::vector<etk::Color<float> > m_coordColor; //!< internal color of the different point
@ -46,8 +51,9 @@ namespace ewol {
/**
* @brief generic constructor
* @param[in] _imageName Name of the file that might be loaded
* @param[in] _df enable distance field mode
*/
Image(const std::string& _imageName="");
Image(const std::string& _imageName="", bool _df = false);
/**
* @brief generic destructor
*/
@ -164,9 +170,21 @@ namespace ewol {
* @return tre image registered size
*/
vec2 getRealSize(void);
public:
/**
* @brief Set render mode of the image
* @param[in] _mode Activation of distance field mode
*/
void setDistanceFieldMode(bool _mode);
/**
* @brief Get the render methode.
* @return The render mode of the image.
*/
bool getDistanceFieldMode(void) const {
return m_distanceFieldMode;
}
};
};
};
#endif

View File

@ -278,7 +278,7 @@ bool ewol::resource::DistanceFieldFont::addGlyph(const char32_t& _val) {
}
if (hasChange == true) {
flush();
egami::store(m_data, "fileFont.bmp"); // ==> for debug test only ...
//egami::store(m_data, "fileFont.bmp"); // ==> for debug test only ...
}
return hasChange;
}

View File

@ -33,6 +33,10 @@ ewol::resource::TextureFile::TextureFile(std::string _genName, const std::string
}
ivec2 tmp = m_data.getSize();
m_realImageSize = vec2(tmp.x(), tmp.y());
#ifdef GENERATE_DISTANCE_FIELD_MODE
//egami::generateDistanceFieldFile(_tmpfileName, std::string(_tmpfileName, 0, _tmpfileName.size()-4) + ".bmp");
egami::generateDistanceFieldFile(_tmpfileName, std::string(_tmpfileName, 0, _tmpfileName.size()-4) + ".edf");
#endif
flush();
}

View File

@ -0,0 +1,225 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license BSD v3 (see license file)
*/
#include <etk/types.h>
#include <egami/egami.h>
#include <ewol/resource/Manager.h>
#include <ewol/resource/ImageDF.h>
#include <ewol/resource/Texture.h>
#include <edtaa3/edtaa3func.h>
#undef __class__
#define __class__ "resource::TextureFile"
ewol::resource::ImageDF::ImageDF(const std::string& _genName) :
Texture(_genName) {
EWOL_DEBUG("create a new resource::ImageDF : _genName=" << _genName << " _tmpfileName=--- size=---");
}
ewol::resource::ImageDF::ImageDF(std::string _genName, const std::string& _tmpfileName, const ivec2& _size) :
ewol::resource::Texture(_genName) {
addObjectType("ewol::resource::ImageDF");
EWOL_DEBUG("create a new resource::Image : _genName=" << _genName << " _tmpfileName=" << _tmpfileName << " size=" << _size);
if (false == egami::load(m_data, _tmpfileName, _size)) {
EWOL_ERROR("ERROR when loading the image : " << _tmpfileName);
}
ivec2 tmp = m_data.getSize();
m_realImageSize = vec2(tmp.x(), tmp.y());
// distance field Generation
// TODO : if it is not a .edf ==> generate dynamicly ...
/*
egami::ImageMono input;
input.resize(tmp);
for (size_t yyy = 0; yyy < tmp.y(); ++yyy) {
for (size_t xxx = 0; xxx < tmp.x(); ++xxx) {
input.set(ivec2(xxx, yyy), m_data.get(ivec2(xxx, yyy)).a() );
}
}
generateDistanceField(input, m_data);
*/
flush();
}
void ewol::resource::ImageDF::generateDistanceField(const egami::ImageMono& _input, egami::Image& _output) {
int32_t size = _input.getSize().x() * _input.getSize().y();
std::vector<short> xdist(size);
std::vector<short> ydist(size);
std::vector<double> gx(size);
std::vector<double> gy(size);
std::vector<double> data(size);
std::vector<double> outside(size);
std::vector<double> inside(size);
// Convert img into double (data)
double img_min = 255, img_max = -255;
for (int32_t yyy = 0; yyy < _input.getSize().y(); ++yyy) {
for (int32_t xxx = 0; xxx < _input.getSize().x(); ++xxx) {
int32_t iii = yyy * _input.getSize().x() + xxx;
double v = _input.get(ivec2(xxx, yyy));
data[iii] = v;
if (v > img_max) {
img_max = v;
}
if (v < img_min) {
img_min = v;
}
}
}
// Rescale image levels between 0 and 1
for (int32_t yyy = 0; yyy < _input.getSize().y(); ++yyy) {
for (int32_t xxx = 0; xxx < _input.getSize().x(); ++xxx) {
int32_t iii = yyy * _input.getSize().x() + xxx;
data[iii] = (_input.get(ivec2(xxx, yyy))-img_min)/img_max;
}
}
// Compute outside = edtaa3(bitmap); % Transform background (0's)
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]);
for(size_t iii = 0; iii < outside.size(); ++iii) {
if( outside[iii] < 0 ) {
outside[iii] = 0.0;
}
}
// Compute inside = edtaa3(1-bitmap); % Transform foreground (1's)
for(size_t iii = 0; iii < gx.size(); ++iii) {
gx[iii] = 0;
}
for(size_t iii = 0; iii < gy.size(); ++iii) {
gy[iii] = 0;
}
for(size_t iii = 0; iii < data.size(); ++iii) {
data[iii] = 1 - data[iii];
}
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], &inside[0]);
for(size_t iii = 0; iii < inside.size(); ++iii) {
if( inside[iii] < 0 ) {
inside[iii] = 0.0;
}
}
_output.resize(_input.getSize(), etk::Color<>(0));
_output.clear(etk::Color<>(0));
for (int32_t xxx = 0; xxx < _output.getSize().x(); ++xxx) {
for (int32_t yyy = 0; yyy < _output.getSize().y(); ++yyy) {
int32_t iii = yyy * _output.getSize().x() + xxx;
outside[iii] -= inside[iii];
outside[iii] = 128+outside[iii]*16;
if( outside[iii] < 0 ) {
outside[iii] = 0;
}
if( outside[iii] > 255 ) {
outside[iii] = 255;
}
uint8_t val = 255 - (unsigned char) outside[iii];
// TODO : Remove multiple size of the map ...
_output.set(ivec2(xxx, yyy), etk::Color<>((int32_t)val,(int32_t)val,(int32_t)val,256));
}
}
}
#ifdef __TARGET_OS__Android
/**
* @brief get the next power 2 if the input
* @param[in] _value Value that we want the next power of 2
* @return result value
*/
static int32_t nextP2(int32_t _value) {
int32_t val=1;
for (int32_t iii=1; iii<31; iii++) {
if (_value <= val) {
return val;
}
val *=2;
}
EWOL_CRITICAL("impossible CASE.... request P2 of " << _value);
return val;
}
#endif
ewol::resource::ImageDF* ewol::resource::ImageDF::keep(const std::string& _filename, ivec2 _size) {
EWOL_VERBOSE("KEEP: TextureFile: '" << _filename << "' size=" << _size);
if (_filename == "") {
ewol::resource::ImageDF* object = new ewol::resource::ImageDF("");
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ??TEX??");
return NULL;
}
getManager().localAdd(object);
return object;
}
if (_size.x() == 0) {
_size.setX(-1);
//EWOL_ERROR("Error Request the image size.x() =0 ???");
}
if (_size.y() == 0) {
_size.setY(-1);
//EWOL_ERROR("Error Request the image size.y() =0 ???");
}
std::string TmpFilename = _filename;
if (false == end_with(_filename, ".svg") ) {
_size = ivec2(-1,-1);
}
#ifdef __TARGET_OS__MacOs
EWOL_ERROR("TODO : remove this strange hack");
_size = ivec2(64,64);
#endif
if (_size.x()>0 && _size.y()>0) {
EWOL_VERBOSE(" == > specific size : " << _size);
#ifdef __TARGET_OS__Android
_size.setValue(nextP2(_size.x()), nextP2(_size.y()));
#endif
TmpFilename += ":";
TmpFilename += std::to_string(_size.x());
TmpFilename += "x";
TmpFilename += std::to_string(_size.y());
}
EWOL_VERBOSE("KEEP: TextureFile: '" << TmpFilename << "' new size=" << _size);
ewol::resource::ImageDF* object = NULL;
ewol::Resource* object2 = getManager().localKeep("DF__" + TmpFilename);
if (NULL != object2) {
object = dynamic_cast<ewol::resource::ImageDF*>(object2);
if (NULL == object) {
EWOL_CRITICAL("Request resource file : '" << TmpFilename << "' With the wrong type (dynamic cast error)");
return NULL;
}
}
if (NULL != object) {
return object;
}
EWOL_INFO("CREATE: ImageDF: '" << TmpFilename << "' size=" << _size);
// need to crate a new one ...
object = new ewol::resource::ImageDF("DF__" + TmpFilename, _filename, _size);
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : " << _filename);
return NULL;
}
getManager().localAdd(object);
return object;
}
void ewol::resource::ImageDF::release(ewol::resource::ImageDF*& _object) {
if (NULL == _object) {
return;
}
ewol::Resource* object2 = static_cast<ewol::Resource*>(_object);
getManager().release(object2);
_object = NULL;
}

View File

@ -0,0 +1,57 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license BSD v3 (see license file)
*/
#ifndef __EWOL_RESOURCE_IMAGE_DISTANCE_FIELD_H__
#define __EWOL_RESOURCE_IMAGE_DISTANCE_FIELD_H__
#include <etk/types.h>
#include <etk/types.h>
#include <egami/Image.h>
#include <egami/ImageMono.h>
#include <ewol/resource/Texture.h>
#include <ewol/resource/Resource.h>
namespace ewol {
namespace resource {
class ImageDF : public ewol::resource::Texture {
protected:
vec2 m_realImageSize;
protected:
ImageDF(const std::string& _genName);
ImageDF(std::string _genName, const std::string& _fileName, const ivec2& _size);
virtual ~ImageDF(void) { };
/**
* @brief Generate distance field of this Image input.
* @param[in] _input Input image to change in distance field mode.
* @param[out] _output New image generate with this image _input.
*/
void generateDistanceField(const egami::ImageMono& _input, egami::Image& _output);
public:
const vec2& getRealSize(void) {
return m_realImageSize;
};
public:
/**
* @brief keep the resource pointer.
* @note Never free this pointer by your own...
* @param[in] _filename Name of the image file.
* @param[in] _requested size of the image (usefull when loading .svg to automatic rescale)
* @return pointer on the resource or NULL if an error occured.
*/
static ewol::resource::ImageDF* keep(const std::string& _filename, ivec2 _size=ivec2(-1,-1));
/**
* @brief release the keeped resources
* @param[in,out] reference on the object pointer
*/
static void release(ewol::resource::ImageDF*& _object);
};
};
};
#endif

View File

@ -31,6 +31,7 @@ const char * const ewol::widget::Image::configRatio = "ratio";
const char * const ewol::widget::Image::configSize = "size";
const char * const ewol::widget::Image::configBorder = "border";
const char * const ewol::widget::Image::configSource = "src";
const char * const ewol::widget::Image::configDistanceField = "distance-field";
ewol::widget::Image::Image(const std::string& _file, const ewol::Dimension& _border) :
m_imageSize(vec2(0,0)),
@ -41,6 +42,7 @@ ewol::widget::Image::Image(const std::string& _file, const ewol::Dimension& _bor
registerConfig(configSize, "Dimension", NULL, "Basic display size of the image");
registerConfig(configBorder, "Dimension", NULL, "Border of the image");
registerConfig(configSource, "string", "Image source path");
registerConfig(configDistanceField, "bool", "Distance field mode");
set(_file, _border);
}
@ -240,6 +242,10 @@ bool ewol::widget::Image::onSetConfig(const ewol::object::Config& _conf) {
setFile(_conf.getData());
return true;
}
if (_conf.getConfig() == configDistanceField) {
setDistanceField(std::stob(_conf.getData()));
return true;
}
return false;
}
@ -263,6 +269,11 @@ bool ewol::widget::Image::onGetConfig(const char* _config, std::string& _result)
_result = getFile();
return true;
}
if (_config == configDistanceField) {
_result = std::to_string(getDistanceField());
return true;
}
return false;
}

View File

@ -30,6 +30,7 @@ namespace ewol {
static const char * const configSize;
static const char * const configBorder;
static const char * const configSource;
static const char * const configDistanceField;
public:
/**
* @brief Main call of recording the widget on the List of "widget named creator"
@ -113,6 +114,21 @@ namespace ewol {
bool getKeepRatio(void) const {
return m_keepRatio;
};
public:
/**
* @brief Set distance field rendering mode
* @param[in] _df enable distance field
*/
void setDistanceField(bool _df) {
m_compositing.setDistanceFieldMode(_df);
}
/**
* @brief Get the distance field render mode.
* @return Status of the distance field render mode.
*/
bool getDistanceField(void) const {
return m_compositing.getDistanceFieldMode();
}
protected: // Derived function
virtual void onDraw(void);
virtual bool onSetConfig(const ewol::object::Config& _conf);

View File

@ -89,16 +89,17 @@ int32_t ewol::widget::Menu::add(int32_t _parent,
return tmpObject->m_localId;
}
if (tmpObject->m_image.size()!=0) {
myButton->setSubWidget(
new ewol::widget::Composer(widget::Composer::String,
std::string("<composer>\n") +
" <sizer mode=\"hori\">\n"
" <image src=\"" + tmpObject->m_image + "\" size=\"8,8mm\"/>\n"
" <label>" + tmpObject->m_label + "</label>\n"
" </sizer>\n"
"</composer>\n"));
std::string composeString ="<sizer mode=\"hori\">\n";
if (std::end_with(tmpObject->m_image, ".edf") == true) {
composeString+=" <image src=\"" + tmpObject->m_image + "\" size=\"8,8mm\" distance-field='true'/>\n";
} else {
composeString+=" <image src=\"" + tmpObject->m_image + "\" size=\"8,8mm\"/>\n";
}
composeString+=" <label>" + tmpObject->m_label + "</label>\n";
composeString+="</sizer>\n";
myButton->setSubWidget(new ewol::widget::Composer(widget::Composer::String, composeString));
} else {
myButton->setSubWidget( new ewol::widget::Label(tmpObject->m_label) );
myButton->setSubWidget(new ewol::widget::Label(tmpObject->m_label) );
}
// add it in the widget list
@ -196,14 +197,18 @@ void ewol::widget::Menu::onReceiveMessage(const ewol::object::Message& _msg) {
EWOL_ERROR("Allocation Error");
} else {
if (m_listElement[jjj]->m_image.size()!=0) {
myButton->setSubWidget(
new ewol::widget::Composer(widget::Composer::String,
std::string("<composer expand=\"true,false\" fill=\"true,true\">\n") +
" <sizer mode=\"hori\" expand=\"true,false\" fill=\"true,true\" lock=\"true\">\n"
" <image src=\"" + m_listElement[jjj]->m_image + "\" size=\"8,8mm\"/>\n"
" <label exand=\"true,true\" fill=\"true,true\"><![CDATA[" + m_listElement[jjj]->m_label + " ]]></label>\n"
" </sizer>\n"
"</composer>\n"));
std::string composeString = "<composer expand=\"true,false\" fill=\"true,true\">\n";
composeString+= " <sizer mode=\"hori\" expand=\"true,false\" fill=\"true,true\" lock=\"true\">\n";
if (std::end_with(m_listElement[jjj]->m_image, ".edf") == true) {
composeString+=" <image src=\"" + m_listElement[jjj]->m_image + "\" size=\"8,8mm\" distance-field='true'/>\n";
} else {
composeString+=" <image src=\"" + m_listElement[jjj]->m_image + "\" size=\"8,8mm\"/>\n";
}
composeString+=" <label exand=\"true,true\" fill=\"true,true\">" + m_listElement[jjj]->m_label + "</label>\n";
composeString+=" </sizer>\n";
composeString+="</composer>\n";
myButton->setSubWidget(new ewol::widget::Composer(widget::Composer::String, composeString));
} else {
if (true == menuHaveImage) {
myButton->setSubWidget(

View File

@ -74,13 +74,13 @@ ewol::widget::FileChooser::FileChooser(void) {
+ " <spacer expand='true,false'/>\n"
+ " <button name='[" + std::to_string(getId()) + "]file-shooser:button-validate'>\n"
+ " <sizer mode='hori'>\n"
+ " <image src='THEME:GUI:Load.svg' fill='true' size='7,7mm'/>\n"
+ " <image src='THEME:GUI:Load.edf' fill='true' size='7,7mm' distance-field='true'/>\n"
+ " <label name='[" + std::to_string(getId()) + "]file-shooser:validate-label'>Validate</label>\n"
+ " </sizer>\n"
+ " </button>\n"
+ " <button name='[" + std::to_string(getId()) + "]file-shooser:button-cancel'>\n"
+ " <sizer mode='hori'>\n"
+ " <image src='THEME:GUI:Remove.svg' fill='true' size='7,7mm'/>\n"
+ " <image src='THEME:GUI:Remove.edf' fill='true' size='7,7mm' distance-field='true'/>\n"
+ " <label name='[" + std::to_string(getId()) + "]file-shooser:cancel-label'>Cancel</label>\n"
+ " </sizer>\n"
+ " </button>\n"
@ -104,13 +104,13 @@ ewol::widget::FileChooser::FileChooser(void) {
+ " <spacer min-size='2,2mm'/>\n"
+ " </sizer>\n"
+ " <sizer mode='hori'>\n"
+ " <image name='[" + std::to_string(getId()) + "]file-shooser:img-file' src='THEME:GUI:File.svg' expand='false' size='8,8mm'/>\n"
+ " <image name='[" + std::to_string(getId()) + "]file-shooser:img-file' src='THEME:GUI:File.edf' expand='false' size='8,8mm' distance-field='true'/>\n"
+ " <entry name='[" + std::to_string(getId()) + "]file-shooser:entry-file' expand='true,false' fill='true,false'/>\n"
+ " </sizer>\n"
+ " <sizer mode='hori'>\n"
+ " <image name='[" + std::to_string(getId()) + "]file-shooser:img-folder' src='THEME:GUI:Folder.svg' expand='false' size='8,8mm'/>\n"
+ " <image name='[" + std::to_string(getId()) + "]file-shooser:img-folder' src='THEME:GUI:Folder.edf' expand='false' size='8,8mm' distance-field='true'/>\n"
+ " <entry name='[" + std::to_string(getId()) + "]file-shooser:entry-folder' expand='true,false' fill='true,false'/>\n"
+ " <image name='[" + std::to_string(getId()) + "]file-shooser:img-home' src='THEME:GUI:Home.svg' expand='false' size='8,8mm'/>\n"
+ " <image name='[" + std::to_string(getId()) + "]file-shooser:img-home' src='THEME:GUI:Home.edf' expand='false' size='8,8mm' distance-field='true'/>\n"
+ " </sizer>\n"
+ " <label name='[" + std::to_string(getId()) + "]file-shooser:title-label'>File chooser ...</label>\n"
+ " </sizer>\n"

View File

@ -107,6 +107,7 @@ def create(target):
'ewol/resource/ConfigFile.cpp',
'ewol/resource/FontFreeType.cpp',
'ewol/resource/Image.cpp',
'ewol/resource/ImageDF.cpp',
'ewol/resource/Manager.cpp',
'ewol/resource/Program.cpp',
'ewol/resource/Resource.cpp',
@ -166,6 +167,7 @@ def create(target):
myModule.copy_folder('../data/color3.*','')
myModule.copy_folder('../data/textured3D2.*','')
myModule.copy_folder('../data/textured3D.*','')
myModule.copy_folder('../data/texturedDF.*','')
myModule.copy_folder('../data/fontDistanceField/*','fontDistanceField')
# name of the dependency