Skip to content

Commit 57eed97

Browse files
rh101minggo
authored andcommitted
Only send the ON_PERCENTAGE_CHANGED if and only if the percentage value has actually changed. (cocos2d#19556)
1 parent 5944857 commit 57eed97

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

cocos/ui/UISlider.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -453,13 +453,24 @@ void Slider::setPercent(int percent)
453453
{
454454
percent = 0;
455455
}
456-
_percent = percent;
457-
float res = 1.0 * percent / _maxPercent;
456+
457+
// Only send event if value has changed
458+
if (_percent != percent)
459+
{
460+
_percent = percent;
461+
updateVisualSlider();
462+
percentChangedEvent(EventType::ON_PERCENTAGE_CHANGED);
463+
}
464+
}
465+
466+
void Slider::updateVisualSlider()
467+
{
468+
float res = 1.0 * _percent / _maxPercent;
458469
float dis = _barLength * res;
459470
_slidBallRenderer->setPosition(dis, _contentSize.height / 2.0f);
460471
if (_scale9Enabled)
461472
{
462-
_progressBarRenderer->setPreferredSize(Size(dis,_contentSize.height));
473+
_progressBarRenderer->setPreferredSize(Size(dis, _contentSize.height));
463474
}
464475
else
465476
{
@@ -496,13 +507,11 @@ void Slider::onTouchMoved(Touch *touch, Event* /*unusedEvent*/)
496507
{
497508
_touchMovePosition = touch->getLocation();
498509
setPercent(getPercentWithBallPos(_touchMovePosition));
499-
percentChangedEvent(EventType::ON_PERCENTAGE_CHANGED);
500510
}
501511

502512
void Slider::onTouchEnded(Touch *touch, Event *unusedEvent)
503513
{
504514
Widget::onTouchEnded(touch, unusedEvent);
505-
percentChangedEvent(EventType::ON_PERCENTAGE_CHANGED);
506515
percentChangedEvent(EventType::ON_SLIDEBALL_UP);
507516
}
508517

@@ -612,7 +621,7 @@ void Slider::barRendererScaleChangedWithSize()
612621
}
613622
}
614623
_barRenderer->setPosition(_contentSize.width / 2.0f, _contentSize.height / 2.0f);
615-
setPercent(_percent);
624+
updateVisualSlider();
616625
}
617626

618627
void Slider::progressBarRendererScaleChangedWithSize()
@@ -654,7 +663,7 @@ void Slider::progressBarRendererScaleChangedWithSize()
654663
}
655664
}
656665
_progressBarRenderer->setPosition(0.0f, _contentSize.height / 2.0f);
657-
setPercent(_percent);
666+
updateVisualSlider();
658667
}
659668

660669
void Slider::onPressStateChangedToNormal()

cocos/ui/UISlider.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ class CC_GUI_DLL Slider : public Widget
204204
*/
205205
void setPercent(int percent);
206206

207+
/**
208+
* Updates the visual elements of the slider.
209+
*/
210+
void updateVisualSlider();
211+
207212
/**
208213
* Gets the progress direction of slider.
209214
*

0 commit comments

Comments
 (0)