@@ -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
502512void 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
618627void 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
660669void Slider::onPressStateChangedToNormal ()
0 commit comments