From d01d270135f3a9756c5b2a4dafd2f7c5ae96d7ac Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Fri, 18 Mar 2016 21:26:39 +0100 Subject: [PATCH] [DEV] some correction --- ewol/widget/Container.cpp | 3 ++ ewol/widget/Scroll.cpp | 58 ++++++++++++++++++++++++++++++---- ewol/widget/Scroll.h | 5 +-- ewol/widget/Widget.cpp | 1 + ewol/widget/Widget.h | 2 +- tools/visual_test/data/gui.xml | 4 +-- 6 files changed, 61 insertions(+), 12 deletions(-) diff --git a/ewol/widget/Container.cpp b/ewol/widget/Container.cpp index 945841a4..6b6a2b61 100644 --- a/ewol/widget/Container.cpp +++ b/ewol/widget/Container.cpp @@ -100,6 +100,9 @@ void ewol::widget::Container::systemDraw(const ewol::DrawProperty& _displayProp) void ewol::widget::Container::onChangeSize() { ewol::Widget::onChangeSize(); + if (*propertyHide == true) { + return; + } if (m_subWidget == nullptr) { return; } diff --git a/ewol/widget/Scroll.cpp b/ewol/widget/Scroll.cpp index cc95eb70..2a61bbbf 100644 --- a/ewol/widget/Scroll.cpp +++ b/ewol/widget/Scroll.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #undef __class__ #define __class__ "Scroll" @@ -33,6 +34,16 @@ ewol::widget::Scroll::Scroll() : m_highSpeedButton(-1), m_highSpeedType(gale::key::type_unknow) { addObjectType("ewol::widget::Scroll"); + // Remove gravity property: (only keep top/buttom) + propertyGravity.remove("center"); + propertyGravity.remove("top-left"); + //propertyGravity.remove("top"); + propertyGravity.remove("top-right"); + propertyGravity.remove("right"); + propertyGravity.remove("buttom-right"); + //propertyGravity.remove("buttom"); + propertyGravity.remove("buttom-left"); + propertyGravity.remove("left"); } void ewol::widget::Scroll::init() { @@ -45,11 +56,31 @@ void ewol::widget::Scroll::init() { ewol::widget::Scroll::~Scroll() { } - +// TODO : create a config for this ... #define SCROLL_BAR_SPACE (15) +// note: The widget will expand has possible and will control itself the display property +void ewol::widget::Scroll::onChangeSize() { + // Note: No call of container ==> normal case ... + ewol::Widget::onChangeSize(); + if (*propertyHide == true) { + return; + } + if (m_subWidget == nullptr) { + return; + } + vec2 origin = m_origin+m_offset; + vec2 minSize = m_subWidget->getCalculateMinSize(); + bvec2 expand = m_subWidget->propertyExpand.get(); + //The gravity is not set on the sub element ==> special use of the widget + //origin += ewol::gravityGenerateDelta(propertyGravity.get(), minSize - m_size); + m_subWidget->setOrigin(origin); + m_subWidget->setSize(minSize); + m_subWidget->onChangeSize(); +} + void ewol::widget::Scroll::calculateMinMaxSize() { - // call main class !! and not containter class ... + // Note: No call of container ==> normal case ... ewol::Widget::calculateMinMaxSize(); // call sub classes if (m_subWidget != nullptr) { @@ -72,9 +103,20 @@ void ewol::widget::Scroll::systemDraw(const ewol::DrawProperty& _displayProp) { void ewol::widget::Scroll::onDraw() { m_shaperH.draw(); m_shaperV.draw(); + ewol::compositing::Drawing draw; + draw.setPos(vec2(10,10)); + draw.setColor(etk::color::orange); + draw.rectangleWidth(vec2(25,25)); + draw.setPos(m_size - vec2(35,35)); + draw.setColor(etk::color::green); + draw.rectangleWidth(vec2(25,25)); + draw.draw(); } void ewol::widget::Scroll::onRegenerateDisplay() { + if (*propertyHide == true) { + return; + } // call upper class ewol::widget::Container::onRegenerateDisplay(); if (needRedraw() == false) { @@ -92,7 +134,7 @@ void ewol::widget::Scroll::onRegenerateDisplay() { scrollSize = m_subWidget->getSize(); } if( m_size.y() < scrollSize.y() - || scrollOffset.y()!=0) { + || scrollOffset.y() != 0) { float lenScrollBar = m_size.y()*m_size.y() / scrollSize.y(); lenScrollBar = std::avg(10.0f, lenScrollBar, m_size.y()); float originScrollBar = scrollOffset.y() / (scrollSize.y()-m_size.y()*propertyLimit->y()); @@ -104,7 +146,7 @@ void ewol::widget::Scroll::onRegenerateDisplay() { vec2(0, lenScrollBar)); } if( m_size.x() < scrollSize.x() - || scrollOffset.x()!=0) { + || scrollOffset.x() != 0) { float lenScrollBar = (m_size.x()-paddingHori.xLeft())*(m_size.x()-paddingVert.x()) / scrollSize.x(); lenScrollBar = std::avg(10.0f, lenScrollBar, (m_size.x()-paddingVert.x())); float originScrollBar = scrollOffset.x() / (scrollSize.x()-m_size.x()*propertyLimit->x()); @@ -127,11 +169,11 @@ bool ewol::widget::Scroll::onEventInput(const ewol::event::Input& _event) { scrollOffset = m_subWidget->getOffset(); scrollSize = m_subWidget->getSize(); } - EWOL_VERBOSE("Get Event on scroll : " << _event); + EWOL_ERROR("Get Event on scroll : " << _event); relativePos.setY(m_size.y() - relativePos.y()); if( _event.getType() == gale::key::type_mouse - && ( gale::key::type_unknow == m_highSpeedType - || gale::key::type_mouse == m_highSpeedType ) ) { + && ( m_highSpeedType == gale::key::type_unknow + || m_highSpeedType == gale::key::type_mouse) ) { if( _event.getId() == 1 && _event.getStatus() == gale::key::status_down) { // check if selected the scrolling position whth the scrolling bar ... @@ -173,6 +215,7 @@ bool ewol::widget::Scroll::onEventInput(const ewol::event::Input& _event) { return false; } else if( _event.getId() == 4 && _event.getStatus() == gale::key::status_up) { + EWOL_ERROR(" mode UP " << m_size.y() << "<" << scrollSize.y()); if(m_size.y() < scrollSize.y()) { scrollOffset.setY(scrollOffset.y()-m_pixelScrolling); scrollOffset.setY(std::avg(0.0f, scrollOffset.y(), (scrollSize.y() - m_size.y()*propertyLimit->y()))); @@ -184,6 +227,7 @@ bool ewol::widget::Scroll::onEventInput(const ewol::event::Input& _event) { } } else if( _event.getId() == 5 && _event.getStatus() == gale::key::status_up) { + EWOL_ERROR(" mode DOWN " << m_size.y() << "<" << scrollSize.y()); if(m_size.y() < scrollSize.y()) { scrollOffset.setY(scrollOffset.y()+m_pixelScrolling); scrollOffset.setY(std::avg(0.0f, scrollOffset.y(), (scrollSize.y() - m_size.y()*propertyLimit->y()))); diff --git a/ewol/widget/Scroll.h b/ewol/widget/Scroll.h index 05cf059a..2e6e2f8c 100644 --- a/ewol/widget/Scroll.h +++ b/ewol/widget/Scroll.h @@ -28,9 +28,9 @@ namespace ewol { enum highSpeedMode { speedModeDisable, speedModeInit, - speedModeEnableFinger, // Specific for touchpad + speedModeEnableFinger, // Specific for touchpad speedModeEnableHorizontal, // Specific for mouse - speedModeEnableVertical, // Specific for mouse + speedModeEnableVertical, // Specific for mouse speedModeGrepEndEvent }; private: @@ -49,6 +49,7 @@ namespace ewol { DECLARE_WIDGET_FACTORY(Scroll, "Scroll"); virtual ~Scroll(); public: + void onChangeSize() override; void calculateMinMaxSize() override; void onRegenerateDisplay() override; bool onEventInput(const ewol::event::Input& _event) override; diff --git a/ewol/widget/Widget.cpp b/ewol/widget/Widget.cpp index de4aded0..faf64aca 100644 --- a/ewol/widget/Widget.cpp +++ b/ewol/widget/Widget.cpp @@ -125,6 +125,7 @@ void ewol::Widget::keepFocus() { } void ewol::Widget::setOffset(const vec2& _newVal) { + EWOL_INFO("Set offset: " << _newVal); if (m_offset != _newVal) { m_offset = _newVal; markToRedraw(); diff --git a/ewol/widget/Widget.h b/ewol/widget/Widget.h index 3e5413bc..3de09dbb 100644 --- a/ewol/widget/Widget.h +++ b/ewol/widget/Widget.h @@ -180,7 +180,7 @@ namespace ewol { */ virtual void changeZoom(float _range) {}; protected: - vec2 m_origin; //!< internal ... I do not really known how i can use it ... + vec2 m_origin; //!< internal ... I do not really known how if can use it ... public: /** * @brief set origin at the widget (must be an parrent widget that set this parameter). diff --git a/tools/visual_test/data/gui.xml b/tools/visual_test/data/gui.xml index 83fdf162..83aa158e 100644 --- a/tools/visual_test/data/gui.xml +++ b/tools/visual_test/data/gui.xml @@ -26,7 +26,7 @@ - +