From f72b15664d92b532dad917222fa54b3a2007793d Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Tue, 20 May 2014 21:33:04 +0200 Subject: [PATCH] [DEV] change resource in shgared pointer --- sources/ewol/compositing/Area.cpp | 3 +- sources/ewol/compositing/Area.h | 4 +-- sources/ewol/compositing/Drawing.cpp | 2 +- sources/ewol/compositing/Drawing.h | 2 +- sources/ewol/compositing/Image.cpp | 12 ++------ sources/ewol/compositing/Image.h | 6 ++-- sources/ewol/compositing/Shaper.cpp | 4 --- sources/ewol/compositing/Shaper.h | 8 ++--- sources/ewol/compositing/Text.cpp | 6 ++-- sources/ewol/compositing/Text.h | 2 +- sources/ewol/compositing/TextBase.cpp | 6 ++-- sources/ewol/compositing/TextBase.h | 2 +- sources/ewol/compositing/TextDF.cpp | 6 ++-- sources/ewol/compositing/TextDF.h | 2 +- sources/ewol/object/Shared.h | 4 +-- sources/ewol/resource/ColorFile.cpp | 21 ++++---------- sources/ewol/resource/ColorFile.h | 8 ++--- sources/ewol/resource/Colored3DObject.cpp | 17 +++-------- sources/ewol/resource/Colored3DObject.h | 10 ++----- sources/ewol/resource/ConfigFile.cpp | 19 ++++-------- sources/ewol/resource/ConfigFile.h | 8 ++--- sources/ewol/resource/DistanceFieldFont.cpp | 25 ++++------------ sources/ewol/resource/DistanceFieldFont.h | 10 ++----- sources/ewol/resource/FontFreeType.cpp | 20 ++++--------- sources/ewol/resource/FontFreeType.h | 8 ++--- sources/ewol/resource/Image.cpp | 23 ++++----------- sources/ewol/resource/Image.h | 8 ++--- sources/ewol/resource/ImageDF.cpp | 22 ++++---------- sources/ewol/resource/ImageDF.h | 9 ++---- sources/ewol/resource/Manager.cpp | 19 ++++++------ sources/ewol/resource/Manager.h | 17 ++++------- sources/ewol/resource/Program.cpp | 28 +++++------------- sources/ewol/resource/Program.h | 10 ++----- sources/ewol/resource/Shader.cpp | 19 ++++-------- sources/ewol/resource/Shader.h | 8 ++--- sources/ewol/resource/Texture.cpp | 12 ++------ sources/ewol/resource/Texture.h | 8 ++--- sources/ewol/resource/TexturedFont.cpp | 29 ++++--------------- sources/ewol/resource/TexturedFont.h | 10 ++----- sources/ewol/resource/VirtualBufferObject.cpp | 13 ++------- sources/ewol/resource/VirtualBufferObject.h | 8 ++--- sources/ewol/widget/Image.cpp | 2 +- sources/ewol/widget/Image.h | 2 +- sources/ewol/widget/Label.cpp | 2 +- sources/ewol/widget/Label.h | 2 +- sources/ewol/widget/ListFileSystem.cpp | 1 - sources/ewol/widget/ListFileSystem.h | 2 +- sources/ewol/widget/Windows.h | 2 +- 48 files changed, 134 insertions(+), 337 deletions(-) diff --git a/sources/ewol/compositing/Area.cpp b/sources/ewol/compositing/Area.cpp index 24e50187..6ba0c2ef 100644 --- a/sources/ewol/compositing/Area.cpp +++ b/sources/ewol/compositing/Area.cpp @@ -29,8 +29,7 @@ ewol::compositing::Area::Area(const ivec2& _size) : } ewol::compositing::Area::~Area() { - ewol::resource::Texture::release(m_resource); - ewol::resource::Program::release(m_GLprogram); + } void ewol::compositing::Area::loadProgram() { diff --git a/sources/ewol/compositing/Area.h b/sources/ewol/compositing/Area.h index 6e35d5c4..e5eb9308 100644 --- a/sources/ewol/compositing/Area.h +++ b/sources/ewol/compositing/Area.h @@ -22,14 +22,14 @@ namespace ewol { vec3 m_position; //!< The current position to draw etk::Color<> m_color; //!< The text foreground color private: - ewol::resource::Program* m_GLprogram; //!< pointer on the opengl display program + ewol::object::Shared m_GLprogram; //!< pointer on the opengl display program int32_t m_GLPosition; //!< openGL id on the element (vertex buffer) int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix) int32_t m_GLColor; //!< openGL id on the element (color buffer) int32_t m_GLtexture; //!< openGL id on the element (Texture position) int32_t m_GLtexID; //!< openGL id on the element (texture ID) private: - ewol::resource::Texture* m_resource; //!< texture resources + ewol::object::Shared m_resource; //!< texture resources std::vector m_coord; //!< internal coord of the object std::vector m_coordTex; //!< internal texture coordinate for every point std::vector > m_coordColor; //!< internal color of the different point diff --git a/sources/ewol/compositing/Drawing.cpp b/sources/ewol/compositing/Drawing.cpp index ccbcb5a6..7ef8a2f9 100644 --- a/sources/ewol/compositing/Drawing.cpp +++ b/sources/ewol/compositing/Drawing.cpp @@ -277,7 +277,7 @@ void ewol::compositing::Drawing::resetCount() { } void ewol::compositing::Drawing::unLoadProgram() { - ewol::resource::Program::release(m_GLprogram); + m_GLprogram.reset(); } void ewol::compositing::Drawing::loadProgram() { diff --git a/sources/ewol/compositing/Drawing.h b/sources/ewol/compositing/Drawing.h index dd319d11..c08c9f60 100644 --- a/sources/ewol/compositing/Drawing.h +++ b/sources/ewol/compositing/Drawing.h @@ -28,7 +28,7 @@ namespace ewol { etk::Color<> m_color; //!< The text foreground color etk::Color<> m_colorBg; //!< The text background color private: - ewol::resource::Program* m_GLprogram; //!< pointer on the opengl display program + ewol::object::Shared m_GLprogram; //!< pointer on the opengl display program int32_t m_GLPosition; //!< openGL id on the element (vertex buffer) int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix) int32_t m_GLColor; //!< openGL id on the element (color buffer) diff --git a/sources/ewol/compositing/Image.cpp b/sources/ewol/compositing/Image.cpp index ea713d4e..31ede4b7 100644 --- a/sources/ewol/compositing/Image.cpp +++ b/sources/ewol/compositing/Image.cpp @@ -35,15 +35,12 @@ ewol::compositing::Image::Image(const std::string& _imageName, bool _df) : } ewol::compositing::Image::~Image() { - ewol::resource::TextureFile::release(m_resource); - ewol::resource::ImageDF::release(m_resourceDF); - ewol::resource::Program::release(m_GLprogram); + } void ewol::compositing::Image::loadProgram() { // get the shader resource : m_GLPosition = 0; - ewol::resource::Program::release(m_GLprogram); if (m_distanceFieldMode == true) { m_GLprogram = ewol::resource::Program::keep("DATA:texturedDF.prog"); } else { @@ -249,8 +246,8 @@ 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; + ewol::object::Shared resource = m_resource; + ewol::object::Shared resourceDF = m_resourceDF; m_filename = _newFile; m_requestSize = _size; m_resource = nullptr; @@ -281,9 +278,6 @@ void ewol::compositing::Image::setSource(const std::string& _newFile, const vec2 EWOL_WARNING("Retrive previous resource (DF)"); m_resourceDF = resourceDF; } - } else { - ewol::resource::TextureFile::release(resource); - ewol::resource::ImageDF::release(resourceDF); } } diff --git a/sources/ewol/compositing/Image.h b/sources/ewol/compositing/Image.h index f723847a..a1978859 100644 --- a/sources/ewol/compositing/Image.h +++ b/sources/ewol/compositing/Image.h @@ -29,7 +29,7 @@ namespace ewol { etk::Color<> m_color; //!< The text foreground color float m_angle; //!< Angle to set at the axes private: - ewol::resource::Program* m_GLprogram; //!< pointer on the opengl display program + ewol::object::Shared m_GLprogram; //!< pointer on the opengl display program int32_t m_GLPosition; //!< openGL id on the element (vertex buffer) int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix) int32_t m_GLColor; //!< openGL id on the element (color buffer) @@ -37,8 +37,8 @@ namespace ewol { 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 + ewol::object::Shared m_resource; //!< texture resources + ewol::object::Shared m_resourceDF; //!< texture resources std::vector m_coord; //!< internal coord of the object std::vector m_coordTex; //!< internal texture coordinate for every point std::vector > m_coordColor; //!< internal color of the different point diff --git a/sources/ewol/compositing/Shaper.cpp b/sources/ewol/compositing/Shaper.cpp index ac74a6f4..f5d38a87 100644 --- a/sources/ewol/compositing/Shaper.cpp +++ b/sources/ewol/compositing/Shaper.cpp @@ -57,10 +57,6 @@ ewol::compositing::Shaper::~Shaper() { } void ewol::compositing::Shaper::unLoadProgram() { - ewol::resource::Program::release(m_GLprogram); - ewol::resource::TextureFile::release(m_resourceTexture); - ewol::resource::ConfigFile::release(m_config); - ewol::resource::ColorFile::release(m_colorProperty); for (size_t iii=0; iii m_config; //!< pointer on the config file resources int32_t m_confIdDisplayExternal; //!< Display external border int32_t m_confIdPaddingOut[shaperPosCount]; //!< Padding out property : X-left X-right Y-top Y-buttom int32_t m_confIdBorder[shaperPosCount]; //!< border property : X-left X-right Y-top Y-buttom @@ -56,7 +56,7 @@ namespace ewol { int32_t m_confColorFile; //!< ConfigFile opengGl color file Name int32_t m_confImageFile; //!< ConfigFile opengGl program Name // openGL shaders programs: - ewol::resource::Program* m_GLprogram; //!< pointer on the opengl display program + ewol::object::Shared m_GLprogram; //!< pointer on the opengl display program int32_t m_GLPosition; //!< openGL id on the element (vertex buffer) int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix) int32_t m_GLPropertyPos; //!< openGL id on the element (simple ratio position in the widget : ____/-----\_____ on vec2(X,Y)) @@ -66,7 +66,7 @@ namespace ewol { int32_t m_GLStateTransition; //!< openGL id on the element (transition ofset [0.0..1.0] ) int32_t m_GLtexID; //!< openGL id on the element (texture image) // For the Image : - ewol::resource::TextureFile* m_resourceTexture; //!< texture resources (for the image) + ewol::object::Shared m_resourceTexture; //!< texture resources (for the image) // internal needed data : int32_t m_nextStatusRequested; //!< when status is changing, this represent the next step of it vec2 m_propertyOrigin; //!< widget origin @@ -81,7 +81,7 @@ namespace ewol { vec2 m_pos[SHAPER_NB_MAX_VERTEX]; //!< podition to display property int32_t m_nbVertexToDisplay; // color management theme: - ewol::resource::ColorFile* m_colorProperty; //!< input resource for color management + ewol::object::Shared m_colorProperty; //!< input resource for color management std::vector m_listAssiciatedId; //!< Corellation ID between ColorProperty (Y) and OpenGL Program (X) private: /** diff --git a/sources/ewol/compositing/Text.cpp b/sources/ewol/compositing/Text.cpp index 6f72d269..f9baec7b 100644 --- a/sources/ewol/compositing/Text.cpp +++ b/sources/ewol/compositing/Text.cpp @@ -22,7 +22,7 @@ ewol::compositing::Text::Text(const std::string& _fontName, int32_t _fontSize) : ewol::compositing::Text::~Text() { - ewol::resource::TexturedFont::release(m_font); + } void ewol::compositing::Text::drawMT(const mat4& _transformationMatrix, bool _enableDepthTest) { @@ -152,7 +152,7 @@ void ewol::compositing::Text::setFontName(const std::string& _fontName) { void ewol::compositing::Text::setFont(std::string _fontName, int32_t _fontSize) { clear(); // remove old one - ewol::resource::TexturedFont * previousFont = m_font; + ewol::object::Shared previousFont = m_font; if (_fontSize <= 0) { _fontSize = ewol::getContext().getFontDefault().getSize(); } @@ -167,8 +167,6 @@ void ewol::compositing::Text::setFont(std::string _fontName, int32_t _fontSize) if (m_font == nullptr) { EWOL_ERROR("Can not get font resource"); m_font = previousFont; - } else { - ewol::resource::TexturedFont::release(previousFont); } } diff --git a/sources/ewol/compositing/Text.h b/sources/ewol/compositing/Text.h index c1226e69..082bfdb8 100644 --- a/sources/ewol/compositing/Text.h +++ b/sources/ewol/compositing/Text.h @@ -25,7 +25,7 @@ namespace ewol { namespace compositing { class Text : public ewol::compositing::TextBase { protected: - ewol::resource::TexturedFont* m_font; //!< Font resources + ewol::object::Shared m_font; //!< Font resources public: /** * @brief generic constructor diff --git a/sources/ewol/compositing/TextBase.cpp b/sources/ewol/compositing/TextBase.cpp index fe224779..81beab11 100644 --- a/sources/ewol/compositing/TextBase.cpp +++ b/sources/ewol/compositing/TextBase.cpp @@ -47,13 +47,13 @@ ewol::compositing::TextBase::TextBase(const std::string& _shaderName, bool _load ewol::compositing::TextBase::~TextBase() { - ewol::resource::Program::release(m_GLprogram); + } void ewol::compositing::TextBase::loadProgram(const std::string& _shaderName) { // get the shader resource : m_GLPosition = 0; - ewol::resource::Program* old = m_GLprogram; + ewol::object::Shared old = m_GLprogram; m_GLprogram = ewol::resource::Program::keep(_shaderName); if (m_GLprogram != nullptr) { m_GLPosition = m_GLprogram->getAttribute("EW_coord3d"); @@ -68,8 +68,6 @@ void ewol::compositing::TextBase::loadProgram(const std::string& _shaderName) { m_GLprogram = old; old = nullptr; } - // Release old program if needed ... - ewol::resource::Program::release(old); } void ewol::compositing::TextBase::translate(const vec3& _vect) { diff --git a/sources/ewol/compositing/TextBase.h b/sources/ewol/compositing/TextBase.h index 763a3adb..a0c6715a 100644 --- a/sources/ewol/compositing/TextBase.h +++ b/sources/ewol/compositing/TextBase.h @@ -77,7 +77,7 @@ namespace ewol { float m_stopTextPos; //!< end of the alignement (when a string is too hight it cut at the word previously this virtual line and the center is perform with this one) enum aligneMode m_alignement; //!< Current Alignement mode (justify/left/right ...) protected: - ewol::resource::Program* m_GLprogram; //!< pointer on the opengl display program + ewol::object::Shared m_GLprogram; //!< pointer on the opengl display program int32_t m_GLPosition; //!< openGL id on the element (vertex buffer) int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix) int32_t m_GLColor; //!< openGL id on the element (color buffer) diff --git a/sources/ewol/compositing/TextDF.cpp b/sources/ewol/compositing/TextDF.cpp index c16c825e..6834eb13 100644 --- a/sources/ewol/compositing/TextDF.cpp +++ b/sources/ewol/compositing/TextDF.cpp @@ -26,7 +26,7 @@ ewol::compositing::TextDF::TextDF(const std::string& _fontName, int32_t _fontSiz ewol::compositing::TextDF::~TextDF() { - ewol::resource::DistanceFieldFont::release(m_fontDF); + } void ewol::compositing::TextDF::updateSizeToRender(const vec2& _size) { @@ -155,7 +155,7 @@ void ewol::compositing::TextDF::setFontSize(int32_t _fontSize) { void ewol::compositing::TextDF::setFontName(const std::string& _fontName) { clear(); // remove old one - ewol::resource::DistanceFieldFont* previousFont = m_fontDF; + ewol::object::Shared previousFont = m_fontDF; std::string fontName; if (_fontName == "") { fontName = ewol::getContext().getFontDefault().getName(); @@ -168,8 +168,6 @@ void ewol::compositing::TextDF::setFontName(const std::string& _fontName) { if (m_fontDF == nullptr) { EWOL_ERROR("Can not get find resource"); m_fontDF = previousFont; - } else { - ewol::resource::DistanceFieldFont::release(previousFont); } } diff --git a/sources/ewol/compositing/TextDF.h b/sources/ewol/compositing/TextDF.h index 0f13b80b..b3de8f88 100644 --- a/sources/ewol/compositing/TextDF.h +++ b/sources/ewol/compositing/TextDF.h @@ -23,7 +23,7 @@ namespace ewol { namespace compositing { class TextDF : public ewol::compositing::TextBase { protected: - ewol::resource::DistanceFieldFont* m_fontDF; //!< Font resources + ewol::object::Shared m_fontDF; //!< Font resources std::vector m_glyphLevel; //!< Level of display of the glyph (notmal : 0.50, bold : 0.40, super bold : 0.30 ...) protected: int32_t m_GLglyphLevel; //!< openGL Id on the glyph level display diff --git a/sources/ewol/object/Shared.h b/sources/ewol/object/Shared.h index 843427e2..e1c22887 100644 --- a/sources/ewol/object/Shared.h +++ b/sources/ewol/object/Shared.h @@ -217,9 +217,9 @@ namespace ewol { template inline object::Shared dynamic_pointer_cast(const object::Shared& _obj) noexcept { if (T2* obj = dynamic_cast(_obj.get())) { - return object::Shared(_obj, obj); + return ewol::object::Shared(obj); } - return object::Shared(); + return ewol::object::Shared(); } }; diff --git a/sources/ewol/resource/ColorFile.cpp b/sources/ewol/resource/ColorFile.cpp index a883b3b9..b82905fb 100644 --- a/sources/ewol/resource/ColorFile.cpp +++ b/sources/ewol/resource/ColorFile.cpp @@ -75,12 +75,12 @@ int32_t ewol::resource::ColorFile::request(const std::string& _paramName) { } -ewol::resource::ColorFile* ewol::resource::ColorFile::keep(const std::string& _filename) { +ewol::object::Shared ewol::resource::ColorFile::keep(const std::string& _filename) { EWOL_INFO("KEEP : ColorFile : file : \"" << _filename << "\""); - ewol::resource::ColorFile* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(_filename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep(_filename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << _filename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -90,7 +90,7 @@ ewol::resource::ColorFile* ewol::resource::ColorFile::keep(const std::string& _f return object; } // this element create a new one every time .... - object = new ewol::resource::ColorFile(_filename); + object = ewol::object::makeShared(new ewol::resource::ColorFile(_filename)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -99,14 +99,3 @@ ewol::resource::ColorFile* ewol::resource::ColorFile::keep(const std::string& _f return object; } -void ewol::resource::ColorFile::release(ewol::resource::ColorFile*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} - - - diff --git a/sources/ewol/resource/ColorFile.h b/sources/ewol/resource/ColorFile.h index cffa6a25..4d59fe7b 100644 --- a/sources/ewol/resource/ColorFile.h +++ b/sources/ewol/resource/ColorFile.h @@ -30,6 +30,7 @@ namespace ewol { * @param[in] _filename Name of the file needed */ ColorFile(const std::string& _filename); + public: /** * @brief Simple Destructor of this class (nothing specific ...) */ @@ -75,12 +76,7 @@ namespace ewol { * @param[in] _filename Name of the configuration file. * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::ColorFile* keep(const std::string& _filename); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::ColorFile*& _object); + static ewol::object::Shared keep(const std::string& _filename); }; }; }; diff --git a/sources/ewol/resource/Colored3DObject.cpp b/sources/ewol/resource/Colored3DObject.cpp index 0a4ba246..d2840e68 100644 --- a/sources/ewol/resource/Colored3DObject.cpp +++ b/sources/ewol/resource/Colored3DObject.cpp @@ -28,8 +28,7 @@ ewol::resource::Colored3DObject::Colored3DObject() : } ewol::resource::Colored3DObject::~Colored3DObject() { - // remove dynamics dependencies : - ewol::resource::Program::release(m_GLprogram); + } @@ -155,11 +154,11 @@ void ewol::resource::Colored3DObject::drawLine(std::vector& _vertices, } } -ewol::resource::Colored3DObject* ewol::resource::Colored3DObject::keep() { +ewol::object::Shared ewol::resource::Colored3DObject::keep() { EWOL_VERBOSE("KEEP : direct Colored3DObject"); // need to crate a new one ... - ewol::resource::Colored3DObject* object = new ewol::resource::Colored3DObject(); - if (nullptr == object) { + ewol::object::Shared object = ewol::object::makeShared(new ewol::resource::Colored3DObject()); + if (object == nullptr) { EWOL_ERROR("allocation error of a resource : ???Colored3DObject??? "); return nullptr; } @@ -167,11 +166,3 @@ ewol::resource::Colored3DObject* ewol::resource::Colored3DObject::keep() { return object; } -void ewol::resource::Colored3DObject::release(ewol::resource::Colored3DObject*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} diff --git a/sources/ewol/resource/Colored3DObject.h b/sources/ewol/resource/Colored3DObject.h index 89499b6b..ea60625a 100644 --- a/sources/ewol/resource/Colored3DObject.h +++ b/sources/ewol/resource/Colored3DObject.h @@ -19,12 +19,13 @@ namespace ewol { namespace resource { class Colored3DObject : public ewol::Resource { protected: - ewol::resource::Program* m_GLprogram; + ewol::object::Shared m_GLprogram; int32_t m_GLPosition; int32_t m_GLMatrix; int32_t m_GLColor; protected: Colored3DObject(); + public: virtual ~Colored3DObject(); public: virtual void draw(std::vector& _vertices, @@ -47,12 +48,7 @@ namespace ewol { * @note Never free this pointer by your own... * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::Colored3DObject* keep(); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::Colored3DObject*& _object); + static ewol::object::Shared keep(); }; }; }; diff --git a/sources/ewol/resource/ConfigFile.cpp b/sources/ewol/resource/ConfigFile.cpp index 6e6189a3..6ddc8b4d 100644 --- a/sources/ewol/resource/ConfigFile.cpp +++ b/sources/ewol/resource/ConfigFile.cpp @@ -104,12 +104,12 @@ bool ewol::resource::ConfigFile::getBoolean(int32_t _id) { return tmp->get(); } -ewol::resource::ConfigFile* ewol::resource::ConfigFile::keep(const std::string& _filename) { +ewol::object::Shared ewol::resource::ConfigFile::keep(const std::string& _filename) { EWOL_INFO("KEEP : SimpleConfig : file : \"" << _filename << "\""); - ewol::resource::ConfigFile* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(_filename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep(_filename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << _filename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -119,7 +119,7 @@ ewol::resource::ConfigFile* ewol::resource::ConfigFile::keep(const std::string& return object; } // this element create a new one every time .... - object = new ewol::resource::ConfigFile(_filename); + object = ewol::object::makeShared(new ewol::resource::ConfigFile(_filename)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : '" << _filename << "'"); return nullptr; @@ -128,14 +128,5 @@ ewol::resource::ConfigFile* ewol::resource::ConfigFile::keep(const std::string& return object; } -void ewol::resource::ConfigFile::release(ewol::resource::ConfigFile*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} - diff --git a/sources/ewol/resource/ConfigFile.h b/sources/ewol/resource/ConfigFile.h index 8d1a08f1..9c5d690b 100644 --- a/sources/ewol/resource/ConfigFile.h +++ b/sources/ewol/resource/ConfigFile.h @@ -23,6 +23,7 @@ namespace ewol { etk::Hash m_list; protected: ConfigFile(const std::string& _filename); + public: virtual ~ConfigFile(); public: void reload(); @@ -39,12 +40,7 @@ namespace ewol { * @param[in] _filename Name of the configuration file. * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::ConfigFile* keep(const std::string& _filename); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::ConfigFile*& _object); + static ewol::object::Shared keep(const std::string& _filename); }; }; }; diff --git a/sources/ewol/resource/DistanceFieldFont.cpp b/sources/ewol/resource/DistanceFieldFont.cpp index 1f2395ea..fb35a197 100644 --- a/sources/ewol/resource/DistanceFieldFont.cpp +++ b/sources/ewol/resource/DistanceFieldFont.cpp @@ -121,7 +121,7 @@ ewol::resource::DistanceFieldFont::DistanceFieldFont(const std::string& _fontNam } ewol::resource::DistanceFieldFont::~DistanceFieldFont() { - ewol::resource::FontFreeType::release(m_font); + } @@ -335,12 +335,12 @@ ewol::GlyphProperty* ewol::resource::DistanceFieldFont::getGlyphPointer(const ch return &((m_listElement)[index]); } -ewol::resource::DistanceFieldFont* ewol::resource::DistanceFieldFont::keep(const std::string& _filename) { +ewol::object::Shared ewol::resource::DistanceFieldFont::keep(const std::string& _filename) { EWOL_VERBOSE("KEEP : DistanceFieldFont : file : '" << _filename << "'"); - ewol::resource::DistanceFieldFont* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(_filename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep(_filename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << _filename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -351,7 +351,7 @@ ewol::resource::DistanceFieldFont* ewol::resource::DistanceFieldFont::keep(const } // need to crate a new one ... EWOL_DEBUG("CREATE: DistanceFieldFont : file : '" << _filename << "'"); - object = new ewol::resource::DistanceFieldFont(_filename); + object = ewol::object::makeShared(new ewol::resource::DistanceFieldFont(_filename)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -360,19 +360,6 @@ ewol::resource::DistanceFieldFont* ewol::resource::DistanceFieldFont::keep(const return object; } -void ewol::resource::DistanceFieldFont::release(ewol::resource::DistanceFieldFont*& _object) { - if (nullptr == _object) { - return; - } - std::string name = _object->getName(); - int32_t count = _object->getCounter() - 1; - ewol::Resource* object2 = static_cast(_object); - if (getManager().release(object2) == true) { - EWOL_DEBUG("REMOVE: DistanceFieldFont : file : '" << name << "' count=" << count); - //etk::displayBacktrace(false); - } - _object = nullptr; -} void ewol::resource::DistanceFieldFont::exportOnFile() { EWOL_DEBUG("EXPORT: DistanceFieldFont : file : '" << m_fileName << ".json'"); diff --git a/sources/ewol/resource/DistanceFieldFont.h b/sources/ewol/resource/DistanceFieldFont.h index b1c42c56..79b488f9 100644 --- a/sources/ewol/resource/DistanceFieldFont.h +++ b/sources/ewol/resource/DistanceFieldFont.h @@ -23,7 +23,7 @@ namespace ewol { // specific element to have the the know if the specify element is known... // == > otherwise I can just generate italic ... // == > Bold is a little more complicated (maybe with the bordersize) - ewol::resource::FontBase* m_font; + ewol::object::Shared m_font; public: std::vector m_listElement; private: @@ -32,6 +32,7 @@ namespace ewol { int32_t m_lastRawHeigh; protected: DistanceFieldFont(const std::string& _fontName); + public: ~DistanceFieldFont(); public: float getDisplayRatio(float _size); @@ -70,12 +71,7 @@ namespace ewol { * @param[in] _filename Name of the texture font. * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::DistanceFieldFont* keep(const std::string& _filename); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::DistanceFieldFont*& _object); + static ewol::object::Shared keep(const std::string& _filename); private: /** * @brief add a glyph in a texture font. diff --git a/sources/ewol/resource/FontFreeType.cpp b/sources/ewol/resource/FontFreeType.cpp index 96250879..69464f77 100644 --- a/sources/ewol/resource/FontFreeType.cpp +++ b/sources/ewol/resource/FontFreeType.cpp @@ -390,12 +390,12 @@ void ewol::resource::FontFreeType::display() { //EWOL_INFO(" Current size = " << (int)m_fftFace->size); } -ewol::resource::FontBase* ewol::resource::FontFreeType::keep(const std::string& _filename) { +ewol::object::Shared ewol::resource::FontFreeType::keep(const std::string& _filename) { EWOL_VERBOSE("KEEP : Font : file : \"" << _filename << "\""); - ewol::resource::FontBase* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(_filename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep(_filename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << _filename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -405,7 +405,7 @@ ewol::resource::FontBase* ewol::resource::FontFreeType::keep(const std::string& return object; } // need to crate a new one ... - object = new ewol::resource::FontFreeType(_filename); + object = ewol::object::makeShared(new ewol::resource::FontFreeType(_filename)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -413,13 +413,3 @@ ewol::resource::FontBase* ewol::resource::FontFreeType::keep(const std::string& getManager().localAdd(object); return object; } - -void ewol::resource::FontFreeType::release(ewol::resource::FontBase*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} - diff --git a/sources/ewol/resource/FontFreeType.h b/sources/ewol/resource/FontFreeType.h index 46dc453a..c58b79f9 100644 --- a/sources/ewol/resource/FontFreeType.h +++ b/sources/ewol/resource/FontFreeType.h @@ -30,6 +30,7 @@ namespace ewol { void display(); protected: FontFreeType(const std::string& _fontName); + public: ~FontFreeType(); public: @@ -60,12 +61,7 @@ namespace ewol { * @param[in] _filename Name of the base font. * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::FontBase* keep(const std::string& _filename); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::FontBase*& _object); + static ewol::object::Shared keep(const std::string& _filename); }; void freeTypeInit(); void freeTypeUnInit(); diff --git a/sources/ewol/resource/Image.cpp b/sources/ewol/resource/Image.cpp index 0089e3c0..58679a1c 100644 --- a/sources/ewol/resource/Image.cpp +++ b/sources/ewol/resource/Image.cpp @@ -62,10 +62,10 @@ static int32_t nextP2(int32_t _value) { -ewol::resource::TextureFile* ewol::resource::TextureFile::keep(const std::string& _filename, ivec2 _size) { +ewol::object::Shared ewol::resource::TextureFile::keep(const std::string& _filename, ivec2 _size) { EWOL_VERBOSE("KEEP: TextureFile: '" << _filename << "' size=" << _size); if (_filename == "") { - ewol::resource::TextureFile* object = new ewol::resource::TextureFile(""); + ewol::object::Shared object = ewol::object::makeShared(new ewol::resource::TextureFile("")); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : ??TEX??"); return nullptr; @@ -101,10 +101,10 @@ ewol::resource::TextureFile* ewol::resource::TextureFile::keep(const std::string } EWOL_VERBOSE("KEEP: TextureFile: '" << TmpFilename << "' new size=" << _size); - ewol::resource::TextureFile* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(TmpFilename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep(TmpFilename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << TmpFilename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -115,7 +115,7 @@ ewol::resource::TextureFile* ewol::resource::TextureFile::keep(const std::string } EWOL_INFO("CREATE: TextureFile: '" << TmpFilename << "' size=" << _size); // need to crate a new one ... - object = new ewol::resource::TextureFile(TmpFilename, _filename, _size); + object = ewol::object::makeShared(new ewol::resource::TextureFile(TmpFilename, _filename, _size)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -123,14 +123,3 @@ ewol::resource::TextureFile* ewol::resource::TextureFile::keep(const std::string getManager().localAdd(object); return object; } - - -void ewol::resource::TextureFile::release(ewol::resource::TextureFile*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} - diff --git a/sources/ewol/resource/Image.h b/sources/ewol/resource/Image.h index 6db3e60b..fd295822 100644 --- a/sources/ewol/resource/Image.h +++ b/sources/ewol/resource/Image.h @@ -23,6 +23,7 @@ namespace ewol { private: TextureFile(const std::string& _genName); TextureFile(std::string _genName, const std::string& _fileName, const ivec2& _size); + public: virtual ~TextureFile() { }; public: const vec2& getRealSize() { @@ -36,12 +37,7 @@ namespace ewol { * @param[in] _requested size of the image (usefull when loading .svg to automatic rescale) * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::TextureFile* 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::TextureFile*& _object); + static ewol::object::Shared keep(const std::string& _filename, ivec2 _size=ivec2(-1,-1)); }; }; }; diff --git a/sources/ewol/resource/ImageDF.cpp b/sources/ewol/resource/ImageDF.cpp index ed82a2d4..e0e71458 100644 --- a/sources/ewol/resource/ImageDF.cpp +++ b/sources/ewol/resource/ImageDF.cpp @@ -151,10 +151,10 @@ static int32_t nextP2(int32_t _value) { -ewol::resource::ImageDF* ewol::resource::ImageDF::keep(const std::string& _filename, ivec2 _size) { +ewol::object::Shared 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(""); + ewol::object::Shared object = ewol::object::makeShared(new ewol::resource::ImageDF("")); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : ??TEX??"); return nullptr; @@ -190,10 +190,10 @@ ewol::resource::ImageDF* ewol::resource::ImageDF::keep(const std::string& _filen } EWOL_VERBOSE("KEEP: TextureFile: '" << TmpFilename << "' new size=" << _size); - ewol::resource::ImageDF* object = nullptr; - ewol::Resource* object2 = getManager().localKeep("DF__" + TmpFilename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep("DF__" + TmpFilename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << TmpFilename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -204,7 +204,7 @@ ewol::resource::ImageDF* ewol::resource::ImageDF::keep(const std::string& _filen } EWOL_INFO("CREATE: ImageDF: '" << TmpFilename << "' size=" << _size); // need to crate a new one ... - object = new ewol::resource::ImageDF("DF__" + TmpFilename, _filename, _size); + object = ewol::object::makeShared(new ewol::resource::ImageDF("DF__" + TmpFilename, _filename, _size)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -213,13 +213,3 @@ ewol::resource::ImageDF* ewol::resource::ImageDF::keep(const std::string& _filen return object; } - -void ewol::resource::ImageDF::release(ewol::resource::ImageDF*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} - diff --git a/sources/ewol/resource/ImageDF.h b/sources/ewol/resource/ImageDF.h index 4cd0983c..16b7844c 100644 --- a/sources/ewol/resource/ImageDF.h +++ b/sources/ewol/resource/ImageDF.h @@ -24,7 +24,9 @@ namespace ewol { protected: ImageDF(const std::string& _genName); ImageDF(std::string _genName, const std::string& _fileName, const ivec2& _size); + public: virtual ~ImageDF() { }; + protected: /** * @brief Generate distance field of this Image input. * @param[in] _input Input image to change in distance field mode. @@ -43,12 +45,7 @@ namespace ewol { * @param[in] _requested size of the image (usefull when loading .svg to automatic rescale) * @return pointer on the resource or nullptr 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); + static ewol::object::Shared keep(const std::string& _filename, ivec2 _size=ivec2(-1,-1)); }; }; }; diff --git a/sources/ewol/resource/Manager.cpp b/sources/ewol/resource/Manager.cpp index 33bb3bb3..c9649cea 100644 --- a/sources/ewol/resource/Manager.cpp +++ b/sources/ewol/resource/Manager.cpp @@ -45,8 +45,7 @@ void ewol::resource::Manager::unInit() { EWOL_WARNING("Find a resource that is not removed : [" << m_resourceList[iii]->getId() << "]" << "=\"" << m_resourceList[iii]->getName() << "\" " << m_resourceList[iii]->getCounter() << " elements"); - delete(m_resourceList[iii]); - m_resourceList[iii] = nullptr; + m_resourceList[iii].reset(); } } m_resourceList.clear(); @@ -87,7 +86,7 @@ void ewol::resource::Manager::reLoadResources() { EWOL_INFO("------------- Resources -------------"); } -void ewol::resource::Manager::update(ewol::Resource* _object) { +void ewol::resource::Manager::update(const ewol::object::Shared& _object) { // chek if not added before for (size_t iii=0; iii ewol::resource::Manager::localKeep(const std::string& _filename) { EWOL_VERBOSE("KEEP (DEFAULT) : file : \"" << _filename << "\""); for (size_t iii=0; iii& _object) { //Add ... find empty slot for (size_t iii=0; iii _object) { if (nullptr == _object) { EWOL_ERROR("Try to remove a resource that have null pointer ..."); return false; @@ -213,19 +212,19 @@ bool ewol::resource::Manager::release(ewol::Resource*& _object) { _object = nullptr; return false; } - +*/ // in case of error ... void ewol::resource::Manager::onObjectRemove(const ewol::object::Shared& _removeObject) { for (size_t iii=0; iii m_resourceList; - std::vector m_resourceListToUpdate; + std::vector> m_resourceList; + std::vector> m_resourceListToUpdate; bool m_contextHasBeenRemoved; public: /** @@ -47,7 +47,7 @@ namespace ewol { * @brief Call by the system to send all the needed data on the graphic card chen they change ... * @param[in] _object The resources that might be updated */ - void update(ewol::Resource* _object); + void update(const ewol::object::Shared& _object); /** * @brief Call by the system chen the openGL Context has been unexpectially removed == > This reload all the texture, VBO and other .... */ @@ -58,15 +58,8 @@ namespace ewol { void contextHasBeenDestroyed(); public: // internal API to extent eResources in extern Soft - ewol::Resource* localKeep(const std::string& _filename); - void localAdd(ewol::Resource* _object); - public: - /** - * @brief release a resources and free it if the Last release is call. - * @param[in,out] _object element to realease == > is return at nullptr value. - * @return true, if element is removed, and false for just decreasing counter - */ - bool release(ewol::Resource*& _object); + ewol::object::Shared localKeep(const std::string& _filename); + void localAdd(const ewol::object::Shared& _object); public: // herited function virtual void onObjectRemove(const ewol::object::Shared& _removeObject); }; diff --git a/sources/ewol/resource/Program.cpp b/sources/ewol/resource/Program.cpp index 402c9d9c..508420eb 100644 --- a/sources/ewol/resource/Program.cpp +++ b/sources/ewol/resource/Program.cpp @@ -36,7 +36,7 @@ ewol::resource::Program::Program(const std::string& _filename) : std::string tmpFilename = m_name; // remove extention ... tmpFilename.erase(tmpFilename.size()-4, 4); - ewol::resource::Shader* tmpShader = ewol::resource::Shader::keep(tmpFilename+"vert"); + ewol::object::Shared tmpShader = ewol::resource::Shader::keep(tmpFilename+"vert"); if (nullptr == tmpShader) { EWOL_CRITICAL("Error while getting a specific shader filename : " << tmpFilename); return; @@ -80,7 +80,7 @@ ewol::resource::Program::Program(const std::string& _filename) : } // get it with relative position : std::string tmpFilename = file.getRelativeFolder() + tmpData; - ewol::resource::Shader* tmpShader = ewol::resource::Shader::keep(tmpFilename); + ewol::object::Shared tmpShader = ewol::resource::Shader::keep(tmpFilename); if (nullptr == tmpShader) { EWOL_CRITICAL("Error while getting a specific shader filename : " << tmpFilename); } else { @@ -96,10 +96,6 @@ ewol::resource::Program::Program(const std::string& _filename) : } ewol::resource::Program::~Program() { - for (size_t iii=0; iii ewol::resource::Program::keep(const std::string& _filename) { EWOL_VERBOSE("KEEP : Program : file : \"" << _filename << "\""); - ewol::resource::Program* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(_filename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep(_filename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << _filename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -790,7 +786,7 @@ ewol::resource::Program* ewol::resource::Program::keep(const std::string& _filen return object; } // need to crate a new one ... - object = new ewol::resource::Program(_filename); + object = ewol::object::makeShared(new ewol::resource::Program(_filename)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -798,13 +794,3 @@ ewol::resource::Program* ewol::resource::Program::keep(const std::string& _filen getManager().localAdd(object); return object; } - - -void ewol::resource::Program::release(ewol::resource::Program*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} \ No newline at end of file diff --git a/sources/ewol/resource/Program.h b/sources/ewol/resource/Program.h index 7dc272d3..0d877060 100644 --- a/sources/ewol/resource/Program.h +++ b/sources/ewol/resource/Program.h @@ -50,7 +50,7 @@ namespace ewol { private : bool m_exist; //!< the file existed GLuint m_program; //!< openGL id of the current program - std::vector m_shaderList; //!< List of all the shader loaded + std::vector> m_shaderList; //!< List of all the shader loaded std::vector m_elementList; //!< List of all the attribute requested by the user bool m_hasTexture; //!< A texture has been set to the current shader bool m_hasTexture1; //!< A texture has been set to the current shader @@ -60,6 +60,7 @@ namespace ewol { * @param[in] filename Standard file name format. see @ref etk::FSNode */ Program(const std::string& filename); + public: /** * @brief Destructor, remove the current Program. */ @@ -299,12 +300,7 @@ namespace ewol { * @param[in] _filename Name of the openGL program. * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::Program* keep(const std::string& _filename); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::Program*& _object); + static ewol::object::Shared keep(const std::string& _filename); }; }; }; diff --git a/sources/ewol/resource/Shader.cpp b/sources/ewol/resource/Shader.cpp index 76307607..ea0a5cc0 100644 --- a/sources/ewol/resource/Shader.cpp +++ b/sources/ewol/resource/Shader.cpp @@ -149,12 +149,12 @@ void ewol::resource::Shader::reload() { updateContext(); } -ewol::resource::Shader* ewol::resource::Shader::keep(const std::string& _filename) { +ewol::object::Shared ewol::resource::Shader::keep(const std::string& _filename) { EWOL_VERBOSE("KEEP : Simpleshader : file : \"" << _filename << "\""); - ewol::resource::Shader* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(_filename); + ewol::object::Shared object = nullptr; + ewol::object::Shared object2 = getManager().localKeep(_filename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << _filename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -164,7 +164,7 @@ ewol::resource::Shader* ewol::resource::Shader::keep(const std::string& _filenam return object; } // need to crate a new one ... - object = new ewol::resource::Shader(_filename); + object = ewol::object::makeShared(new ewol::resource::Shader(_filename)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -172,12 +172,3 @@ ewol::resource::Shader* ewol::resource::Shader::keep(const std::string& _filenam getManager().localAdd(object); return object; } - -void ewol::resource::Shader::release(ewol::resource::Shader*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} diff --git a/sources/ewol/resource/Shader.h b/sources/ewol/resource/Shader.h index 077079a3..d6819ae8 100644 --- a/sources/ewol/resource/Shader.h +++ b/sources/ewol/resource/Shader.h @@ -31,6 +31,7 @@ namespace ewol { * @param[in] filename Standard file name format. see @ref etk::FSNode */ Shader(const std::string& _filename); + public: /** * @brief Destructor, remove the current Shader */ @@ -74,12 +75,7 @@ namespace ewol { * @param[in] _filename Name of the openGL Shader. * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::Shader* keep(const std::string& _filename); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::Shader*& _object); + static ewol::object::Shared keep(const std::string& _filename); }; }; }; diff --git a/sources/ewol/resource/Texture.cpp b/sources/ewol/resource/Texture.cpp index b633dce3..af68bb56 100644 --- a/sources/ewol/resource/Texture.cpp +++ b/sources/ewol/resource/Texture.cpp @@ -107,9 +107,9 @@ void ewol::resource::Texture::setImageSize(ivec2 _newSize) { m_data.resize(_newSize); } -ewol::resource::Texture* ewol::resource::Texture::keep() { +ewol::object::Shared ewol::resource::Texture::keep() { // this element create a new one every time .... - ewol::resource::Texture* object = new ewol::resource::Texture(); + ewol::object::Shared object = ewol::object::makeShared(new ewol::resource::Texture()); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : ??TEX??"); return nullptr; @@ -118,11 +118,3 @@ ewol::resource::Texture* ewol::resource::Texture::keep() { return object; } -void ewol::resource::Texture::release(ewol::resource::Texture*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} diff --git a/sources/ewol/resource/Texture.h b/sources/ewol/resource/Texture.h index 6604c218..fb775290 100644 --- a/sources/ewol/resource/Texture.h +++ b/sources/ewol/resource/Texture.h @@ -47,6 +47,7 @@ namespace ewol { protected: Texture(const std::string& _filename); Texture(); + public: ~Texture(); public: // you must set the size here, because it will be set in multiple of pow(2) @@ -63,12 +64,7 @@ namespace ewol { * @note Never free this pointer by your own... * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::Texture* keep(); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::Texture*& _object); + static ewol::object::Shared keep(); }; }; }; diff --git a/sources/ewol/resource/TexturedFont.cpp b/sources/ewol/resource/TexturedFont.cpp index 70a97aa2..a0d807a0 100644 --- a/sources/ewol/resource/TexturedFont.cpp +++ b/sources/ewol/resource/TexturedFont.cpp @@ -225,9 +225,7 @@ ewol::resource::TexturedFont::TexturedFont(const std::string& _fontName) : } ewol::resource::TexturedFont::~TexturedFont() { - for (int32_t iiiFontId=0; iiiFontId<4 ; iiiFontId++) { - ewol::resource::FontFreeType::release(m_font[iiiFontId]); - } + } bool ewol::resource::TexturedFont::addGlyph(const char32_t& _val) { @@ -343,12 +341,12 @@ ewol::GlyphProperty* ewol::resource::TexturedFont::getGlyphPointer(const char32_ return &((m_listElement[_displayMode])[index]); } -ewol::resource::TexturedFont* ewol::resource::TexturedFont::keep(const std::string& _filename) { +ewol::object::Shared ewol::resource::TexturedFont::keep(const std::string& _filename) { EWOL_VERBOSE("KEEP : TexturedFont : file : '" << _filename << "'"); - ewol::resource::TexturedFont* object = nullptr; - ewol::Resource* object2 = getManager().localKeep(_filename); + ewol::object::Shared object; + ewol::object::Shared object2 = getManager().localKeep(_filename); if (nullptr != object2) { - object = dynamic_cast(object2); + object = ewol::dynamic_pointer_cast(object2); if (nullptr == object) { EWOL_CRITICAL("Request resource file : '" << _filename << "' With the wrong type (dynamic cast error)"); return nullptr; @@ -359,7 +357,7 @@ ewol::resource::TexturedFont* ewol::resource::TexturedFont::keep(const std::stri } // need to crate a new one ... EWOL_INFO("CREATE: TexturedFont : file : '" << _filename << "'"); - object = new ewol::resource::TexturedFont(_filename); + object = ewol::object::makeShared(new ewol::resource::TexturedFont(_filename)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : " << _filename); return nullptr; @@ -367,18 +365,3 @@ ewol::resource::TexturedFont* ewol::resource::TexturedFont::keep(const std::stri getManager().localAdd(object); return object; } - -void ewol::resource::TexturedFont::release(ewol::resource::TexturedFont*& _object) { - if (nullptr == _object) { - return; - } - EWOL_VERBOSE("RELEASE: TexturedFont : file : '" << _object->getName() << "' count=" << _object->getCounter()); - std::string name = _object->getName(); - int32_t count = _object->getCounter() - 1; - ewol::Resource* object2 = static_cast(_object); - if (getManager().release(object2) == true) { - EWOL_ERROR("REMOVE: TexturedFont : file : '" << name << "' count=" << count); - //etk::displayBacktrace(false); - } - _object = nullptr; -} diff --git a/sources/ewol/resource/TexturedFont.h b/sources/ewol/resource/TexturedFont.h index 38172085..107ab8f7 100644 --- a/sources/ewol/resource/TexturedFont.h +++ b/sources/ewol/resource/TexturedFont.h @@ -36,7 +36,7 @@ namespace ewol { // specific element to have the the know if the specify element is known... // == > otherwise I can just generate italic ... // == > Bold is a little more complicated (maybe with the bordersize) - ewol::resource::FontBase* m_font[4]; + ewol::object::Shared m_font[4]; enum ewol::font::mode m_modeWraping[4]; //!< This is a wrapping mode to prevent the fact that no font is define for a specific mode public: std::vector m_listElement[4]; @@ -46,6 +46,7 @@ namespace ewol { int32_t m_lastRawHeigh[4]; protected: TexturedFont(const std::string& _fontName); + public: ~TexturedFont(); public: /** @@ -93,12 +94,7 @@ namespace ewol { * @param[in] _filename Name of the texture font. * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::TexturedFont* keep(const std::string& _filename); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::TexturedFont*& _object); + static ewol::object::Shared keep(const std::string& _filename); private: /** * @brief add a glyph in a texture font. diff --git a/sources/ewol/resource/VirtualBufferObject.cpp b/sources/ewol/resource/VirtualBufferObject.cpp index d57102a1..2e6e7763 100644 --- a/sources/ewol/resource/VirtualBufferObject.cpp +++ b/sources/ewol/resource/VirtualBufferObject.cpp @@ -123,9 +123,9 @@ int32_t ewol::resource::VirtualBufferObject::sizeOnBufferVec2(int32_t _id) { return m_buffer[_id].size()/2; } -ewol::resource::VirtualBufferObject* ewol::resource::VirtualBufferObject::keep(int32_t _number) { +ewol::object::Shared ewol::resource::VirtualBufferObject::keep(int32_t _number) { // this element create a new one every time .... - ewol::resource::VirtualBufferObject* object = new ewol::resource::VirtualBufferObject(_number); + ewol::object::Shared object = ewol::object::makeShared(new ewol::resource::VirtualBufferObject(_number)); if (nullptr == object) { EWOL_ERROR("allocation error of a resource : ??VBO??"); return nullptr; @@ -133,12 +133,3 @@ ewol::resource::VirtualBufferObject* ewol::resource::VirtualBufferObject::keep(i getManager().localAdd(object); return object; } - -void ewol::resource::VirtualBufferObject::release(ewol::resource::VirtualBufferObject*& _object) { - if (nullptr == _object) { - return; - } - ewol::Resource* object2 = static_cast(_object); - getManager().release(object2); - _object = nullptr; -} diff --git a/sources/ewol/resource/VirtualBufferObject.h b/sources/ewol/resource/VirtualBufferObject.h index bb4fb827..69c54d32 100644 --- a/sources/ewol/resource/VirtualBufferObject.h +++ b/sources/ewol/resource/VirtualBufferObject.h @@ -35,6 +35,7 @@ namespace ewol { * @param[in] accesMode Acces mode : ??? */ VirtualBufferObject(int32_t _number); + public: /** * @brief Destructor of this VBO. */ @@ -99,12 +100,7 @@ namespace ewol { * @param[in] _number Number of VBO needed * @return pointer on the resource or nullptr if an error occured. */ - static ewol::resource::VirtualBufferObject* keep(int32_t _number); - /** - * @brief release the keeped resources - * @param[in,out] reference on the object pointer - */ - static void release(ewol::resource::VirtualBufferObject*& _object); + static ewol::object::Shared keep(int32_t _number); }; }; }; diff --git a/sources/ewol/widget/Image.cpp b/sources/ewol/widget/Image.cpp index a3a64ce9..20e6422d 100644 --- a/sources/ewol/widget/Image.cpp +++ b/sources/ewol/widget/Image.cpp @@ -59,7 +59,7 @@ ewol::widget::Image::Image(const std::string& _file, const ewol::Dimension& _bor } ewol::widget::Image::~Image() { - ewol::resource::ColorFile::release(m_colorProperty); + } void ewol::widget::Image::setFile(const std::string& _file) { diff --git a/sources/ewol/widget/Image.h b/sources/ewol/widget/Image.h index e9aa273b..7e879bb1 100644 --- a/sources/ewol/widget/Image.h +++ b/sources/ewol/widget/Image.h @@ -41,7 +41,7 @@ namespace ewol { static void init(ewol::widget::Manager& _widgetManager); protected: ewol::compositing::Image m_compositing; //!< compositing element of the image. - ewol::resource::ColorFile* m_colorProperty; //!< theme color property + ewol::object::Shared m_colorProperty; //!< theme color property int32_t m_colorId; //!< Color of the image. public: /** diff --git a/sources/ewol/widget/Label.cpp b/sources/ewol/widget/Label.cpp index aa5ad487..e5217107 100644 --- a/sources/ewol/widget/Label.cpp +++ b/sources/ewol/widget/Label.cpp @@ -44,7 +44,7 @@ ewol::widget::Label::Label(std::string _newLabel) : } ewol::widget::Label::~Label() { - ewol::resource::ColorFile::release(m_colorProperty); + } void ewol::widget::Label::calculateMinMaxSize() { diff --git a/sources/ewol/widget/Label.h b/sources/ewol/widget/Label.h index 7547d047..e3129170 100644 --- a/sources/ewol/widget/Label.h +++ b/sources/ewol/widget/Label.h @@ -34,7 +34,7 @@ namespace ewol { private: ewol::compositing::Text m_text; //!< Compositing text element. std::u32string m_label; //!< decorated text to display. - ewol::resource::ColorFile* m_colorProperty; //!< theme color property + ewol::object::Shared m_colorProperty; //!< theme color property int32_t m_colorDefaultFgText; //!< Default color of the text int32_t m_colorDefaultBgText; //!< Default Background color of the text public: diff --git a/sources/ewol/widget/ListFileSystem.cpp b/sources/ewol/widget/ListFileSystem.cpp index cc5a8db8..ef4e8196 100644 --- a/sources/ewol/widget/ListFileSystem.cpp +++ b/sources/ewol/widget/ListFileSystem.cpp @@ -70,7 +70,6 @@ ewol::widget::ListFileSystem::ListFileSystem() : ewol::widget::ListFileSystem::~ListFileSystem() { clearList(); - ewol::resource::ColorFile::release(m_colorProperty); }; void ewol::widget::ListFileSystem::clearList() { diff --git a/sources/ewol/widget/ListFileSystem.h b/sources/ewol/widget/ListFileSystem.h index cd983840..ab3c303d 100644 --- a/sources/ewol/widget/ListFileSystem.h +++ b/sources/ewol/widget/ListFileSystem.h @@ -39,7 +39,7 @@ namespace ewol { ListFileSystem(); ~ListFileSystem(); protected: - ewol::resource::ColorFile* m_colorProperty; //!< theme color property. + ewol::object::Shared m_colorProperty; //!< theme color property. int32_t m_colorIdText; //!< Color of the text. int32_t m_colorIdBackground1; //!< Color of the Background. int32_t m_colorIdBackground2; //!< Color of the Background 2. diff --git a/sources/ewol/widget/Windows.h b/sources/ewol/widget/Windows.h index f8444adc..c3565740 100644 --- a/sources/ewol/widget/Windows.h +++ b/sources/ewol/widget/Windows.h @@ -22,7 +22,7 @@ namespace ewol { */ class Windows : public ewol::Widget { protected: - ewol::resource::ColorFile* m_colorProperty; //!< theme color property + ewol::object::Shared m_colorProperty; //!< theme color property int32_t m_colorBg; //!< Default background color of the windows public: Windows();