[DEV] add support of scolling selection on X and Y and not a single value
This commit is contained in:
parent
254f2d0137
commit
0a12e94847
@ -30,7 +30,7 @@ ewol::widget::WidgetScrolled::WidgetScrolled() :
|
|||||||
m_scroollingMode = scroolModeNormal;
|
m_scroollingMode = scroolModeNormal;
|
||||||
m_highSpeedType = gale::key::type::unknow;
|
m_highSpeedType = gale::key::type::unknow;
|
||||||
m_highSpeedButton = -1;
|
m_highSpeedButton = -1;
|
||||||
m_limitScrolling = 0.5;
|
m_limitScrolling = vec2(0.5f, 0.5f);
|
||||||
|
|
||||||
m_fingerScoolActivated = false;
|
m_fingerScoolActivated = false;
|
||||||
for (size_t iii = 0; iii < CALCULATE_SIMULTANEOUS_FINGER; ++iii) {
|
for (size_t iii = 0; iii < CALCULATE_SIMULTANEOUS_FINGER; ++iii) {
|
||||||
@ -61,7 +61,7 @@ void ewol::widget::WidgetScrolled::onRegenerateDisplay() {
|
|||||||
|| m_originScrooled.y()!=0) {
|
|| m_originScrooled.y()!=0) {
|
||||||
float lenScrollBar = m_size.y()*m_size.y() / m_maxSize.y();
|
float lenScrollBar = m_size.y()*m_size.y() / m_maxSize.y();
|
||||||
lenScrollBar = std::avg(10.0f, lenScrollBar, m_size.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 = std::avg(0.0f, originScrollBar, 1.0f);
|
||||||
originScrollBar *= (m_size.y()-lenScrollBar);
|
originScrollBar *= (m_size.y()-lenScrollBar);
|
||||||
m_shaperV.setShape(vec2(m_size.x() - paddingVert.x(), 0),
|
m_shaperV.setShape(vec2(m_size.x() - paddingVert.x(), 0),
|
||||||
@ -73,7 +73,7 @@ void ewol::widget::WidgetScrolled::onRegenerateDisplay() {
|
|||||||
|| m_originScrooled.x()!=0) {
|
|| m_originScrooled.x()!=0) {
|
||||||
float lenScrollBar = (m_size.x()-paddingHori.xLeft())*(m_size.x()-paddingVert.x()) / m_maxSize.x();
|
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()));
|
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 = std::avg(0.0f, originScrollBar, 1.0f);
|
||||||
originScrollBar *= (m_size.x()-paddingHori.xRight()-lenScrollBar);
|
originScrollBar *= (m_size.x()-paddingHori.xRight()-lenScrollBar);
|
||||||
m_shaperH.setShape(vec2(0, 0),
|
m_shaperH.setShape(vec2(0, 0),
|
||||||
@ -107,7 +107,7 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
m_highSpeedButton = 1;
|
m_highSpeedButton = 1;
|
||||||
// force direct scrolling in this case
|
// 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((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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -121,7 +121,7 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
m_highSpeedButton = 1;
|
m_highSpeedButton = 1;
|
||||||
// force direct scrolling in this case
|
// 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((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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -139,9 +139,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
} else {
|
} else {
|
||||||
if(m_size.y() < m_maxSize.y()
|
if(m_size.y() < m_maxSize.y()
|
||||||
|| m_originScrooled.y() != 0
|
|| 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(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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -158,9 +158,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
} else {
|
} else {
|
||||||
if(m_size.y() < m_maxSize.y()
|
if(m_size.y() < m_maxSize.y()
|
||||||
|| m_originScrooled.y()!=0
|
|| 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(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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -170,9 +170,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
// Scrool Left
|
// Scrool Left
|
||||||
if(m_size.x() < m_maxSize.x()
|
if(m_size.x() < m_maxSize.x()
|
||||||
|| m_originScrooled.x()!=0
|
|| 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(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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -181,9 +181,9 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
// Scrool Right
|
// Scrool Right
|
||||||
if(m_size.x() < m_maxSize.x()
|
if(m_size.x() < m_maxSize.x()
|
||||||
|| m_originScrooled.x()!=0
|
|| 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(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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -252,20 +252,20 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
}
|
}
|
||||||
markToRedraw();
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableHorizontal
|
if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableHorizontal
|
||||||
&& _event.getStatus() == gale::key::status::move) {
|
&& _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((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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableVertical
|
if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableVertical
|
||||||
&& _event.getStatus() == gale::key::status::move) {
|
&& _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((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();
|
markToRedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -301,8 +301,8 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
if (_event.getStatus() == gale::key::status::move) {
|
if (_event.getStatus() == gale::key::status::move) {
|
||||||
m_originScrooled.setX(m_originScrooled.x() - (relativePos.x() - m_fingerMoveStartPos[idTable].x())*0.5f);
|
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.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.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)));
|
m_originScrooled.setY(std::avg(0.0f, m_originScrooled.y(), (m_maxSize.y() - m_size.y()*m_limitScrolling.y())));
|
||||||
m_fingerMoveStartPos[idTable] = relativePos;
|
m_fingerMoveStartPos[idTable] = relativePos;
|
||||||
EWOL_VERBOSE("SCROOL == > MOVE m_originScrooled=" << m_originScrooled << " " << relativePos << " " << m_highSpeedStartPos);
|
EWOL_VERBOSE("SCROOL == > MOVE m_originScrooled=" << m_originScrooled << " " << relativePos << " " << m_highSpeedStartPos);
|
||||||
markToRedraw();
|
markToRedraw();
|
||||||
@ -347,13 +347,21 @@ bool ewol::widget::WidgetScrolled::onEventInput(const ewol::event::Input& _event
|
|||||||
markToRedraw();
|
markToRedraw();
|
||||||
}
|
}
|
||||||
return true;
|
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
|
} if ( m_highSpeedMode == ewol::widget::Scroll::speedModeEnableFinger
|
||||||
&& _event.getStatus() == gale::key::status::move) {
|
&& _event.getStatus() == gale::key::status::move) {
|
||||||
//m_originScrooled.x = (int32_t)(m_maxSize.x * x / m_size.x);
|
//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.setX(m_originScrooled.x() - (relativePos.x() - m_highSpeedStartPos.x()));
|
||||||
m_originScrooled.setY(m_originScrooled.y() - (relativePos.y() - m_highSpeedStartPos.y()));
|
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.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)));
|
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());
|
m_highSpeedStartPos.setValue(relativePos.x(), relativePos.y());
|
||||||
EWOL_VERBOSE("SCROOL == > MOVE m_originScrooled=" << m_originScrooled << " " << relativePos << " " << m_highSpeedStartPos);
|
EWOL_VERBOSE("SCROOL == > MOVE m_originScrooled=" << m_originScrooled << " " << relativePos << " " << m_highSpeedStartPos);
|
||||||
markToRedraw();
|
markToRedraw();
|
||||||
|
@ -38,7 +38,7 @@ namespace ewol {
|
|||||||
protected:
|
protected:
|
||||||
vec2 m_originScrooled; //!< pixel distance from the origin of the display (Bottum left)
|
vec2 m_originScrooled; //!< pixel distance from the origin of the display (Bottum left)
|
||||||
vec2 m_maxSize; //!< Maximum size of the Widget ==> to display scrollbar
|
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 :
|
private: // Mouse section :
|
||||||
enum scrollingMode m_scroollingMode; //!< mode of management of the scrooling
|
enum scrollingMode m_scroollingMode; //!< mode of management of the scrooling
|
||||||
float m_pixelScrolling;
|
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 ...
|
* @param[in] _poucentageLimit pourcent of the limit of view nothing in the widget when arriving at the end ...
|
||||||
*/
|
*/
|
||||||
void setLimitScrolling(float _poucentageLimit) {
|
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:
|
protected:
|
||||||
virtual void onChangePropertyShapeVert();
|
virtual void onChangePropertyShapeVert();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user