diff --git a/ewol/widget/Sizer.cpp b/ewol/widget/Sizer.cpp index 36f754f5..59d881dd 100644 --- a/ewol/widget/Sizer.cpp +++ b/ewol/widget/Sizer.cpp @@ -16,7 +16,6 @@ ewol::widget::Sizer::Sizer() : m_mode(*this, "mode", modeHori, "The display mode"), m_borderSize(*this, "border", vec2(0,0), "The sizer border size"), - m_borderColor(*this, "border-color", etk::color::none, "Color of the border"), m_animation(animationNone), m_animationTime(0) { addObjectType("ewol::widget::Sizer"); @@ -251,125 +250,6 @@ void ewol::widget::Sizer::calculateMinMaxSize() { //EWOL_ERROR("[" << getId() << "] {" << getObjectType() << "} Result min size : " << m_minSize); } -void ewol::widget::Sizer::onRegenerateDisplay() { - ewol::widget::ContainerN::onRegenerateDisplay(); - m_draw.clear(); - vec2 tmpBorderSize = m_borderSize->getPixel(); - if (tmpBorderSize == vec2(0.0f, 0.0f)) { - return; - } - if (m_borderColor->a() == 0) { - return; - } - m_draw.setColor(m_borderColor); - m_draw.setPos(vec3(0, 0, 0) ); - m_draw.rectangleWidth(vec3(tmpBorderSize.x(), m_size.y(),0) ); - m_draw.setPos(vec3(m_size.x() - tmpBorderSize.x(), 0, 0) ); - m_draw.rectangleWidth(vec3(tmpBorderSize.x(), m_size.y(),0) ); - m_draw.setPos(vec3(tmpBorderSize.x(), 0, 0) ); - m_draw.rectangleWidth(vec3(m_size.x()-tmpBorderSize.x()*2.0f, tmpBorderSize.y(),0) ); - m_draw.setPos(vec3(tmpBorderSize.x(), m_size.y()-tmpBorderSize.y(), 0) ); - m_draw.rectangleWidth(vec3(m_size.x()-tmpBorderSize.x()*2.0f, tmpBorderSize.y(),0) ); - vec2 underSize(0,0); - vec2 underOrigin(999999999999.0,999999999999.0); - for (auto &it : m_subWidget) { - if (it == nullptr) { - continue; - } - vec2 size = it->getSize(); - if (m_mode == ewol::widget::Sizer::modeVert) { - underSize += vec2(0.0f, size.y()); - underSize.setX(std::max(underSize.x(), size.x())); - } else { - underSize += vec2(size.x(), 0.0f); - underSize.setY(std::max(underSize.y(), size.y())); - } - underOrigin.setX(std::min(it->getOrigin().x(), underOrigin.x())); - underOrigin.setY(std::min(it->getOrigin().y(), underOrigin.y())); - } - vec2 localWidgetSize = m_size - tmpBorderSize*2.0f; - vec2 localWidgetOrigin = m_origin + tmpBorderSize; - for (auto &it : m_subWidget) { - if (it == nullptr) { - continue; - } - vec2 origin = it->getOrigin(); - vec2 size = it->getSize(); - // now we display around the widget every element needed - if (m_mode == ewol::widget::Sizer::modeHori) { - if (size.y() < localWidgetSize.y()) { - // under - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_buttom)) == 0) { - m_draw.setColor(etk::Color<>(0xFF, 0xFF, 0x00, 0xA0)); - m_draw.setPos(vec2(origin.x(), localWidgetOrigin.y()) - m_origin); - m_draw.rectangleWidth(vec2(it->getSize().x(), origin.y()-localWidgetOrigin.y()) ); - } - // upper - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_top)) == 0) { - m_draw.setColor(etk::color::orange); - float startDraw = origin.y()+it->getSize().y() - m_origin.y(); - m_draw.setPos(vec2(origin.x()-m_origin.x(), startDraw)); - m_draw.rectangleWidth(vec2(it->getSize().x(), localWidgetSize.y()-startDraw+tmpBorderSize.y()) ); - } - } - } else { - if (size.x() < localWidgetSize.x()) { - // left - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_left)) == 0) { - m_draw.setColor(etk::Color<>(0xFF, 0xFF, 0x00, 0xA0)); - m_draw.setPos(vec2(localWidgetOrigin.x(), origin.y()) - m_origin); - m_draw.rectangleWidth(vec2(origin.x()-localWidgetOrigin.x(), it->getSize().y()) ); - } - // right - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_right)) == 0) { - m_draw.setColor(etk::color::orange); - float startDraw = origin.x()+it->getSize().x() - m_origin.x(); - m_draw.setPos(vec2(startDraw, origin.y()-m_origin.y())); - m_draw.rectangleWidth(vec2(localWidgetSize.x()-startDraw+tmpBorderSize.x(), it->getSize().y()) ); - } - } - } - } - // now we do the rest of the sizer: - if (m_mode == ewol::widget::Sizer::modeHori) { - if (underSize.x() < localWidgetSize.x()) { - // left - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_left)) == 0) { - m_draw.setColor(etk::color::purple); - m_draw.setPos(localWidgetOrigin - m_origin); - m_draw.rectangleWidth(vec2(underOrigin.x()-localWidgetOrigin.x(), localWidgetSize.y()) ); - } - // right - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_right)) == 0) { - m_draw.setColor(etk::color::cyan); - float startDraw = underOrigin.x() + underSize.x() - m_origin.x(); - m_draw.setPos(vec2(startDraw, localWidgetOrigin.y()-m_origin.y())); - m_draw.rectangleWidth(vec2(localWidgetSize.x()-startDraw+tmpBorderSize.x(), localWidgetSize.y()) ); - } - } - } else { - if (underSize.y() < localWidgetSize.y()) { - // under - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_buttom)) == 0) { - m_draw.setColor(etk::color::purple); - m_draw.setPos(localWidgetOrigin - m_origin); - m_draw.rectangleWidth(vec2(localWidgetSize.x(), underOrigin.y()-localWidgetOrigin.y()) ); - } - // upper - if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_top)) == 0) { - m_draw.setColor(etk::color::cyan); - float startDraw = underOrigin.y() + underSize.y() - m_origin.y(); - m_draw.setPos(vec2(localWidgetOrigin.x()-m_origin.x(), startDraw)); - m_draw.rectangleWidth(vec2(localWidgetSize.x(), localWidgetSize.y()-startDraw+tmpBorderSize.y()) ); - } - } - } -} -void ewol::widget::Sizer::onDraw() { - m_draw.draw(); - ewol::widget::ContainerN::onDraw(); -} - int32_t ewol::widget::Sizer::subWidgetAdd(std::shared_ptr _newWidget) { if (m_animation == animationNone) { return ewol::widget::ContainerN::subWidgetAdd(_newWidget); diff --git a/ewol/widget/Sizer.h b/ewol/widget/Sizer.h index d21357a1..2a446cda 100644 --- a/ewol/widget/Sizer.h +++ b/ewol/widget/Sizer.h @@ -30,7 +30,7 @@ namespace ewol { modeVert, //!< Vertical mode modeHori, //!< Horizontal mode }; - private: + protected: ewol::parameter::List m_mode; //!< Methode to display the widget list (vert/hory ...) protected: /** @@ -59,7 +59,7 @@ namespace ewol { enum displayMode getMode() const { return m_mode; } - private: + protected: ewol::parameter::Value m_borderSize; //!< Border size needed for all the display public: /** @@ -76,23 +76,6 @@ namespace ewol { const gale::Dimension& getBorderSize() const { return m_borderSize; }; - private: - ewol::parameter::Value> m_borderColor; //!< Border color. - public: - /** - * @brief Set the current border color: - * @param[in] _value The border color to set @ref etk::color::none : no color - */ - void setBorderColor(const etk::Color<>& _value) { - m_borderColor.set(_value); - } - /** - * @brief get the current border size of the current element: - * @return the border size (0 if not used) - */ - const etk::Color<>& getBorderColor() const { - return m_borderColor; - }; public: enum animation { animationNone, //!< No annimation @@ -102,7 +85,7 @@ namespace ewol { animationRight //!< element came from the right //animationZoom //!< element came from zooming }; - private: + protected: enum animation m_animation; //!< Methode add and remove element (animation) public: /** @@ -119,7 +102,7 @@ namespace ewol { enum animation getAnimationMode() { return m_animation; }; - private: + protected: float m_animationTime; //!< Time in second to generate animation public: /** @@ -136,8 +119,6 @@ namespace ewol { float getAnimationTime() { return m_animationTime; }; - private: - ewol::compositing::Drawing m_draw; //!< Compositing drawing element for display the border. public: // Derived function virtual void onChangeSize(); virtual void calculateMinMaxSize(); @@ -147,8 +128,6 @@ namespace ewol { virtual void subWidgetRemove(std::shared_ptr _newWidget); virtual void subWidgetUnLink(std::shared_ptr _newWidget); virtual void onParameterChangeValue(const ewol::parameter::Ref& _paramPointer); - virtual void onRegenerateDisplay(); - virtual void onDraw(); }; } } diff --git a/lutin_ewol-tools-visual-test.py b/lutin_ewol-tools-visual-test.py index b40773e1..b0e8dc28 100755 --- a/lutin_ewol-tools-visual-test.py +++ b/lutin_ewol-tools-visual-test.py @@ -31,6 +31,7 @@ def create(target, module_name): 'tools/visual_test/appl/debug.cpp', 'tools/visual_test/appl/init.cpp', 'tools/visual_test/appl/MainWindows.cpp', + 'tools/visual_test/appl/widget/SizerColor.cpp', 'tools/visual_test/appl/TestButton.cpp', 'tools/visual_test/appl/TestCheckBox.cpp', 'tools/visual_test/appl/TestImage.cpp', diff --git a/tools/visual_test/appl/init.cpp b/tools/visual_test/appl/init.cpp index e9f87c4e..76ce0c59 100644 --- a/tools/visual_test/appl/init.cpp +++ b/tools/visual_test/appl/init.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -47,6 +48,9 @@ class MainApplication : public ewol::context::Application { // set the application icon ... _context.setIcon("DATA:icon.png"); + + appl::widget::SizerColor::createManagerWidget(_context.getWidgetManager()); + APPL_INFO("==> CREATE ... (END)"); } diff --git a/tools/visual_test/appl/widget/SizerColor.cpp b/tools/visual_test/appl/widget/SizerColor.cpp new file mode 100644 index 00000000..20d8b73a --- /dev/null +++ b/tools/visual_test/appl/widget/SizerColor.cpp @@ -0,0 +1,145 @@ +/** + * @author Edouard DUPIN + * + * @copyright 2011, Edouard DUPIN, all right reserved + * + * @license APACHE v2.0 (see license file) + */ + +#include +#include + +#undef __class__ +#define __class__ "SizerColor" + +appl::widget::SizerColor::SizerColor() : + m_borderColor(*this, "border-color", etk::color::none, "Color of the border") { + addObjectType("appl::widget::SizerColor"); +} + +void appl::widget::SizerColor::init(enum displayMode _mode) { + ewol::widget::Sizer::init(); +} + +appl::widget::SizerColor::~SizerColor() { + +} + +void appl::widget::SizerColor::onRegenerateDisplay() { + ewol::widget::Sizer::onRegenerateDisplay(); + m_draw.clear(); + vec2 tmpBorderSize = m_borderSize->getPixel(); + if (tmpBorderSize == vec2(0.0f, 0.0f)) { + return; + } + if (m_borderColor->a() == 0) { + return; + } + m_draw.setColor(m_borderColor); + m_draw.setPos(vec3(0, 0, 0) ); + m_draw.rectangleWidth(vec3(tmpBorderSize.x(), m_size.y(),0) ); + m_draw.setPos(vec3(m_size.x() - tmpBorderSize.x(), 0, 0) ); + m_draw.rectangleWidth(vec3(tmpBorderSize.x(), m_size.y(),0) ); + m_draw.setPos(vec3(tmpBorderSize.x(), 0, 0) ); + m_draw.rectangleWidth(vec3(m_size.x()-tmpBorderSize.x()*2.0f, tmpBorderSize.y(),0) ); + m_draw.setPos(vec3(tmpBorderSize.x(), m_size.y()-tmpBorderSize.y(), 0) ); + m_draw.rectangleWidth(vec3(m_size.x()-tmpBorderSize.x()*2.0f, tmpBorderSize.y(),0) ); + vec2 underSize(0,0); + vec2 underOrigin(999999999999.0,999999999999.0); + for (auto &it : m_subWidget) { + if (it == nullptr) { + continue; + } + vec2 size = it->getSize(); + if (m_mode == ewol::widget::Sizer::modeVert) { + underSize += vec2(0.0f, size.y()); + underSize.setX(std::max(underSize.x(), size.x())); + } else { + underSize += vec2(size.x(), 0.0f); + underSize.setY(std::max(underSize.y(), size.y())); + } + underOrigin.setX(std::min(it->getOrigin().x(), underOrigin.x())); + underOrigin.setY(std::min(it->getOrigin().y(), underOrigin.y())); + } + vec2 localWidgetSize = m_size - tmpBorderSize*2.0f; + vec2 localWidgetOrigin = m_origin + tmpBorderSize; + for (auto &it : m_subWidget) { + if (it == nullptr) { + continue; + } + vec2 origin = it->getOrigin(); + vec2 size = it->getSize(); + // now we display around the widget every element needed + if (m_mode == ewol::widget::Sizer::modeHori) { + if (size.y() < localWidgetSize.y()) { + // under + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_buttom)) == 0) { + m_draw.setColor(etk::Color<>(0xFF, 0xFF, 0x00, 0xA0)); + m_draw.setPos(vec2(origin.x(), localWidgetOrigin.y()) - m_origin); + m_draw.rectangleWidth(vec2(it->getSize().x(), origin.y()-localWidgetOrigin.y()) ); + } + // upper + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_top)) == 0) { + m_draw.setColor(etk::color::orange); + float startDraw = origin.y()+it->getSize().y() - m_origin.y(); + m_draw.setPos(vec2(origin.x()-m_origin.x(), startDraw)); + m_draw.rectangleWidth(vec2(it->getSize().x(), localWidgetSize.y()-startDraw+tmpBorderSize.y()) ); + } + } + } else { + if (size.x() < localWidgetSize.x()) { + // left + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_left)) == 0) { + m_draw.setColor(etk::Color<>(0xFF, 0xFF, 0x00, 0xA0)); + m_draw.setPos(vec2(localWidgetOrigin.x(), origin.y()) - m_origin); + m_draw.rectangleWidth(vec2(origin.x()-localWidgetOrigin.x(), it->getSize().y()) ); + } + // right + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_right)) == 0) { + m_draw.setColor(etk::color::orange); + float startDraw = origin.x()+it->getSize().x() - m_origin.x(); + m_draw.setPos(vec2(startDraw, origin.y()-m_origin.y())); + m_draw.rectangleWidth(vec2(localWidgetSize.x()-startDraw+tmpBorderSize.x(), it->getSize().y()) ); + } + } + } + } + // now we do the rest of the sizer: + if (m_mode == ewol::widget::Sizer::modeHori) { + if (underSize.x() < localWidgetSize.x()) { + // left + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_left)) == 0) { + m_draw.setColor(etk::color::purple); + m_draw.setPos(localWidgetOrigin - m_origin); + m_draw.rectangleWidth(vec2(underOrigin.x()-localWidgetOrigin.x(), localWidgetSize.y()) ); + } + // right + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_right)) == 0) { + m_draw.setColor(etk::color::cyan); + float startDraw = underOrigin.x() + underSize.x() - m_origin.x(); + m_draw.setPos(vec2(startDraw, localWidgetOrigin.y()-m_origin.y())); + m_draw.rectangleWidth(vec2(localWidgetSize.x()-startDraw+tmpBorderSize.x(), localWidgetSize.y()) ); + } + } + } else { + if (underSize.y() < localWidgetSize.y()) { + // under + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_buttom)) == 0) { + m_draw.setColor(etk::color::purple); + m_draw.setPos(localWidgetOrigin - m_origin); + m_draw.rectangleWidth(vec2(localWidgetSize.x(), underOrigin.y()-localWidgetOrigin.y()) ); + } + // upper + if ((uint32_t(m_gravity) & uint32_t(ewol::gravity_top)) == 0) { + m_draw.setColor(etk::color::cyan); + float startDraw = underOrigin.y() + underSize.y() - m_origin.y(); + m_draw.setPos(vec2(localWidgetOrigin.x()-m_origin.x(), startDraw)); + m_draw.rectangleWidth(vec2(localWidgetSize.x(), localWidgetSize.y()-startDraw+tmpBorderSize.y()) ); + } + } + } +} +void appl::widget::SizerColor::onDraw() { + m_draw.draw(); + ewol::widget::Sizer::onDraw(); +} diff --git a/tools/visual_test/appl/widget/SizerColor.h b/tools/visual_test/appl/widget/SizerColor.h new file mode 100644 index 00000000..62c44c89 --- /dev/null +++ b/tools/visual_test/appl/widget/SizerColor.h @@ -0,0 +1,61 @@ +/** + * @author Edouard DUPIN + * + * @copyright 2011, Edouard DUPIN, all right reserved + * + * @license APACHE v2.0 (see license file) + */ +#pragma once + +#include +#include +#include +#include + +namespace appl { + namespace widget { + class SizerColor : public ewol::widget::Sizer { + public: + /** + * @brief Main call of recording the widget on the List of "widget named creator" + */ + static void init(ewol::widget::Manager& _widgetManager); + protected: + /** + * @brief Constructor + * @param[in] _mode The mode to display the elements + */ + SizerColor(); + void init(enum displayMode _mode=ewol::widget::Sizer::modeHori); + public: + DECLARE_WIDGET_FACTORY(SizerColor, "SizerColor"); + /** + * @brief Desstructor + */ + virtual ~SizerColor(); + private: + ewol::parameter::Value> m_borderColor; //!< Border color. + public: + /** + * @brief Set the current border color: + * @param[in] _value The border color to set @ref etk::color::none : no color + */ + void setBorderColor(const etk::Color<>& _value) { + m_borderColor.set(_value); + } + /** + * @brief get the current border size of the current element: + * @return the border size (0 if not used) + */ + const etk::Color<>& getBorderColor() const { + return m_borderColor; + }; + private: + ewol::compositing::Drawing m_draw; //!< Compositing drawing element for display the border. + public: + virtual void onRegenerateDisplay(); + virtual void onDraw(); + }; + } +} + diff --git a/tools/visual_test/data/gui.xml b/tools/visual_test/data/gui.xml index dbe7e4f5..b8ef2734 100644 --- a/tools/visual_test/data/gui.xml +++ b/tools/visual_test/data/gui.xml @@ -44,12 +44,16 @@ - + @@ -57,7 +61,7 @@ --> - +