diff --git a/data/theme/default/widgetButton.conf b/data/theme/default/widgetButton.conf index 8057eca4..cb192573 100644 --- a/data/theme/default/widgetButton.conf +++ b/data/theme/default/widgetButton.conf @@ -3,7 +3,10 @@ PaddingX=8 PaddingY=8 # change status in ms ChangeTime=356 - +# if an image is needed : +#image=plop.png +# the associated openGL ES-2 program : +program=widgetButton.prog diff --git a/data/theme/rounded/widgetButton.conf b/data/theme/rounded/widgetButton.conf index 915fd602..372d84b0 100644 --- a/data/theme/rounded/widgetButton.conf +++ b/data/theme/rounded/widgetButton.conf @@ -3,6 +3,10 @@ PaddingX=13 PaddingY=7 # change status in ms ChangeTime=356 +# if an image is needed : +#image=plop.png +# the associated openGL ES-2 program : +program=widgetButton.prog diff --git a/sources/ewol/compositing/Image.cpp b/sources/ewol/compositing/Image.cpp index f13e1a17..f237132e 100644 --- a/sources/ewol/compositing/Image.cpp +++ b/sources/ewol/compositing/Image.cpp @@ -12,6 +12,9 @@ #include #include +#undef __class__ +#define __class__ "ewol::Image" + ewol::Image::Image(etk::UString imageName) : m_position(0.0, 0.0, 0.0), m_clippingPosStart(0.0, 0.0, 0.0), diff --git a/sources/ewol/compositing/Shaper.cpp b/sources/ewol/compositing/Shaper.cpp new file mode 100644 index 00000000..c05944de --- /dev/null +++ b/sources/ewol/compositing/Shaper.cpp @@ -0,0 +1,248 @@ +/** + * @author Edouard DUPIN + * + * @copyright 2011, Edouard DUPIN, all right reserved + * + * @license BSD v3 (see license file) + */ + +#include + +#include +#include +#include +#include + +#undef __class__ +#define __class__ "ewol::Shaper" + +ewol::Shaper::Shaper(etk::UString shaperName) : + m_name(shaperName), + m_config(NULL), + m_confIdPaddingX(-1), + m_confIdPaddingY(-1), + m_confIdChangeTime(-1), + m_confProgramFile(-1), + m_GLprogram(NULL), + m_GLPosition(-1), + m_GLMatrix(-1), + m_GLPropertySize(-1), + m_GLPropertyInsidePos(-1), + m_GLPropertyInsideSize(-1), + m_GLStateOld(-1), + m_GLStateNew(-1), + m_GLStateTransition(-1), + m_nextStatusRequested(-1), + m_time(-1), + m_stateOld(0), + m_stateNew(0), + m_stateTransition(1.0) +{ + LoadProgram(); + m_coord[0].x= 0; + m_coord[0].y= m_propertySize.y; + + m_coord[1].x= 0; + m_coord[1].y= 0; + + m_coord[2].x= m_propertySize.x; + m_coord[2].y= 0; + + + m_coord[3].x= m_propertySize.x; + m_coord[3].y= 0; + + m_coord[4].x= m_propertySize.x; + m_coord[4].y= m_propertySize.y; + + m_coord[5].x= 0; + m_coord[5].y= m_propertySize.y; +} + +ewol::Shaper::~Shaper(void) +{ + if (NULL != m_GLprogram) { + ewol::resource::Release(m_GLprogram); + m_GLprogram = NULL; + } + if (NULL != m_config) { + ewol::resource::Release(m_config); + m_config = NULL; + } +} + +void ewol::Shaper::LoadProgram(void) +{ + if (m_name=="") { + EWOL_DEBUG("no Shaper set for loading resources ..."); + return; + } + if (true == ewol::resource::Keep(m_name, m_config) ) { + m_confIdPaddingX = m_config->Request("PaddingX"); + m_confIdPaddingY = m_config->Request("PaddingY"); + m_confIdChangeTime = m_config->Request("ChangeTime"); + m_confProgramFile = m_config->Request("program"); + } + etk::UString basicShaderFile = m_config->GetString(m_confProgramFile); + // Get the relative position of the current file ... + etk::FSNode file(m_name); + etk::UString tmpFilename = file.GetRelativeFolder() + basicShaderFile; + EWOL_DEBUG("Shaper try load shader : " << tmpFilename << " with base : " << basicShaderFile); + // get the shader resource : + m_GLPosition = 0; + if (true == ewol::resource::Keep(tmpFilename, m_GLprogram) ) { + m_GLPosition = m_GLprogram->GetAttribute("EW_coord2d"); + m_GLMatrix = m_GLprogram->GetUniform("EW_MatrixTransformation"); + // Widget property ==> for the Vertex shader + m_GLPropertySize = m_GLprogram->GetUniform("EW_widgetProperty.size"); + m_GLPropertyInsidePos = m_GLprogram->GetUniform("EW_widgetProperty.insidePos"); + m_GLPropertyInsideSize = m_GLprogram->GetUniform("EW_widgetProperty.insideSize"); + // status property ==> for the fragment shader + m_GLStateOld = m_GLprogram->GetUniform("EW_status.stateOld"); + m_GLStateNew = m_GLprogram->GetUniform("EW_status.stateNew"); + m_GLStateTransition = m_GLprogram->GetUniform("EW_status.transition"); + } +} + + +void ewol::Shaper::Draw(void) +{ + if (m_config == NULL) { + // this is a normale case ... the user can choice to have no config basic file ... + return; + } + if (m_GLprogram==NULL) { + EWOL_ERROR("No shader ..."); + return; + } + //glScalef(m_scaling.x, m_scaling.y, 1.0); + m_GLprogram->Use(); + // set Matrix : translation/positionMatrix + etk::Matrix4 tmpMatrix = ewol::openGL::GetMatrix(); + m_GLprogram->UniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); + // position : + // Note : Must be all the time a [-1..1] square ... + // TODO : plop ... + m_GLprogram->SendAttribute(m_GLPosition, 2/*x,y*/, m_coord); + // all entry parameters : + m_GLprogram->Uniform2fv(m_GLPropertySize, 1, &m_propertySize.x); + m_GLprogram->Uniform2fv(m_GLPropertyInsidePos, 1, &m_propertyInsidePosition.x); + m_GLprogram->Uniform2fv(m_GLPropertyInsideSize, 1, &m_propertyInsideSize.x); + m_GLprogram->Uniform1i(m_GLStateOld, m_stateOld); + m_GLprogram->Uniform1i(m_GLStateNew, m_stateNew); + m_GLprogram->Uniform1f(m_GLStateTransition, m_stateTransition); + + // Request the draw of the elements : + glDrawArrays(GL_TRIANGLES, 0, 6); + m_GLprogram->UnUse(); +} + +void ewol::Shaper::Clear(void) +{ + // nothing to do ... +} + + + + +bool ewol::Shaper::ChangeStatusIn(int32_t newStatusId) +{ + m_nextStatusRequested = newStatusId; + return true; +} + +bool ewol::Shaper::PeriodicCall(int64_t localTime) +{ + // start : + if (m_time == -1) { + m_time = localTime; + m_stateOld = m_stateNew; + m_stateNew = m_nextStatusRequested; + m_nextStatusRequested = -1; + m_stateTransition = 0.0; + EWOL_VERBOSE(" ##### START ##### "); + } + int64_t offset = localTime - m_time; + float timeRelativity = m_config->GetFloat(m_confIdChangeTime)*1000.0; + if (offset > timeRelativity) { + // check if no new state requested: + if (m_nextStatusRequested != -1) { + m_time = localTime; + m_stateOld = m_stateNew; + m_stateNew = m_nextStatusRequested; + m_nextStatusRequested = -1; + m_stateTransition = 0.0; + } else { + m_stateTransition = 1.0; + EWOL_VERBOSE(" ##### STOP ##### "); + return false; + m_time = -1; + } + } else { + m_stateTransition = (float)offset / timeRelativity; + EWOL_VERBOSE("time=" << offset << " in " << timeRelativity << " Transition : " << m_stateTransition); + } + return true; +} + + +void ewol::Shaper::SetSize(etk::Vector2D newSize) +{ + if (m_propertySize != newSize) { + m_propertySize = newSize; + // set coord ==> must be a static VBO ... + m_coord[0].x= 0; + m_coord[0].y= m_propertySize.y; + m_coord[1].x= 0; + m_coord[1].y= 0; + m_coord[2].x= m_propertySize.x; + m_coord[2].y= 0; + + m_coord[3].x= m_propertySize.x; + m_coord[3].y= 0; + m_coord[4].x= m_propertySize.x; + m_coord[4].y= m_propertySize.y; + m_coord[5].x= 0; + m_coord[5].y= m_propertySize.y; + } +} + +void ewol::Shaper::SetInsideSize(etk::Vector2D newInsideSize) +{ + m_propertyInsideSize = newInsideSize; +} + +void ewol::Shaper::SetInsidePos(etk::Vector2D newInsidePos) +{ + m_propertyInsidePosition = newInsidePos; +} + + +etk::Vector2D ewol::Shaper::GetPadding(void) +{ + etk::Vector2D padding; + padding.x = m_config->GetFloat(m_confIdPaddingX); + padding.y = m_config->GetFloat(m_confIdPaddingY); + return padding; +} + + +void ewol::Shaper::SetSource(etk::UString newFile) +{ + Clear(); + if (NULL != m_GLprogram) { + ewol::resource::Release(m_GLprogram); + m_GLprogram = NULL; + } + if (NULL != m_config) { + ewol::resource::Release(m_config); + m_config = NULL; + } + LoadProgram(); +} + +bool ewol::Shaper::HasSources(void) +{ + return m_GLprogram!=NULL; +} + diff --git a/sources/ewol/compositing/Shaper.h b/sources/ewol/compositing/Shaper.h new file mode 100644 index 00000000..6aadf451 --- /dev/null +++ b/sources/ewol/compositing/Shaper.h @@ -0,0 +1,125 @@ +/** + * @author Edouard DUPIN + * + * @copyright 2011, Edouard DUPIN, all right reserved + * + * @license BSD v3 (see license file) + */ + +#ifndef __EWOL_COMPOSITING_SHAPER_H__ +#define __EWOL_COMPOSITING_SHAPER_H__ + +#include +#include +#include + +namespace ewol +{ + /** + * @brief the Shaper system is a basic theme configuration for every widget, it corespond at a background display described by a pool of files + */ + // TODO : Load image + // TODO : Abstaraction between states (call by name and the system greate IDs + class Shaper : public ewol::Compositing + { + private: + etk::UString m_name; //!< Name of the configuration of the shaper. + // External theme config: + ewol::ConfigFile* m_config; //!< pointer on the config file resources + int32_t m_confIdPaddingX; //!< ConfigFile padding property X + int32_t m_confIdPaddingY; //!< ConfigFile padding property Y + int32_t m_confIdChangeTime; //!< ConfigFile padding transition time property + int32_t m_confProgramFile; //!< ConfigFile OpengGl program Name + // OpenGL shaders programs: + ewol::Program* 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_GLPropertySize; //!< openGL id on the element (widget size) + int32_t m_GLPropertyInsidePos; //!< openGL id on the element (widget internal element position) + int32_t m_GLPropertyInsideSize; //!< openGL id on the element (widget internal element size) + int32_t m_GLStateOld; //!< openGL id on the element (old state displayed) + int32_t m_GLStateNew; //!< openGL id on the element (new state displayed) + int32_t m_GLStateTransition; //!< openGL id on the element (transition ofset [0.0..1.0] ) + // internal needed data : + int32_t m_nextStatusRequested; //!< when status is changing, this represent the next step of it + int64_t m_time; //!< The last time of the dispaly (-1 if nothing progressing) + etk::Vector2D m_propertySize; //!< widget size + etk::Vector2D m_propertyInsidePosition; //!< internal subwidget position + etk::Vector2D m_propertyInsideSize; //!< internal subwidget size + int32_t m_stateOld; //!< previous state + int32_t m_stateNew; //!< destination state + float m_stateTransition; //!< working state between 2 states + etk::Vector2D m_coord[6]; //!< the double triangle coordonates + private: + /** + * @brief Load the openGL program and get all the ID needed + */ + void LoadProgram(void); + public: + /** + * @brief generic constructor + * @param[in] imageName Name of the file that might be loaded + */ + Shaper(etk::UString shaperName=""); + /** + * @brief generic destructor + */ + ~Shaper(void); + public: + /** + * @brief Draw All the refistered text in the current element on openGL + */ + void Draw(void); + /** + * @brief Clear alll tre registered element in the current element + */ + void Clear(void); + /** + * @brief change the current status in an other + * @param[in] the next new status requested + * @return true The widget must call this fuction periodicly (and redraw itself) + * @return false No need to request the periodic call. + */ + bool ChangeStatusIn(int32_t newStatusId); + /** + * @brief Same as the widfget periodic call (this is for change display) + * @param[in] localTime The current time of the call. + * @return true The widget must call this fuction periodicly (and redraw itself) + * @return false No need to request the periodic call. + */ + bool PeriodicCall(int64_t localTime); + /** + * @brief Set the widget size (needed fot the display) + * @param[in] newSize : the new widget size + */ + void SetSize(etk::Vector2D newSize); + /** + * @brief Set the internal widget size + * @param[in] newInsidePos : the subelement size. + */ + void SetInsideSize(etk::Vector2D newInsideSize); + /** + * @brief Set the internal widget position + * @param[in] newInsidePos : the subelement position + */ + void SetInsidePos(etk::Vector2D newInsidePos); + /** + * @brief Get the padding declared by the user in the config file + * @return the padding property + */ + etk::Vector2D GetPadding(void); + /** + * @brief Change the image Source ==> can not be done to display 2 images at the same time ... + * @param[in] newFile New file of the Image + */ + void SetSource(etk::UString newFile); + /** + * @brief Sometimes the user declare an image but not allocate the ressources all the time, this is to know it .. + * @return the validity od the resources. + */ + bool HasSources(void); + }; +}; + +#endif + diff --git a/sources/ewol/renderer/resources/ConfigFile.cpp b/sources/ewol/renderer/resources/ConfigFile.cpp index 3b179feb..78c6ba0a 100644 --- a/sources/ewol/renderer/resources/ConfigFile.cpp +++ b/sources/ewol/renderer/resources/ConfigFile.cpp @@ -18,6 +18,7 @@ void ewol::SimpleConfigElement::Parse(etk::UString value) m_valuefloat = 0; sscanf(tmp, "%d", &m_valueInt); sscanf(tmp, "%f", &m_valuefloat); + m_value = tmp; } diff --git a/sources/ewol/widget/Button.cpp b/sources/ewol/widget/Button.cpp index 6a7ddffb..36387f77 100644 --- a/sources/ewol/widget/Button.cpp +++ b/sources/ewol/widget/Button.cpp @@ -21,8 +21,11 @@ extern const char * const ewolEventButtonLeave = "ewol-button-leave"; #define __class__ "Button" -void widget::Button::Init(void) +widget::Button::Button(etk::UString newLabel) : + m_shaper("THEME:GUI:widgetButton.conf") { + m_label = newLabel; + AddEventId(ewolEventButtonPressed); AddEventId(ewolEventButtonDown); AddEventId(ewolEventButtonUp); @@ -30,51 +33,13 @@ void widget::Button::Init(void) AddEventId(ewolEventButtonLeave); m_alignement = widget::TEXT_ALIGN_CENTER; - m_status.m_stateOld = 0; - m_status.m_stateNew = 0; - m_status.m_transition = 1.0; - m_time = -1; - m_nextStatusRequested = -1; m_textColorFg = draw::color::black; SetCanHaveFocus(true); - etk::UString tmpString("THEME:GUI:widgetButton.conf"); - if (true == ewol::resource::Keep(tmpString, m_config) ) { - m_confIdPaddingX = m_config->Request("PaddingX"); - m_confIdPaddingY = m_config->Request("PaddingY"); - m_confIdChangeTime = m_config->Request("ChangeTime"); - } - tmpString ="THEME:GUI:widgetButton.prog"; - // get the shader resource : - m_GLPosition = 0; - if (true == ewol::resource::Keep(tmpString, m_GLprogram) ) { - m_GLPosition = m_GLprogram->GetAttribute("EW_coord2d"); - m_GLMatrix = m_GLprogram->GetUniform("EW_MatrixTransformation"); - // Widget property ==> for the Vertex shader - m_GLwidgetProperty.m_size = m_GLprogram->GetUniform("EW_widgetProperty.size"); - m_GLwidgetProperty.m_insidePos = m_GLprogram->GetUniform("EW_widgetProperty.insidePos"); - m_GLwidgetProperty.m_insideSize = m_GLprogram->GetUniform("EW_widgetProperty.insideSize"); - // status property ==> for the fragment shader - m_GLstatus.m_stateOld = m_GLprogram->GetUniform("EW_status.stateOld"); - m_GLstatus.m_stateNew = m_GLprogram->GetUniform("EW_status.stateNew"); - m_GLstatus.m_transition = m_GLprogram->GetUniform("EW_status.transition"); - } // Limit event at 1: SetMouseLimit(1); } -widget::Button::Button(void) -{ - m_label = "No Label"; - Init(); -} - -widget::Button::Button(etk::UString newLabel) -{ - m_label = newLabel; - Init(); -} - widget::Button::~Button(void) { @@ -96,9 +61,7 @@ void widget::Button::SetImageToggle(etk::UString imageName) bool widget::Button::CalculateMinSize(void) { - etk::Vector2D padding; - padding.x = m_config->GetInteger(m_confIdPaddingX); - padding.y = m_config->GetInteger(m_confIdPaddingY); + etk::Vector2D padding = m_shaper.GetPadding(); etk::Vector3D minSize = m_displayText.CalculateSize(m_label); m_minSize.x = padding.x*2 + minSize.x; @@ -138,63 +101,9 @@ bool widget::Button::GetValue(void) } -void widget::Button::SetPoint(float x, float y) -{ - etk::Vector2D triangle(x, y); - m_coord.PushBack(triangle); -} - -void widget::Button::Rectangle(float x, float y, float w, float h) -{ - m_coord.Clear(); - /* Bitmap position - * xA xB - * yC *------* - * | | - * | | - * yD *------* - */ - float dxA = x; - float dxB = x + w; - float dyC = y; - float dyD = y + h; - SetPoint(dxA, dyD); - SetPoint(dxA, dyC); - SetPoint(dxB, dyC); - - SetPoint(dxB, dyC); - SetPoint(dxB, dyD); - SetPoint(dxA, dyD); -} - - void widget::Button::OnDraw(ewol::DrawProperty& displayProp) { - if (m_GLprogram==NULL) { - EWOL_ERROR("No shader ..."); - return; - } - //glScalef(m_scaling.x, m_scaling.y, 1.0); - m_GLprogram->Use(); - // set Matrix : translation/positionMatrix - etk::Matrix4 tmpMatrix = ewol::openGL::GetMatrix(); - m_GLprogram->UniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); - // position : - // Note : Must be all the time a [-1..1] square ... - // TODO : plop ... - m_GLprogram->SendAttribute(m_GLPosition, 2/*x,y*/, &m_coord[0]); - // all entry parameters : - m_GLprogram->Uniform2fv(m_GLwidgetProperty.m_size, 1, &m_size.x); - m_GLprogram->Uniform2fv(m_GLwidgetProperty.m_insidePos, 1, &m_widgetProperty.m_insidePos.x); - m_GLprogram->Uniform2fv(m_GLwidgetProperty.m_insideSize, 1, &m_widgetProperty.m_insideSize.x); - m_GLprogram->Uniform1i(m_GLstatus.m_stateOld, m_status.m_stateOld); - m_GLprogram->Uniform1i(m_GLstatus.m_stateNew, m_status.m_stateNew); - m_GLprogram->Uniform1f(m_GLstatus.m_transition, m_status.m_transition); - - // Request the draw of the elements : - glDrawArrays(GL_TRIANGLES, 0, m_coord.Size()); - m_GLprogram->UnUse(); - + m_shaper.Draw(); #warning generate the Toggle if (true) { m_displayImage.Draw(); @@ -208,12 +117,11 @@ void widget::Button::OnRegenerateDisplay(void) { if (true == NeedRedraw()) { - etk::Vector2D padding; - padding.x = m_config->GetInteger(m_confIdPaddingX); - padding.y = m_config->GetInteger(m_confIdPaddingY); + etk::Vector2D padding = m_shaper.GetPadding(); m_displayImage.Clear(); m_displayImageToggle.Clear(); + m_shaper.Clear(); int32_t tmpSizeX = m_minSize.x; int32_t tmpSizeY = m_minSize.y; @@ -268,12 +176,12 @@ void widget::Button::OnRegenerateDisplay(void) m_displayText.Translate(tmpTextOrigin); - m_widgetProperty.m_insidePos = textPos; + m_shaper.SetSize(m_size); + m_shaper.SetInsidePos(textPos); etk::Vector3D tmpp = m_displayText.CalculateSize(m_label); etk::Vector2D tmpp2(tmpp.x, tmpp.y); - m_widgetProperty.m_insideSize = tmpp2; + m_shaper.SetInsideSize(tmpp2); - Rectangle(0, 0, m_size.x, m_size.y); } } @@ -321,42 +229,17 @@ bool widget::Button::OnEventKb(ewol::keyEvent::status_te typeEvent, uniChar_t un void widget::Button::ChangeStatusIn(int32_t newStatusId) { - m_nextStatusRequested = newStatusId; - PeriodicCallSet(true); - MarkToRedraw(); + if (true == m_shaper.ChangeStatusIn(newStatusId) ) { + PeriodicCallSet(true); + MarkToRedraw(); + } } void widget::Button::PeriodicCall(int64_t localTime) { - // start : - if (m_time == -1) { - m_time = localTime; - m_status.m_stateOld = m_status.m_stateNew; - m_status.m_stateNew = m_nextStatusRequested; - m_nextStatusRequested = -1; - m_status.m_transition = 0.0; - //EWOL_ERROR(" ##### START ##### "); - } - int64_t offset = localTime - m_time; - float timeRelativity = m_config->GetFloat(m_confIdChangeTime)*1000.0; - if (offset > timeRelativity) { - // check if no new state requested: - if (m_nextStatusRequested != -1) { - m_time = localTime; - m_status.m_stateOld = m_status.m_stateNew; - m_status.m_stateNew = m_nextStatusRequested; - m_nextStatusRequested = -1; - m_status.m_transition = 0.0; - } else { - m_status.m_transition = 1.0; - //EWOL_ERROR(" ##### STOP ##### "); - PeriodicCallSet(false); - m_time = -1; - } - } else { - m_status.m_transition = (float)offset / timeRelativity; - //EWOL_DEBUG("time=" << offset << " in " << timeRelativity << " Transition : " << m_status.m_transition); + if (false == m_shaper.PeriodicCall(localTime) ) { + PeriodicCallSet(false); } MarkToRedraw(); } diff --git a/sources/ewol/widget/Button.h b/sources/ewol/widget/Button.h index cbeaf9c7..f91ec9d9 100644 --- a/sources/ewol/widget/Button.h +++ b/sources/ewol/widget/Button.h @@ -15,6 +15,7 @@ #include #include #include +#include extern const char * const ewolEventButtonPressed; extern const char * const ewolEventButtonDown; @@ -22,42 +23,6 @@ extern const char * const ewolEventButtonUp; extern const char * const ewolEventButtonEnter; extern const char * const ewolEventButtonLeave; - -namespace ewol { - class WidgetPosProperty - { - public: - etk::Vector2D m_insidePos; - etk::Vector2D m_insideSize; - }; - - class GLWidgetPosProperty - { - public: - int32_t m_size; - int32_t m_insidePos; - int32_t m_insideSize; - }; - // DATA - class WidgetStateProperty - { - public: - int32_t m_stateOld; - int32_t m_stateNew; - float m_transition; - }; - // ID of the UNIFORM element - class GLWidgetStateProperty - { - public: - int32_t m_stateOld; - int32_t m_stateNew; - int32_t m_transition; - }; -}; - - - namespace widget { typedef enum { TEXT_ALIGN_LEFT, @@ -66,26 +31,7 @@ namespace widget { class Button : public ewol::Widget { private: - // External theme config: - ewol::ConfigFile* m_config; - int32_t m_confIdPaddingX; - int32_t m_confIdPaddingY; - int32_t m_confIdChangeTime; - // OpenGL shaders programs: - ewol::Program* m_GLprogram; - int32_t m_GLPosition; - int32_t m_GLMatrix; - // widget property - ewol::GLWidgetPosProperty m_GLwidgetProperty; // id of the uniform - ewol::WidgetPosProperty m_widgetProperty; // structure of this uniform - // state property - ewol::GLWidgetStateProperty m_GLstatus; - ewol::WidgetStateProperty m_status; - - etk::Vector > m_coord; //!< internal coord of the object - void SetPoint(float x, float y); - void Rectangle(float x, float y, float w, float h); - private: + ewol::Shaper m_shaper; ewol::Text m_displayText; ewol::Image m_displayImage; ewol::Image m_displayImageToggle; @@ -93,11 +39,9 @@ namespace widget { etk::UString m_label; draw::Color m_textColorFg; //!< Text color public: - Button(void); - Button(etk::UString newLabel); + Button(etk::UString newLabel="No Label"); // Derived function virtual const char * const GetObjectType(void) { return "EwolButton"; }; - void Init(void); virtual ~Button(void); // Derived function virtual bool CalculateMinSize(void); @@ -119,9 +63,7 @@ namespace widget { // Derived function virtual bool OnEventKb(ewol::keyEvent::status_te typeEvent, uniChar_t unicodeData); private: - int32_t m_nextStatusRequested; void ChangeStatusIn(int32_t newStatusId); - int64_t m_time; // Derived function virtual void PeriodicCall(int64_t localTime); }; diff --git a/sources/file.mk b/sources/file.mk index 3eebbb2d..491049e6 100644 --- a/sources/file.mk +++ b/sources/file.mk @@ -43,7 +43,8 @@ FILE_LIST+= ewol/compositing/Compositing.cpp \ ewol/compositing/Drawing.cpp \ ewol/compositing/Image.cpp \ ewol/compositing/Sprite.cpp \ - ewol/compositing/Mesh.cpp + ewol/compositing/Mesh.cpp \ + ewol/compositing/Shaper.cpp # all widgets