diff --git a/ewol/widget/WidgetScrolled.cpp b/ewol/widget/WidgetScrolled.cpp index 7a5ff6e6..e158c84a 100644 --- a/ewol/widget/WidgetScrolled.cpp +++ b/ewol/widget/WidgetScrolled.cpp @@ -30,7 +30,7 @@ ewol::widget::WidgetScrolled::WidgetScrolled() : m_scroollingMode = scroolModeNormal; m_highSpeedType = gale::key::type::unknow; m_highSpeedButton = -1; - m_limitScrolling = 0.5; + m_limitScrolling = vec2(0.5f, 0.5f); m_fingerScoolActivated = false; for (size_t iii = 0; iii < CALCULATE_SIMULTANEOUS_FINGER; ++iii) { @@ -61,7 +61,7 @@ void ewol::widget::WidgetScrolled::onRegenerateDisplay() { || m_originScrooled.y()!=0) { float lenScrollBar = m_size.y()*m_size.y() / m_maxSize.y(); lenScrollBar = std::avg(10.0f, lenScrollBar, m_size.y()); - float originScrollBar = m_originScrooled.y() / (m_maxSize.y()-m_size.y()*m_limitScrolling); + float originScrollBar = m_originScrooled.y() / (m_maxSize.y()-m_size.y()*m_limitScrolling.y()); originScrollBar = std::avg(0.0f, originScrollBar, 1.0f); originScrollBar *= (m_size.y()-lenScrollBar); m_shaperV.setShape(vec2(m_size.x() - paddingVert.x(), 0), @@ -73,7 +73,7 @@ void ewol::widget::WidgetScrolled::onRegenerateDisplay() { || m_originScrooled.x()!=0) { float lenScrollBar = (m_size.x()-paddingHori.xLeft())*(m_size.x()-paddingVert.x()) / m_maxSize.x(); lenScrollBar = std::avg(10.0f, lenScrollBar, (m_size.x()-paddingVert.x())); - float originScrollBar = m_originScrooled.x() / (m_maxSize.x()-m_size.x()*m_limitScrolling); + float originScrollBar = m_originScrooled.x() / (m_maxSize.x()-m_size.x()*m_limitScrolling.x()); originScrollBar = std::avg(0.0f, originScrollBar, 1.0f); originScrollBar *= (m_size.x()-paddingHori.xRight()-lenScrollBar); m_shaperH.setShape(vec2(0, 0), @@ -107,7 +107,7 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event m_highSpeedButton = 1; // force direct scrolling in this case m_originScrooled.setY((int32_t)(m_maxSize.y() * (relativePos.y()-paddingV.yButtom()) / (m_size.y()-paddingV.yButtom()*2))); - m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); + m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y()))); markToRedraw(); return true; } @@ -121,7 +121,7 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event m_highSpeedButton = 1; // force direct scrolling in this case m_originScrooled.setX((int32_t)(m_maxSize.x() * (relativePos.x()-paddingH.xLeft()) / (m_size.x()-paddingH.xLeft()*2))); - m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling))); + m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling.x()))); markToRedraw(); return true; } @@ -139,9 +139,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event } else { if(m_size.y() < m_maxSize.y() || m_originScrooled.y() != 0 - || m_size.y()*m_limitScrolling < m_maxSize.y() ) { + || m_size.y()*m_limitScrolling.y() < m_maxSize.y() ) { m_originScrooled.setY(m_originScrooled.y()-m_pixelScrolling); - m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); + m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y()))); markToRedraw(); return true; } @@ -158,9 +158,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event } else { if(m_size.y() < m_maxSize.y() || m_originScrooled.y()!=0 - || m_size.y()*m_limitScrolling < m_maxSize.y() ) { + || m_size.y()*m_limitScrolling.y() < m_maxSize.y() ) { m_originScrooled.setY(m_originScrooled.y()+m_pixelScrolling); - m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); + m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y()))); markToRedraw(); return true; } @@ -170,9 +170,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event // Scrool Left if(m_size.x() < m_maxSize.x() || m_originScrooled.x()!=0 - || m_size.x()*m_limitScrolling < m_maxSize.x() ) { + || m_size.x()*m_limitScrolling.x() < m_maxSize.x() ) { m_originScrooled.setX(m_originScrooled.x()-m_pixelScrolling); - m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling))); + m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling.x()))); markToRedraw(); return true; } @@ -181,9 +181,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event // Scrool Right if(m_size.x() < m_maxSize.x() || m_originScrooled.x()!=0 - || m_size.x()*m_limitScrolling < m_maxSize.x() ) { + || m_size.x()*m_limitScrolling.x() < m_maxSize.x() ) { m_originScrooled.setX(m_originScrooled.x()+m_pixelScrolling); - m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling))); + m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling.x()))); markToRedraw(); return true; } @@ -252,20 +252,20 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event } markToRedraw(); } - m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); + m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y()))); return true; } if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableHorizontal && _event.getStatus() == gale::key::status::move) { m_originScrooled.setX((int32_t)(m_maxSize.x() * (relativePos.x()-paddingH.xLeft()) / (m_size.x()-paddingH.x()))); - m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling))); + m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling.x()))); markToRedraw(); return true; } if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableVertical && _event.getStatus() == gale::key::status::move) { m_originScrooled.setY((int32_t)(m_maxSize.y() * (relativePos.y()-paddingV.yButtom()) / (m_size.y()-paddingV.y()))); - m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); + m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y()))); markToRedraw(); return true; } @@ -301,8 +301,8 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event if (_event.getStatus() == gale::key::status::move) { m_originScrooled.setX(m_originScrooled.x() - (relativePos.x() - m_fingerMoveStartPos[idTable].x())*0.5f); m_originScrooled.setY(m_originScrooled.y() - (relativePos.y() - m_fingerMoveStartPos[idTable].y())*0.5f); - m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling))); - m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); + m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling.x()))); + m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y()))); m_fingerMoveStartPos[idTable] = relativePos; EWOL_VERBOSE("SCROOL == > MOVE m_originScrooled=" << m_originScrooled << " " << relativePos << " " << m_highSpeedStartPos); markToRedraw(); @@ -347,13 +347,21 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event markToRedraw(); } return true; + } else if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableFinger + && _event.getStatus() == gale::key::status::pressSingle) { + // Keep all event in the range of moving + return true; + } else if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableFinger + && _event.getStatus() == gale::key::status::pressDouble) { + // Keep all event in the range of moving + return true; } if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableFinger && _event.getStatus() == gale::key::status::move) { //m_originScrooled.x = (int32_t)(m_maxSize.x * x / m_size.x); m_originScrooled.setX(m_originScrooled.x() - (relativePos.x() - m_highSpeedStartPos.x())); m_originScrooled.setY(m_originScrooled.y() - (relativePos.y() - m_highSpeedStartPos.y())); - m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling))); - m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling))); + m_originScrooled.setX(std::avg(0.0f, m_originScrooled.x(), (m_maxSize.x() - m_size.x()*m_limitScrolling.x()))); + m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y()))); m_highSpeedStartPos.setValue(relativePos.x(), relativePos.y()); EWOL_VERBOSE("SCROOL == > MOVE m_originScrooled=" << m_originScrooled << " " << relativePos << " " << m_highSpeedStartPos); markToRedraw(); diff --git a/ewol/widget/WidgetScrolled.hpp b/ewol/widget/WidgetScrolled.hpp index 85825662..cbabe019 100644 --- a/ewol/widget/WidgetScrolled.hpp +++ b/ewol/widget/WidgetScrolled.hpp @@ -38,7 +38,7 @@ namespace ewol { protected: vec2 m_originScrooled; //!< pixel distance from the origin of the display (Bottum left) vec2 m_maxSize; //!< Maximum size of the Widget ==> to display scrollbar - float m_limitScrolling; //!< Mimit scrolling represent the propertion of the minimel scrolling activate (0.2 ==> 20% migt all time be visible) + vec2 m_limitScrolling; //!< Mimit scrolling represent the propertion of the minimel scrolling activate (0.2 ==> 20% migt all time be visible) private: // Mouse section : enum scrollingMode m_scroollingMode; //!< mode of management of the scrooling float m_pixelScrolling; @@ -123,7 +123,15 @@ namespace ewol { * @param[in] _poucentageLimit pourcent of the limit of view nothing in the widget when arriving at the end ... */ void setLimitScrolling(float _poucentageLimit) { - m_limitScrolling = std::avg(0.1f, _poucentageLimit,0.9f); + _poucentageLimit = std::avg(0.1f, _poucentageLimit,1.0f); + m_limitScrolling = vec2(_poucentageLimit, _poucentageLimit); + }; + /** + * @brief set the scrolling limit when arriving at he end of the widget + * @param[in] _poucentageLimit pourcent of the limit of view nothing in the widget when arriving at the end for axis specific... + */ + void setLimitScrolling(const vec2& _poucentageLimit) { + m_limitScrolling = vec2(std::avg(0.1f, _poucentageLimit.x(),1.0f), std::avg(0.1f, _poucentageLimit.y(),1.0f)); }; protected: virtual void onChangePropertyShapeVert();